当前位置:   article > 正文

(一)顺序表和单链表的初始化、插入、删除等操作_(1)定义一个存储整数的顺序表和单链表。 (2)编写初始化/创建、插入、查找和删除操

(1)定义一个存储整数的顺序表和单链表。 (2)编写初始化/创建、插入、查找和删除操

线性表

定义
  1. #define MAXSIZE 20 //线性表最长长度
  2. typedef int ElemType; //数据类型
  3. typedef struct{
  4. ElemType data[MAXSIZE];
  5. int length;
  6. }SqList;
函数说明
  1. /**
  2. * 顺序表
  3. * InitList(*L) 初始化
  4. * ListEmpty(L) 若为空,返回true
  5. * ClearList(*L) 清空
  6. * GetElem(L,i,*e) 第i个位置元素返回给e
  7. * LocateElem(L,e) 查找与e相同的元素,返回元素在表中序号
  8. * ListInsert(*L,i,e) 第i个元素之前插入元素
  9. * ListDelete(*L,i,*e) 删除L的第i个数据
  10. * * @return
  11. */

函数部分
  1. int i;
  2. Status InitList(SqList *L){
  3. L->length = 0;
  4. for(i = 0;i < MAXSIZE; i++){
  5. L->data[i] = i;
  6. L->length++;
  7. }
  8. return OK;
  9. }
  10. Status Output(SqList *L){
  11. for(i = 0; i < MAXSIZE; i++){
  12. printf("%d ",L->data[i]);
  13. }
  14. printf("L->length:%d\n",L->length);
  15. return OK;
  16. }
  17. Status GetElem(SqList L,int i,ElemType *e){
  18. *e = L.data[i-1];
  19. return OK;
  20. }
  21. Status LocateElem(SqList L,ElemType e){
  22. for(int i = 0; i < MAXSIZE; i++){
  23. if(L.data[i]==e){
  24. return i;
  25. }
  26. }
  27. return FALSE;
  28. }
  29. Status ListInsert(SqList *L,int i,ElemType e){
  30. int k;
  31. if(L->length == MAXSIZE)
  32. return ERROR;
  33. if(i < 1 || i > L->length+1)
  34. return ERROR;
  35. if(i<=L->length){
  36. for(k = L->length-1;k>=i-1;k--)
  37. L->data[k+1] = L->data[k];
  38. }
  39. L->data[i-1] = e;
  40. L->length++;
  41. return OK;
  42. }
  43. Status ListDelete(SqList *L,int i,ElemType *e){
  44. int k;
  45. if(L->length == 0)
  46. return ERROR;
  47. if(i<1 || i>L->length)
  48. return ERROR;
  49. *e = L->data[i-1];
  50. if(i<L->length){
  51. for(k=i;k<L->length;k++)
  52. L->data[k-1] = L->data[k];
  53. }
  54. L->length--;
  55. return OK;
  56. }

main函数
  1. int main() {
  2. int i = 0;
  3. ElemType e;
  4. //定义L
  5. SqList L;
  6. //初始化L
  7. InitList(&L);
  8. //输出L
  9. Output(&L);
  10. //第i个位置元素返回给e
  11. printf("请输入i的值:");
  12. scanf("%d",&i);
  13. GetElem(L,i,&e);
  14. printf("e的值是:%d\n",e);
  15. //查找与e相同的元素,返回元素在表中序号
  16. printf("请输入e的值:");
  17. scanf("%d",&e);
  18. int j = LocateElem(L,e);
  19. if(j==FALSE){
  20. printf("没有与e相同的元素");
  21. }else{
  22. printf("元素在表中的序号是:%d\n",j);
  23. }
  24. //删除L的第i个数据
  25. printf("请输入要删除第几个数据:");
  26. scanf("%d",&i);
  27. ListDelete(&L,i,&e);
  28. printf("删除后的线性表:");
  29. Output(&L);
  30. //第i个元素之前插入元素
  31. printf("请输入i的值:");
  32. scanf("%d",&i);
  33. printf("请输入要插入输的值");
  34. scanf("%d",&e);
  35. ListInsert(&L,i,e);
  36. printf("插入后的线性表:");
  37. Output(&L);
  38. return 0;
  39. }

单链表

定义

  1. typedef int ElemType;
  2. typedef struct Node{
  3. ElemType data;
  4. struct Node *next;
  5. }Node;
  6. typedef struct Node *LinkList;

函数说明

  1. /**
  2. * 单链表
  3. * InitLinkList(L) 初始化L
  4. * OutputLinkList(L) 输出L
  5. * LinkedListCreateH 头插法
  6. * LinkedListCreateT 尾插法
  7. * Length(L) 长度
  8. * GetElem(L,i,*e) 获取第i个元素值
  9. * ListInsert(L,i,e) 在i个节点之前插入新的数
  10. * ListDelete(L,i,*e) 删除第i个节点
  11. * ClearList(L)
  12. * @return
  13. */

