C语言链表的操作实例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档