当前位置:   article > 正文

数据结构_顺序表中基本操作的实现_代码

数据结构_顺序表中基本操作的实现_代码

学习笔记,仅供参考

1.头文件

2.初始化

3.增加值

4.根据下标取值

5.查找

6.插入

7.删除

8.动态增加数组的长度

9.所有代码

10.运行结果


1.头文件

  1. //顺序表的实现——动态分配
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #define InitSize 10
  5. typedef struct{
  6. int *data;
  7. int MaxSize;
  8. int length;
  9. }SeqList;

2.初始化

  1. //初始化一个顺序表
  2. void InitList(SeqList &L){
  3. //使用malloc函数申请一片连续的存储空间
  4. L.data = (int*)malloc(InitSize*sizeof(int));
  5. L.length = 0;
  6. L.MaxSize = InitSize;
  7. }

3.增加值

  1. //增加值
  2. void AddValue(SeqList &L,int num){
  3. for (int i = 0;i<num;i++){
  4. scanf("%d",&L.data[i]);
  5. L.length++;
  6. }
  7. }

4.根据下标取值

判断所给的下标是否越界。

  1. //根据下标取值
  2. bool GetElem(SeqList &L,int num,int &e){
  3. if (num<1 || num>L.length) return false;
  4. e = L.data[num-1];
  5. return true;
  6. }

5.查找

  1. //查找
  2. int LocateElem(SeqList &L,int y){
  3. for (int i = 0;i<L.length;i++){
  4. if(L.data[i] == y) return i+1;
  5. }
  6. return 0;
  7. }

6.插入

判断是否越界,同时L.length为前置++。

  1. //插入
  2. bool ListInsert(SeqList &L,int k,int kl){
  3. if (kl<1 || kl>L.length+1) return false;
  4. if (L.length == L.MaxSize) return false;
  5. for(int i = L.length-1;i>=kl-1;i--){
  6. L.data[i+1] = L.data[i];
  7. }
  8. L.data[kl-1] = k;
  9. ++L.length;
  10. return true;
  11. }

7.删除

  1. //删除
  2. bool ListDelet(SeqList &L,int num){
  3. if (num<1 || num>L.length) return false;
  4. for(int i = num;i<L.length;i++){
  5. L.data[i-1] = L.data[i];
  6. }
  7. --L.length;
  8. return true;
  9. }

8.动态增加数组的长度

  1. //动态增加数组的长度
  2. void IncreaseSize(SeqList &L,int len){
  3. int *p = L.data;
  4. L.data = (int*)malloc((L.MaxSize+len)*sizeof(int));
  5. for(int i = 0;i<L.length;i++){
  6. L.data[i] = p[i];
  7. }
  8. L.MaxSize = L.MaxSize+len;
  9. free(p);
  10. }

9.所有代码

  1. //顺序表的实现——动态分配
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #define InitSize 10
  5. typedef struct{
  6. int *data;
  7. int MaxSize;
  8. int length;
  9. }SeqList;
  10. //初始化一个顺序表
  11. void InitList(SeqList &L){
  12. //使用malloc函数申请一片连续的存储空间
  13. L.data = (int*)malloc(InitSize*sizeof(int));
  14. L.length = 0;
  15. L.MaxSize = InitSize;
  16. }
  17. //增加值
  18. void AddValue(SeqList &L,int num){
  19. for (int i = 0;i<num;i++){
  20. scanf("%d",&L.data[i]);
  21. L.length++;
  22. }
  23. }
  24. //根据下标取值
  25. bool GetElem(SeqList &L,int num,int &e){
  26. if (num<1 || num>L.length) return false;
  27. e = L.data[num-1];
  28. return true;
  29. }
  30. //查找
  31. int LocateElem(SeqList &L,int y){
  32. for (int i = 0;i<L.length;i++){
  33. if(L.data[i] == y) return i+1;
  34. }
  35. return 0;
  36. }
  37. //插入
  38. bool ListInsert(SeqList &L,int k,int kl){
  39. if (kl<1 || kl>L.length+1) return false;
  40. if (L.length == L.MaxSize) return false;
  41. for(int i = L.length-1;i>=kl-1;i--){
  42. L.data[i+1] = L.data[i];
  43. }
  44. L.data[kl-1] = k;
  45. ++L.length;
  46. return true;
  47. }
  48. //删除
  49. bool ListDelet(SeqList &L,int num){
  50. if (num<1 || num>L.length) return false;
  51. for(int i = num;i<L.length;i++){
  52. L.data[i-1] = L.data[i];
  53. }
  54. --L.length;
  55. return true;
  56. }
  57. //动态增加数组的长度
  58. void IncreaseSize(SeqList &L,int len){
  59. int *p = L.data;
  60. L.data = (int*)malloc((L.MaxSize+len)*sizeof(int));
  61. for(int i = 0;i<L.length;i++){
  62. L.data[i] = p[i];
  63. }
  64. L.MaxSize = L.MaxSize+len;
  65. free(p);
  66. }
  67. int main(){
  68. SeqList L;
  69. int n,x;
  70. printf("请输入你要增加几条数据:");
  71. InitList(L);
  72. scanf("%d",&n);
  73. //增加值
  74. AddValue(L,n);
  75. printf("当前的数据为:") ;
  76. for(int i = 0;i<L.length;i++){
  77. printf("%d ",L.data[i]);
  78. }
  79. printf("\n");
  80. printf("当前顺序表的长度为:%d\n",L.length);
  81. //根据下标找值
  82. int e;
  83. printf("请输入你要取第几个值:");
  84. scanf("%d",&x);
  85. if (GetElem(L,x,e)) printf("找到的第%d个值为%d\n",x,e);
  86. else printf("没有找到\n");
  87. //查找
  88. int y;
  89. printf("请输入你要查找的值:");
  90. scanf("%d",&y);
  91. if (LocateElem(L,y)) printf("%d在第%d位置上\n",y,LocateElem(L,y));
  92. else printf("没有找到\n");
  93. //插入
  94. int k,kl;
  95. printf("请输入你要插入的值以及插入的位置:");
  96. scanf("%d %d",&k,&kl);
  97. if(ListInsert(L,k,kl)) printf("现在第%d位置上的值变为了%d\n",kl,k);
  98. else printf("插入失败\n");
  99. printf("当前的数据为:") ;
  100. for(int i = 0;i<L.length;i++){
  101. printf("%d ",L.data[i]);
  102. }
  103. printf("\n");
  104. printf("当前顺序表的长度为:%d\n",L.length);
  105. //删除
  106. int sc;
  107. printf("请输入你要删除第几个数据:");
  108. scanf("%d",&sc);
  109. if(ListDelet(L,sc)) printf("删除成功\n");
  110. else printf("删除失败\n");
  111. printf("当前的数据为:") ;
  112. for(int i = 0;i<L.length;i++){
  113. printf("%d ",L.data[i]);
  114. }
  115. printf("\n");
  116. printf("当前顺序表的长度为:%d\n",L.length);
  117. //增加顺序表长度
  118. int l;
  119. printf("请输入你要增加的长度:");
  120. scanf("%d",&l);
  121. IncreaseSize(L,l);
  122. printf("当前顺序表的最大长度为:%d\n",L.MaxSize);
  123. return 0;
  124. }

10.运行结果

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

闽ICP备14008679号