函数部分

  1. LinkList InitLinkList(){
  2. LinkList L;
  3. L = (LinkList)malloc(sizeof(Node));
  4. if(L==NULL)
  5. printf("空间分配失败");
  6. L->next = NULL;
  7. return L;
  8. }
  9. //头插法
  10. LinkList LinkedListCreateH(LinkList L){
  11. ElemType x;
  12. for(int i=0;i<5;i++){
  13. printf("请输入第%d个数据:",i+1);
  14. scanf("%d",&x);
  15. LinkList p;
  16. p = (LinkList)malloc(sizeof(Node));
  17. p->data = x;
  18. p->next = L->next;
  19. L->next = p;
  20. }
  21. return L;
  22. }
  23. //尾插法
  24. LinkList LinkedListCreateT(LinkList L){
  25. LinkList r;
  26. r = L;
  27. while(r->next){
  28. r = r->next;
  29. }
  30. ElemType x;
  31. for (int i = 0; i < 5; i++) {
  32. printf("请输入第%d个数据:",i+1);
  33. scanf("%d",&x);
  34. LinkList p;
  35. p = (LinkList)malloc(sizeof(Node));
  36. p->data = x;
  37. r->next = p;
  38. r = p;
  39. }
  40. r->next = NULL;
  41. return L;
  42. }
  43. Status OutputLinkList(LinkList L){
  44. LinkList p = L->next;
  45. while(p!=NULL){
  46. printf("%d ",p->data);
  47. p = p->next;
  48. }
  49. return OK;
  50. }
  51. Status Length(LinkList L){
  52. int length = 0;
  53. LinkList p;
  54. p = L->next;
  55. while(p){
  56. p = p->next;
  57. length++;
  58. }
  59. return length;
  60. }
  61. Status GetElem(LinkList L,int i,ElemType *e){
  62. int j;
  63. LinkList p;
  64. p = L->next;
  65. j = 1;
  66. while (p && j<i){
  67. p = p->next;
  68. ++j;
  69. }
  70. if(!p || j>i)
  71. return ERROR;
  72. *e = p->data;
  73. return OK;
  74. }
  75. LinkList ListInsert(LinkList L,int i,ElemType e){
  76. int j;
  77. LinkList p,s;
  78. p = L;
  79. j = 1;
  80. while (p && j<i){
  81. p = p->next;
  82. ++j;
  83. }
  84. if(!p || j>i)
  85. return ERROR;
  86. s = (LinkList)malloc(sizeof(Node));
  87. s->data = e;
  88. s->next = p->next;
  89. p->next = s;
  90. return L;
  91. }
  92. LinkList ListDelete(LinkList L,int i,ElemType *e){
  93. int j;
  94. LinkList p,q;
  95. p = L; //一开始p是指向头指针的,所以数值为空
  96. j = 1;
  97. while(p->next && j<i){
  98. p = p->next;
  99. ++j;
  100. }
  101. if(!(p->next)||j >i)
  102. return ERROR;
  103. q = p->next;
  104. p->next = q->next;
  105. *e = q->data;
  106. free(q);
  107. return L;
  108. }
  109. LinkList ClearList(LinkList L){
  110. LinkList p,q;
  111. p = L->next;
  112. while(p){
  113. q = p->next;
  114. free(p);
  115. p = q;
  116. }
  117. L->next = NULL;
  118. }
  119. Status IsClear(LinkList L){
  120. LinkList p;
  121. p = L;
  122. if(p->next==NULL)
  123. return OK;
  124. else
  125. return FALSE;
  126. }

main函数

  1. int main() {
  2. //初始化
  3. LinkList L = InitLinkList();
  4. //头插法
  5. LinkedListCreateH(L);
  6. //输出
  7. OutputLinkList(L);
  8. //尾插法
  9. LinkedListCreateT(L);
  10. //输出
  11. OutputLinkList(L);
  12. //长度
  13. int length = Length(L);
  14. printf("L长度是:%d\n",length);
  15. int i;
  16. ElemType e;
  17. printf("请输入要获取第几个元素的值:");
  18. scanf("%d",&i);
  19. GetElem(L,i,&e);
  20. printf("第%d个元素的值是:%d\n",i,e);
  21. printf("请输入要在第几个数据之前插入:");
  22. scanf("%d",&i);
  23. printf("请输入要插入的值:");
  24. scanf("%d",&e);
  25. ListInsert(L,i,e);
  26. //输出
  27. OutputLinkList(L);
  28. printf("请输入要删除第几个数值:");
  29. scanf("%d",&i);
  30. ListDelete(L,i,&e);
  31. //输出
  32. OutputLinkList(L);
  33. ClearList(L);
  34. printf("线性表是否清除:%d\n",IsClear(L));
  35. return 0;
  36. }












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

闽ICP备14008679号