单链表的创建,查找,删除,插入。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. //定义学生的结构体
  5. typedef struct stu
  6. {
  7. int id;
  8. char name[20];
  9. struct stu * next;
  10. }stu;

  11. //该函数是创建学生信息
  12. stu *Create_chain()
  13. {
  14.      stu* head = NULL;
  15. stu* p1 = NULL;
  16. stu* p2 = NULL;
  17. p1 = (stu*)malloc(1*sizeof(stu));
  18. printf("please input a stu infor\n");
  19.      scanf("%d%s", &(p1->id), p1->name);
  20. p2 = head = p1;
  21. while(p1->id != 0)
  22. {
  23. p1 = (stu*)malloc(1*sizeof(stu));
  24.     printf("please input a stu infor\n");
  25.          scanf("%d%s", &(p1->id), p1->name);
  26.          
  27. p2->next = p1;
  28. p2 = p1;
  29. }
  30.      p2->next = NULL;
  31. return head;
  32. }
  33. //该函数是打印学生信息
  34. void Print_chain(stu * head)
  35. {
  36.     stu *p;
  37.     p = head;
  38.     while(p->next != NULL)
  39. {
  40.     printf("%-12d%-12s\n",p->id, p->name);
  41. p = p->next;
  42. }

  43. }
  44. //该函数是插入学生信息
  1. void Insert_info(stu* head, stu* temp)
  2. {
  3.      stu* p1 = NULL;
  4. stu* p2 = NULL;
  5. p1 = head;
  6. if(head == NULL)
  7. {
  8. head = temp;
  9. temp->next = NULL;
  10. }
  11. else
  12. {
  13. while((p1->next != NULL) && (p1->id<temp->id))
  14. {
  15. p2 = p1;
  16. p1 = p1->next;
  17. }
  18. if(p1->id > temp->id)
  19. {
  20. p2->next = temp;
  21. temp->next = p1;
  22. }
  23. if (p1->next == NULL)
  24. {
  25. p1->next = temp;
  26. temp->next = NULL;
  27. }
  28. }
  29. }


  30. stu* Delete_info(stu* head, int id)
  31. {
  32.     stu* p1 = NULL;
  33. stu* p2 = NULL;
  34. p1 = head;
  35. if (head == NULL)
  36. {
  37. printf("not exist stu_info\n");
  38. return head;
  39. }
  40. while((p1->next != NULL)&& (p1->id != id))
  41. {
  42. p2 = p1;
  43.    p1 = p1->next;
  44. }
  45. if (p1->id == id)
  46. {
  47. if (p1 == head)
  48. {
  49. head = p1->next;
  50. }
  51. else 
  52. {
  53.             p2->next = p1->next;
  54. }
  55. }
  56. else
  57. {
  58.    printf("not find the stu\n ");
  59. }
  60.     return head;
  61. }



  62. void Free_chain(stu* head)
  63. {
  64.     stu *p;
  65.     p = head;
  66.     while(p->next != NULL)
  67. {
  68.     free(p);
  69. p = p->next;
  70. }
  71. }


  72. int main()
  73. {
  74. int id ;
  75. stu* head;
  76. stu* tmp = (stu*)malloc(1*sizeof(stu));
  77.     head = Create_chain();
  78. Print_chain(head);
  79. puts("please input stu info\n");
  80. scanf("%d%s", &tmp->id, tmp->name);
  81. Insert_info(head, tmp);
  82. Print_chain(head);
  83. printf("please input the id you want delete\n");
  84.     scanf("%d\n", &id);
  85. head = Delete_info(head, id);
  86. Print_chain(head);
  87. Free_chain(head);
  88. return 0;
  89. }
posted @ 2013-11-24 23:25  wangxiangshang  阅读(357)  评论(0编辑  收藏  举报