当前位置:文档之家› C语言链表的操作实例

C语言链表的操作实例

C语言链表的操作实例
C语言链表的操作实例

关于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);

newhead=insert_node(newhead,ptr2,ptr1); }while(newhead1!=newhead);

return newhead;

}

link delete_node(link head, link ptr,link ptr1) {

link ptr2;

if(ptr!=head){

if(ptr->next==NULL){

ptr1->next=NULL;

free(ptr);

}

else{

ptr2=ptr->next;

free(ptr);

ptr1->next=ptr2;

}

}

else{

head=ptr->next;

free(ptr);

}

return head;

}

int main()

{

link head,ptr,newnode,ptr1;

int flag=1,reversed=0;

int IDnum,i;

head=create_list();

if(head->num==NULL){

printf("You didnt create a list,try again\n"); getchar();

getchar();

}

else{

printf("\n\nStudent Records Created!\n\n");

flag=1;

while(flag)

{

printf("\n******************************************\n");

printf("1: Insert new student record\n");

printf("2: Delete student record\n");

printf("3: Display students record\n");

printf("4: Reverse student record\n");

printf("0: Quit\n");

printf("\nPlease select a option to maintain the student record:\n"); scanf("%d",&i);

switch(i)

{

case 0:

{

flag=0;

break;

}

case 1:

{

newnode=(link)malloc(sizeof(node));

if(!newnode)

{

printf("Memory Allocation Fail! \n");

exit(1);

}

else

newnode->next=NULL;

printf("Please enter the new student ID==> ");

scanf("%d",&newnode->num);

printf("Please enter the new student name==> ");

scanf("%s",&newnode->name);

ptr = find_node_loc(head, newnode, reversed%2);

head = insert_node(head, ptr, newnode);

{

printf("Memory Allocation Fail! \n");

exit(1);

}

printf("\n**********************************************"); printf("\nStudent record after insertion:\n\n");

print_list(head);

printf("**********************************************"); break;

}

case 2:

{

printf("reversed:%d",reversed);

printf("Which student you want to delete? (ID)==>"); scanf("%d",&IDnum);

if(IDnum)

{

ptr=find_node(head,IDnum);

ptr1=find_node_loc(head,ptr,reversed%2);

if(!ptr)

printf("no record\n");

else

{

head=delete_node(head,ptr,ptr1);

printf("\n**********************************************"); printf("\nStudent record after deleted node:\n"); print_list(head);

printf("**********************************************"); }

break;

}

else

exit(1);

}

case 3:

{

print_list(head);

break;

}

case 4:

reversed++;

head=reverse(head,reversed);

print_list(head);

break;

default:

printf("Wrong input! Please input a number in (0-3)"); }

}

}

return 0;

}

相关主题
文本预览
相关文档 最新文档