Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128026
  • 博文数量: 30
  • 博客积分: 972
  • 博客等级: 中士
  • 技术积分: 332
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-08 10:04
文章分类

全部博文(30)

文章存档

2012年(30)

分类: C/C++

2012-06-16 12:00:05


 

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct stu
  4. {
  5.  int age;
  6.  char name[10];
  7.  struct stu *next;
  8. }STU;
  9. STU *creat(int n)
  10. {
  11.  STU *head=NULL,*pf=NULL,*pb=NULL;
  12.  int i;
  13.  for(i=0;i<n;i++)
  14.  {
  15.   pb=(STU *)malloc(sizeof(STU));
  16.   printf("请输入%d数据:",i+1);
  17.   scanf("%d %s",&pb->age,pb->name);
  18.   if(i==0)
  19.   {
  20.    head=pb;
  21.    pf=pb;
  22.   }
  23.   else
  24.   {
  25.    pf->next=pb;
  26.    pf=pb;
  27.   }
  28.  }
  29.  pb->next=NULL;
  30.  return head;
  31. }
  32. void search_link(STU *head)
  33. {
  34.  STU *temp=head;
  35.  int flag=0,age;
  36.  printf("请输入查找人的age:");
  37.  scanf("%d",&age);
  38.  while(temp!=NULL)
  39.  { if(age==temp->age)
  40.   {
  41.   printf("%d %s\n",temp->age,temp->name);
  42.   flag=1;
  43.   break;
  44.   }
  45.   temp=temp->next;
  46.  }
  47.  if(flag==0)
  48.   printf("无此人信息\n");
  49. }
  50. void print_link(STU *head)
  51. {
  52.  STU *temp=head;
  53.  while(temp!=NULL)
  54.  {
  55.   printf("%d %s\n",temp->age,temp->name);
  56.   temp=temp->next;
  57.  }
  58. }
  59. STU *add_link(STU *head)
  60. {
  61.  STU *temp=head;
  62.  STU *p_new;
  63.  p_new=(STU *)malloc(sizeof(STU));
  64.  printf("请输入插入的数据:");
  65.  scanf("%d %s",&p_new->age,p_new->name);
  66.  if(temp==NULL)
  67.   {
  68.    head=p_new;
  69.    p_new=NULL;
  70.   }
  71.  while(temp->next!=NULL)
  72.   temp=temp->next;
  73.   temp->next=p_new;
  74.   p_new->next=NULL;
  75.  return head;
  76. }
  77. STU *insert_link(STU *head)
  78. {
  79.  STU *temp=head;
  80.  STU *p_new;
  81.  STU *pf;
  82.  int i=0,flag=0;
  83.  p_new=(STU *)malloc(sizeof(STU));
  84.  printf("请输入插入有序数据节点:",i+1);
  85.  scanf("%d %s",&p_new->age,p_new->name);
  86.  while(temp!=NULL)
  87.  {
  88.  if(temp->age>p_new->age)
  89.   {
  90.   if(temp==head)
  91.    {
  92.     p_new->next=head;
  93.     head=p_new;
  94.    }
  95.    else
  96.    {
  97.     pf->next=p_new;
  98.     p_new->next=temp;
  99.    }
  100.    flag=1;
  101.    break;
  102.   }
  103.  pf=temp;
  104.  temp=temp->next;
  105.  }
  106.  if(flag==0)
  107.   {
  108.    temp->next=p_new;
  109.    p_new->next=NULL;
  110.   }
  111.  return head;
  112. }
  113. STU *del_link(STU *head,int age)
  114. {
  115.  STU *temp=head;
  116.  STU *pf;
  117.  while(temp!=NULL)
  118.  {
  119.   if(temp->age==age)
  120.   {
  121.    if(temp==head)
  122.    head=temp->next;
  123.   else if(temp->next==NULL)
  124.    pf->next=NULL;
  125.   else
  126.    pf->next=temp->next;
  127.   }
  128.    pf=temp;
  129.    temp=temp->next;
  130.  }
  131.  free(temp);
  132.  return head;
  133. }
  134. STU *bubble_link(STU *head)
  135. { STU *pf,*pb,temp;
  136.  pf=head;
  137.  while(pf->next!=NULL)
  138.  {
  139.   pb=pf->next;
  140.   while(pb!=NULL)
  141.   {
  142.   if(pf->age>pb->age)
  143.    {
  144.    temp=*pf;
  145.    *pf=*pb;
  146.    *pb=temp;
  147.    temp.next=pf->next;
  148.    pf->next=pb->next;
  149.    pb->next=temp.next;
  150.    }
  151.   pb=pb->next;
  152.   }
  153.   pf=pf->next;
  154.  }
  155.  return head;
  156. }
  157. int main()
  158. {
  159.  int n=3,i_age=0;
  160.  STU *head;
  161.  head=creat(n);
  162.  print_link(head);
  163.  search_link(head);
  164.  add_link(head);
  165.  print_link(head);
  166.  printf("请输入要删除学生的年龄:");
  167.  scanf("%d",&i_age);
  168.  head=del_link(head,i_age);
  169.  print_link(head);
  170.  //head=insert_link(head);
  171.  printf("排序后的链表:\n");
  172.  bubble_link(head);
  173.  print_link(head);
  174.  return 0;
  175. }


 

阅读(1402) | 评论(0) | 转发(0) |
0

上一篇:C语言排序算法

下一篇:字符串切割函数

给主人留下些什么吧!~~