标签:
链表操作
要求用4个函数实现: 建立节点函数、建立链表函数、遍历链表函数、 删除链表节点函数
Sample input:
i
1001 Tom man 11
i
1002 lusy woman 12
i
1003 jack man 13
q
12
Sample output:
按 ‘i‘ 增加一个新节点;
按 ‘q‘ 退出!
i
学号:1001
姓名:Tom
性别:男
年龄:11
成功建立一个节点!
按 ‘i‘ 增加一个新节点;
按 ‘q‘ 退出!
i
学号:1002
姓名:Lusy
性别:女
年龄:12
成功建立一个节点!
按 ‘i‘ 增加一个新节点;
按 ‘q‘ 退出!
i
学号:1003
姓名:Jack
性别:男
年龄:13
成功建立一个节点!
按 ‘i‘ 增加一个新节点;
按 ‘q‘ 退出!
q
退出链表建立:
显示链表详细信息:
学号 姓名 性别 年龄
1001 Tom 男 11
1002 lusy 女 12
1003 jack 男 13
删除链表节点:
请输入需删除节点的学生年龄:12
成功删除节点!
删除链表节点后链表详细信息:
学号 姓名 性别 年龄
1001 Tom 男 11
1003 jack 男 13
在网上找了好久也没找到正中的写法。刚好有现在这个机会,就顺手发上我写的一篇。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 typedef struct Link 5 { 6 struct stu 7 { 8 int num; 9 char name[20]; 10 int year; 11 char sex[8]; 12 }data; 13 struct Link *next; 14 }IA; 15 16 IA *Create(); 17 IA *Insert(IA *head,IA *stud); 18 IA *Delete(IA *head,int num); 19 void Print(IA *head); 20 21 int main() 22 { 23 //freopen("a.txt","r",stdin); 24 IA *head; 25 int year; 26 27 head=Create(); 28 29 printf("删除链表节点: \n请输入需删除节点的学生年龄:"); 30 scanf("%d",&year); 31 printf("\n\n"); 32 head=Delete(head,year); 33 34 return 0; 35 } 36 37 IA *Create() 38 { 39 IA *head,*p; 40 int num,year; 41 char sex[8],name[20]; 42 char choice; 43 int size=sizeof(IA); 44 int cls=0; 45 46 head=NULL; 47 printf("按 ‘i‘ 增加一个新节点;\n按 ‘q‘ 退出!\n"); 48 scanf("%c",&choice); 49 while(choice!=‘q‘) 50 { 51 if(choice==‘i‘) 52 { 53 scanf("%d%s%s%d",&num,name,sex,&year); 54 p=(IA *)malloc(size); 55 p->data.num=num; 56 strcpy(p->data.name,name); 57 strcpy(p->data.sex,sex); 58 p->data.year=year; 59 head=Insert(head,p); 60 } 61 getchar(); 62 printf("成功建立一个节点!\n按 ‘i‘ 增加一个新节点;\n按 ‘q‘ 退出!\n"); 63 scanf("%c",&choice); 64 if(choice==‘q‘) 65 { 66 printf("退出链表建立:\n显示链表详细信息:\n"); 67 Print(head); 68 } 69 } 70 return head; 71 } 72 73 IA *Insert(IA *head,IA *stu) 74 { 75 IA *ptr,*ptr1,*ptr2; 76 77 ptr2=head; 78 ptr=stu; 79 80 if(head==NULL) 81 { 82 head=ptr; 83 head->next=NULL; 84 } 85 else 86 { 87 while((ptr->data.num>ptr2->data.num)&&(ptr2->next!=NULL)) 88 { 89 ptr1=ptr2; 90 ptr2=ptr2->next; 91 } 92 if(ptr->data.num<=ptr2->data.num) 93 { 94 if(head==ptr2) head=ptr; 95 else 96 ptr1->next=ptr; 97 ptr->next=ptr2; 98 } 99 else 100 { 101 ptr2->next=ptr; 102 ptr->next=NULL; 103 } 104 } 105 return head; 106 } 107 108 IA *Delete(IA *head,int year) 109 { 110 IA *ptr1,*ptr2; 111 112 while(head!=NULL&&head->data.year==year) 113 { 114 ptr2=head; 115 head=head->next; 116 free(ptr2); 117 } 118 119 if(head==NULL) 120 return NULL; 121 122 ptr1=head; 123 ptr2=head->next; 124 while(ptr2!=NULL) 125 { 126 if(ptr2->data.year==year) 127 { 128 ptr1->next=ptr2->next; 129 free(ptr2); 130 } 131 else 132 ptr1=ptr2; 133 ptr2=ptr1->next; 134 } 135 printf("成功删除节点!\n\n删除链表节点后链表详细信息:\n"); 136 Print(head); 137 return head; 138 } 139 140 void Print(IA *head) 141 { 142 IA *p; 143 if(head==NULL) 144 { 145 printf("\nNo Records\n"); 146 return; 147 } 148 printf("学号 姓名 性别 年龄\n"); 149 for(p=head;p!=NULL;p=p->next) 150 printf("%d\t%s\t%s\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.year); 151 }
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4213568.html