当前位置:   article > 正文

数据结构 基本代码——线性表,链表实现 C语言_线性表的链表实现代码

线性表的链表实现代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int ElemType;
  4. typedef struct LNode{//单链表结构体定义
  5. ElemType data;//数据域
  6. struct LNode *next;//指针域
  7. }LNode,*LinkList;
  8. //创,增删改查
  9. //初始化单链表(带头结点)
  10. bool InitLinkList(LinkList &L){
  11. L = (LNode *)malloc(sizeof(LNode));//创建头结点
  12. L->next = NULL;
  13. return true;
  14. }
  15. //创建单链表(头插法)
  16. void CreateLinkList(LinkList &L){
  17. InitLinkList(L);//初始化单链表
  18. int elem;
  19. printf("\n请“依次”输入您要建立的链表,输入-999结束\n") ;
  20. scanf("%d",&elem);
  21. while(elem!=-999){
  22. LNode *s = (LNode *)malloc(sizeof(LNode));//创建新结点以实现插入
  23. //头插法插入新元素
  24. s->data = elem;
  25. s->next = L->next;
  26. L->next = s;
  27. //获取新数据元素
  28. scanf("%d",&elem);
  29. }
  30. }
  31. //在某位置插入新元素
  32. bool InsertById(LinkList &L,int i,int e){
  33. LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
  34. int j = 0;//计数器
  35. while(j<i-1&&p!=NULL){//让计数器随着工作指针递增,直到找到第i-1个位置
  36. p = p->next;
  37. j++;
  38. }
  39. if(p==NULL||i<1){//检查插入的位置是否有误
  40. printf("插入的位置有误");
  41. return false;
  42. }
  43. //插入成功,开始插入
  44. LNode *s = (LNode *)malloc(sizeof(LNode));
  45. s->data = e;
  46. s->next = p->next;
  47. p->next = s;
  48. return true;
  49. }
  50. //在某位置删除元素(结点),与插入新节点一样,找到第i个位置的前驱结点即可,不同点在于判断语句的工作指针判断需要调整
  51. bool DeleteById(LinkList &L,int i){
  52. LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
  53. int j = 0;//计数器
  54. while(j<i-1&&p->next!=NULL){//递增,直到找到第i-1个位置(这里前驱结点所指结点不能为空)
  55. p = p->next;
  56. j++;
  57. }
  58. if(p->next == NULL||i<1){//检查删除的位置是否合法
  59. printf("\n删除的位置出错!");
  60. return false;
  61. }
  62. //删除的位置正确,开始删除
  63. LNode *q = p->next;//该指针所指结点必定为删除结点
  64. p->next = q->next;
  65. q->next =NULL;
  66. delete(q);
  67. return true;
  68. }
  69. //修改某位置元素(与插入结点类似,但工作指针应当指向目标结点位置)
  70. bool ReviseById(LinkList &L,int i,int e){
  71. LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
  72. int j = 0;//计数器
  73. while(j<i&&p!=NULL){//递增,直到找到第i个位置(这里前驱结点所指结点不能为空)
  74. p = p->next;
  75. j++;
  76. }
  77. if(p == NULL||i<1){
  78. printf("\n修改的位置出错!");
  79. return false;
  80. }
  81. //可修改,开始修改元素
  82. p->data = e;
  83. return true;
  84. }
  85. //查询所有链表元素
  86. void ShowLinkList(LinkList L){
  87. LNode *p = L->next;
  88. printf("\n该链表元素为:");
  89. while(p!=NULL){
  90. printf("%d\t",p->data);
  91. p=p->next;
  92. }
  93. }
  94. int main(){
  95. LNode *L = (LNode *)malloc(sizeof(LNode));
  96. CreateLinkList(L);
  97. ShowLinkList(L);
  98. //插入元素功能检查
  99. InsertById(L,4,4);
  100. ShowLinkList(L);
  101. //删除元素功能检查
  102. DeleteById(L,4);
  103. ShowLinkList(L);
  104. //修改元素功能检查
  105. ReviseById(L,1,3);
  106. ShowLinkList(L);
  107. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/426644
推荐阅读
相关标签
  

闽ICP备14008679号