当前位置:   article > 正文

C语言实现单链表创建、删除、查找、插入_)定义单链表,编写单链表初始化函数、插入函数(在某个位置插入一个元素)、查找函数(按值查找)、删除函

)定义单链表,编写单链表初始化函数、插入函数(在某个位置插入一个元素)、查找函数(按值查找)、删除函数(删除单链表中某个位置上的元素)、输出函数(显示单链表中每个元素)、主函数。

本文将详细的介绍C语言单链表的创建、删除、查找、插入以及输出功能

一、创建

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef int ElemType;
  4. /*结构体部分*/
  5. typedef struct Node
  6. {
  7. ElemType data; //数值域
  8. struct Node *next; //指针域
  9. }Linklist;
  10. Linklist *InitList(Linklist *L) //初始化单链表
  11. {
  12. L = (Linklist *) malloc(sizeof(Linklist));
  13. L->next = NULL;
  14. return L;
  15. }
  16. Linklist *CreateList(int n)
  17. {
  18. /*通过输入n个数据,创建一个单链表*/
  19. int x,i;
  20. Linklist *L,*r,*p;
  21. L = InitList(L); //构造头结点
  22. r = L;
  23. printf("input %d value: ",n);
  24. for(i=0;i<n;i++)
  25. {
  26. scanf("%d",&x);
  27. p = (Linklist *)malloc(sizeof(Linklist));
  28. p -> data = x;
  29. p -> next = NULL;
  30. r->next = p;
  31. r = r->next; //指针r始终指向链表中末数据元素所在位置
  32. }
  33. return L;
  34. }

二、插入

  1. int InsItem1(Linklist *L,ElemType item,int x) /*给定的序号来插入*/
  2. {
  3. int i = 1;
  4. Linklist *p,*t;
  5. p = L;
  6. t = (Linklist *)malloc(sizeof(Linklist));
  7. t ->data = item;
  8. if(L->next==NULL)
  9. { /*若L为空表且要求将新结点插入到第0个位置*/
  10. if(x==1)
  11. {
  12. L->next=t;
  13. t->next=NULL;
  14. return 1;
  15. }
  16. /*若L为空表且要求将新结点插入到第非0个位置 ,则操作失败*/
  17. else
  18. {
  19. printf("wrong!\n");
  20. return 0;
  21. }
  22. }
  23. while(p->next!=NULL&&i<x)
  24. /*查找第i个节点*/
  25. {
  26. p = p->next;
  27. i++;
  28. }
  29. if(p->next==NULL&&i<x)
  30. /*在表中不存在插入位置i ,找不到,则插入操作失败*/
  31. {
  32. printf("The node %d is not exist\n",x);
  33. return 0;
  34. }
  35. else
  36. {
  37. t->next = p->next;
  38. p->next = t;
  39. return 1;
  40. }
  41. }
  42. int InsItem2(Linklist *L,ElemType item,ElemType k) /*插入给定值在链表中的位置*/
  43. {
  44. Linklist *q,*p,*t;
  45. t = (Linklist *)malloc(sizeof(Linklist));
  46. t->data = item;
  47. if(L->next==NULL)
  48. {
  49. printf("The linklist is empty\n");
  50. return 0;
  51. }
  52. else
  53. {
  54. q = L;
  55. p = L->next;
  56. while(p->next!=NULL)/*查找值为k的结点*/
  57. {
  58. if(p->data!=k)
  59. {
  60. q = p;
  61. p = p->next;
  62. }
  63. else
  64. break;
  65. }
  66. if(p==NULL)/*如p= =NULL,则没有值为k的结点,插入操作失败*/
  67. {
  68. printf("The node %d is not exist\n",k);
  69. return 0;
  70. }
  71. else
  72. {
  73. q->next = t;
  74. t->next = p;
  75. return 1;
  76. }
  77. }
  78. }

三、删除

  1. int DelItem(Linklist *L,int x)
  2. //在单链表中删除数据元素
  3. {
  4. int i = 1;
  5. Linklist *p,*q;
  6. p = L;
  7. if(L->next==NULL) /*L为空表,无结点可删除*/
  8. {
  9. printf("The linklist is empty!\n");
  10. return 0;
  11. }
  12. while(p->next!=NULL&&i<x)
  13. {
  14. p = p->next;
  15. i++;
  16. }
  17. if(p->next==NULL)
  18. /*若没有第i个结点,则删除操作失败*/
  19. {
  20. printf("The node %d is not exist\n",x);
  21. return 0;
  22. }
  23. else
  24. {
  25. q = p->next;
  26. p->next = p->next->next;
  27. free(q);
  28. return 1;
  29. }
  30. }

四、查找

  1. int LocItem(Linklist *L,ElemType x)
  2. //查找给定值的结点位置
  3. {
  4. Linklist *p,*q,*r;
  5. int i = 1;
  6. if(L->next==NULL)
  7. {
  8. printf("The linklist is empty\n");
  9. return 0;
  10. }
  11. else
  12. {
  13. p = L->next;
  14. while(p!=NULL)
  15. {
  16. if(p->data!=x)
  17. {
  18. i++;
  19. p = p->next;
  20. }
  21. else
  22. break;
  23. }
  24. if(p==NULL)
  25. /*如p= =NULL,则没有值为item的结点,删除操作失败*/
  26. {
  27. printf("The node %d is not exist\n",x);
  28. return 0;
  29. }
  30. /*若找到该节点返回该节点的位置*/
  31. else
  32. return i;
  33. }
  34. }

五、输出

  1. void output(Linklist *L) //输出
  2. {
  3. Linklist *p;
  4. p = L->next;
  5. printf("output element: \n");
  6. for(;p!=NULL;p=p->next)
  7. {
  8. printf(" %d ",p->data);
  9. }
  10. printf("\n");
  11. }

六、主函数部分

  1. int main()
  2. {
  3. ElemType x = 5;
  4. Linklist *L;
  5. L = CreateList(x);
  6. output(L);
  7. InsItem1(L,3,2);
  8. output(L);
  9. InsItem1(L,3,4);
  10. output(L);
  11. DelItem(L,3);
  12. output(L);
  13. printf("3的位置是: %d",LocItem(L,3));
  14. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/893367
推荐阅读
相关标签
  

闽ICP备14008679号