当前位置:   article > 正文

线性表的顺序存储方式的实现(C语言实现)_c语言中如何将数组中的元素依次存入线性表

c语言中如何将数组中的元素依次存入线性表

线性表的顺序存储方式的实现 

前言:

线性表:较为常用简单的一种数据结构,一个线性表是n个数据元素的有序序列,每个数据元素的具体含义可由自身的结构体来决定。

稍复杂的线性表,一个数据元素可以由若干个数据项组成,这种情况下通常将数据元素称为记录,含有大量记录的线性表又称为文件。

线性表的顺序表示:用地址连续的存储单元一次存储线性表的数据元素---数组。

定义结构体

  1. typedef struct List{
  2. int data[MAX_SIZE];//数组
  3. int length;//长度
  4. }SqList;

构造函数

  1. //构造函数
  2. void Init_List(SqList *L)
  3. {
  4. L->length = 0;//元素个数
  5. printf("enter the 5 numbers:\n");
  6. for(int i= 0; i < 5 ;i++)
  7. {
  8. scanf("%d", &L->data[i]);
  9. L->length++;//长度增加
  10. }
  11. }

插入函数(实现较为简单,没有考虑增加空间的方法)

  1. //插入函数
  2. void Insert_List(SqList *L, int i, int e)
  3. {
  4. int loc = i-1;
  5. if (i<1 || i>L->length+1) return exit(OVERFLOW);//判断位置合法
  6. for (int j = L->length; j >= loc; j--)
  7. L->data[j+1] = L->data[j];//向后移动
  8. L->data[loc] = e;//赋值
  9. L->length++;//长度加一
  10. }

插入元素

这个时候就要开始判断了,既然是插入元素。那么我们需要告诉函数,所需要插入的线性表,插入元素的位置,和插入元素的值。我们还要判断插入的位置是否合理,还要判断容量空间是否够,如果不足需要增补空间。

在数组里面插入元素,需要将以后的元素后移,腾出位置再进行插入元素赋值后,表的的长度加一。

  • 输入表,位置,元素
  • 判断位置是否合适
  • 判断长度是否够
  • 是否增添空间
  • 元素后移
  • 元素插入
  • 表长增加

删除函数

  1. //删除函数
  2. void Delete_List(SqList *L, int i)
  3. {
  4. int e;
  5. int loc = i-1;
  6. if (i<1 || i>L->length) return exit(OVERFLOW);//判断位置合法
  7. e = L->data[loc];//保留删除值
  8. for (int j = loc; j <= L->length; j++)
  9. L->data[j] = L->data[j+1];//向前移动
  10. L->length--; //长度减一
  11. }

在数组里面删除元素,需要将以后的元素前移,表的的长度减一。

  • 输入表,位置,元素
  • 判断位置是否合适
  • 元素保留
  • 元素前移
  • 表长减一

根据位置返回值

  1. //根据位置返回值
  2. int GetElem_List(SqList *L, int i)
  3. {
  4. int e;
  5. if (i<1 || i>L->length) return 0;
  6. e = L->data[i-1];
  7. return e;
  8. }

返回表长

  1. //返回长度
  2. int Length_List(SqList *L)
  3. {
  4. return L->length;
  5. }

毁坏表

  1. void Destroy_List(SqList *L)
  2. {
  3. L->length = 0;
  4. }

完整代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define OVERFLOW -1
  4. #define MAX_SIZE 100
  5. typedef struct List{
  6. int data[MAX_SIZE];
  7. int length;
  8. }SqList;
  9. //构造函数
  10. void Init_List(SqList *L)
  11. {
  12. L->length = 0;//元素个数
  13. printf("enter the 5 numbers:\n");
  14. for(int i= 0; i < 5 ;i++)
  15. {
  16. scanf("%d", &L->data[i]);
  17. L->length++;
  18. }
  19. }
  20. //插入函数
  21. void Insert_List(SqList *L, int i, int e)
  22. {
  23. int loc = i-1;
  24. if (i<1 || i>L->length+1) return exit(OVERFLOW);
  25. for (int j = L->length; j >= loc; j--)
  26. L->data[j+1] = L->data[j];
  27. L->data[loc] = e;
  28. L->length++;
  29. }
  30. //删除函数
  31. void Delete_List(SqList *L, int i)
  32. {
  33. int e;
  34. int loc = i-1;
  35. if (i<1 || i>L->length) return exit(OVERFLOW);
  36. e = L->data[loc];
  37. for (int j = loc; j <= L->length; j++)
  38. L->data[j] = L->data[j+1];
  39. L->length--;
  40. }
  41. //返回长度
  42. int Length_List(SqList *L)
  43. {
  44. return L->length;
  45. }
  46. //展示函数
  47. void Show_List(SqList *L)
  48. {
  49. for (int i=0; i < L->length; i++)
  50. printf("%d ", L->data[i]);
  51. }
  52. //返回值
  53. int GetElem_List(SqList *L, int i)
  54. {
  55. int e;
  56. if (i<1 || i>L->length) return 0;
  57. e = L->data[i-1];
  58. return e;
  59. }
  60. void Destroy_List(SqList *L)
  61. {
  62. L->length = 0;
  63. }
  64. void menu()
  65. {
  66. printf("----------------------------------------------------------------------\n");
  67. printf("Choice a number:\n");
  68. printf("1.Init_List 2.Insert_List \n");
  69. printf("3.Delete_List 4.Length_List \n");
  70. printf("5.GetElem_List 6.List_List \n");
  71. printf("6.Destroy_List 7.Show_List \n");
  72. printf("----------------------------------------------------------------------\n");
  73. }
  74. //主函数
  75. int main()
  76. {
  77. menu();
  78. int i, e;
  79. int n,n1,n2,n3,n4;
  80. SqList L;
  81. while (1)
  82. {
  83. printf("Choice a number:\n");
  84. scanf("%d", &n);
  85. switch(n)
  86. {
  87. case 1:
  88. Init_List(&L); break;
  89. case 2:
  90. printf("enter the location and the elem:");
  91. scanf("%d%d", &i, &e);
  92. Insert_List(&L, i, e);
  93. Show_List(&L);break;
  94. case 3:
  95. printf("enter the the location:");
  96. scanf("%d", &i);
  97. Delete_List(&L, i);
  98. Show_List(&L);break;
  99. case 4:
  100. printf("%d",Length_List(&L)); break;
  101. case 5:
  102. printf("enter the the location:");
  103. scanf("%d", &i);
  104. printf("%d",GetElem_List(&L,i)); break;
  105. case 6:
  106. Destroy_List(&L);
  107. Show_List(&L); break;
  108. case 7:
  109. Show_List(&L); break;
  110. default:printf("please enter the numbers in certain:\n"); break;
  111. }
  112. }
  113. return 0;
  114. }

运行结果

希望对你们有帮助

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