码迷,mamicode.com
首页 > 其他好文 > 详细

链表操作

时间:2015-01-09 17:16:39      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

链表操作

建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去,输出删除前和删除后的链表信息。

要求用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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!