C语言链表的操作实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于C语言链表的操作实例
有这样一个结构体char team//队伍名
int jifen//积分
int win//胜利场数
int lost//失利场数
现在有N个队伍,想把一个队伍信息存入一个链表结点,可增加删除队伍,修改队伍信息,用链表具体怎么实现。本人一直对链表不太清楚,想通过此例理解链表,谢谢各位高手赐教,最好注释详细,谢谢!
最佳答案
一般连表程序在c语言中要用link list来实现,我贴一个我写的程序在这里,可以运行,这个程序里包含一个structer纪录学生信息,学生号码已极学生姓名,纪录通过insert_node 添加,通过delete_node删除,并在最开始的时候通过create list function来创建最原始的数据,不用理会里面的reverse function。
#include
#include
struct list
{
int num;
char name[10];
struct list *next;
};
typedef struct list node;
typedef node *link;
link find_node_loc(link ptr, link ptr1, int reversed)
{
link ptr0=ptr;
link ptr2=NULL;
if(reversed)
{
while(ptr0!=NULL && (ptr0->num > ptr1->num))
{
ptr2=ptr0;
ptr0=ptr0->next;
}
}
else
{
while(ptr0!=NULL && (ptr0->num < ptr1->num))
{
ptr2=ptr0;
ptr0=ptr0->next;
}
}
return ptr2;
}
link find_node(link head,int IDnum)
{
link ptr;
ptr=head;
while (ptr!=NULL)
{
if(ptr->num==IDnum)
return ptr;
ptr=ptr->next;
}
return ptr;
}
void free_list(link head)
{
link ptr;
while(head!=NULL)
{
ptr=head;
head=head->next;
free(ptr);
}
}
link create_list()
{
link insert_node( link head, link ptr, link newnode); link p1,p2;
link head;
link ptrf;
int panduan=1;
int number=1;
int reversed=0;
head=(link)malloc(sizeof(node));
if(!head){
printf("Memory Allocation Fail! \n");
exit(1);
}
else{
head->num=NULL;
printf("Please enter the %d student ID==> ",number); scanf("%d",&panduan);
while(panduan!=0){
if (number==1){
head->num=panduan;
printf("Please enter the new student name==> ");
scanf("%s",&head->name);
head->next=NULL;
number++;
}
else{
printf("Please enter the %d student ID==> ",number);
scanf("%d",&panduan);
if(panduan!=0){
p1=(link)malloc(sizeof(node));
p1->num=panduan;
printf("Please enter the new student name==> ");
scanf("%s",&p1->name);
p1->next=NULL;
number++;
p2=p1;
ptrf = find_node_loc(head, p2, 0);
head=insert_node(head,ptrf,p2);
}
}
}
return head;
}
}
void print_list(link ptr)
{
int i=1;
while(ptr!=NULL){
printf("Student %d\n",i++);
printf("ID number:%d\n",ptr->num);
printf("Student name:%s\n",ptr->name);
printf("\n");
ptr=ptr->next;
}
}
link insert_node(link head,link ptr, link newnode) {
link pt1;
if (ptr!=NULL){
if(ptr->next!=NULL){
pt1=ptr->next;
ptr->next=newnode;
newnode->next=pt1;}
else{
ptr->next=newnode;
newnode->next=NULL;
}
}
else{
pt1=head;
head=newnode;
head->next=pt1;
}
return head;
}
link reverse(link newhead,int reversed){
link ptr1,ptr2,newhead1;
newhead1=newhead;
do{
newhead=newhead->next;
}while(newhead->next!=NULL);
do{
ptr1=newhead1;
newhead1=newhead1->next;
ptr2=find_node_loc(newhead,ptr1,reversed%2);