您的位置:首页 > 编程语言 > C语言/C++

c++链表简易操作

2011-06-06 15:16 309 查看
// LinkTableTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>;
using namespace std;
//学生结构体,用于构建链表
struct student
{
//string name;
char name[20];
int age;
student* nextStu;
};
//程序入口
void main()
{
student c = {"end",0,NULL};
student b = {"lucy",21,&c};
student a = {"andlu",23,&b};
student* head = &a;
student* pointer = head;
//函数申明
int getLength(student* pointer,int length);
void insertOneNode(student* head,student* pointer,int leng,int index,student* newNode);
void showAllNode(student* pointer);
bool findOneNodeByName(student* head,char* destName,bool inIsFind);
//对数组进行冒泡排序(测试)
void sortArray(int arr[],int arrLen);
//函数申明结束

//调用显示所有学生信息函数
pointer = head;
showAllNode(pointer);
//获得链表长度
pointer = head;
int leng = 0;
leng = getLength(pointer,leng);
cout<<"结果接收链表长度:"<<leng<<endl;
//查找lucy
pointer = head;
bool isFindLucy = false;
isFindLucy = findOneNodeByName(head,"lucy",isFindLucy);
cout<<"结果接收查找lucy:"<<isFindLucy<<endl;
//插入节点
head = &a;
pointer = head;
student x = {"xMen",0,NULL};
student *xmen = &x;
insertOneNode( head, pointer,leng,2,xmen);
//调用显示所有学生信息函数
pointer = head;
showAllNode(pointer);
//sort int arr
int arr[10] = {1,5,8,7,6,3,4,2,0,9};
sortArray(arr,10);
int i;
cin>>i;

}
/**
*功能描述:插入一个节点
*parm : head,头结点 index,要插入的位置的后面,第index个的后面
*/
void insertOneNode(student* head,student* pointer,int leng,int index,student* newNode)
{
//int leng = 0;
//leng = getLength(pointer,leng);
if(index > leng)
{
cout<<"抱歉,您插入的位置超出链表长度!"<<endl;
return ;
}else if(index == 0)
{
cout<<"您插入了一个头结点!"<<endl;
student* temp;
temp = head;
newNode->nextStu = temp;
head = newNode;
return;
}
for(int i = 0;i< index-1;i++)
{
pointer = pointer->nextStu;
}
newNode->nextStu = pointer->nextStu;
pointer->nextStu  = newNode;
}
/**
*功能描述:获取链表的长度
*parme :head头结点
*param :length 返回的长度值
*/
int getLength(student* pointer,int length)
{
length = 0;
while(pointer)
{
if(pointer->nextStu!=NULL)
{
length++;
pointer = pointer->nextStu;
}
else
{
cout<<"链表长度:"<<length<<endl;
return length;
}
}
}
/**
*功能描述:遍历所有节点
* param : pointer 链表头结点
* 功能  :传入链表头结点,打印出此链表的所有节点的名称
*/
void showAllNode(student* pointer)
{
while(pointer)
{
cout<<pointer->name<<endl;
pointer = pointer->nextStu;
}
}
/*
*查找一个学生名称是否存在链表中
*param:
*head     : 链表头结点
*destName :要查找学生的名称
*inIsFind :返回的结果,是否查找到了
*/
bool findOneNodeByName(student* head,char* destName,bool inIsFind)
{
inIsFind = false;
while(head)
{
if(!strcmp(destName,head->name))
{
inIsFind = true;
cout<<"找到你要找的了:"<<inIsFind<<endl;
return inIsFind;
}
head = head->nextStu;
}
return inIsFind;
}
//对链表进行排序
void sortStu()
{

}
//对数组进行冒泡排序(测试)
void sortArray(int arr[],int arrLen)
{
int flag , i , j ,temp;
for( i= 0 ;i< arrLen;i++)
{
flag = 0;
for( j = 0;j<arrLen - i - 1; j++)
{
if(arr[j]> arr[j+1])
{
flag = 1;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if(flag == 0)
{
break;
}
}
//println all data
for(i = 0;i< arrLen;i++)
cout<<arr[i]<<"->"<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: