飞道的博客

C/C++数据结构之顺序表的基本操作详解 <附完整操作源码>

359人阅读  评论(0)
顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以
快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。
顺序表 的三个要素:
elems 记录存储位置的基地址
分配一段连续的存储空间 size
length 记录实际的元素个数,即顺序表的长度

 

结构体定义

#define MAX_SIZE 100

struct _SqList

{

ElemType *elems; // 顺序表的基地址

int length; // 顺序表的长度

int size; // 顺序表总的空间大小

}

1.顺序表初始化

2.添加元素

3.插入元素

4.删除元素

 

 

完整代码:


  
  1. // 顺序表SqList.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //
  3. /*
  4. * Author:See
  5. * QQ:3492625357
  6. */
  7. #include <iostream>
  8. #define MAX_SIZE 100
  9. using namespace std;
  10. typedef struct _SqList //顺序表的数据结构
  11. {
  12. int *elem;
  13. int length;
  14. int size;
  15. }SqList;
  16. bool InitList(SqList &L)//初始化空表
  17. {
  18. L.elem = new int[MAX_SIZE];
  19. if (!L.elem)
  20. {
  21. return false;
  22. }
  23. L.length = 0;
  24. L.size = MAX_SIZE;
  25. return true;
  26. }
  27. void PrintList(SqList L)//输出表内容
  28. {
  29. cout << "顺序表存储空间大小: " << L.size << " , " << "顺序表长度: " << L.length << endl;
  30. cout << "顺序表的内容为:" << endl;
  31. for ( int i= 0;i<L.length;i++)
  32. {
  33. cout << L.elem[i]<< " ";
  34. }
  35. cout << endl;
  36. }
  37. bool ListAppend(SqList &L, int e) //添加元素
  38. {
  39. if (L.length==L.size)
  40. {
  41. cout << "顺序表存储空间已满" << endl;
  42. return false;
  43. }
  44. L.elem[L.length] = e;
  45. L.length++;
  46. return true;
  47. }
  48. bool ListInsert(SqList &L, int i, int e)//插入元素
  49. {
  50. if (i <= 0 || i > L.length) return false;
  51. if (L.length == L.size) return false;
  52. for ( int k=L.length -1;k>=i -1;k--)
  53. {
  54. L.elem[k + 1] = L.elem[k];
  55. }
  56. L.elem[i -1] = e;
  57. L.length++;
  58. return true;
  59. }
  60. bool ListDelete(SqList &L, int i)//删除元素
  61. {
  62. if (i < 0 || i>L.length) return false;
  63. if (i == L.length)
  64. {
  65. L.length--;
  66. return true;
  67. }
  68. for ( int k=i -1;k<L.length -1;k++)
  69. {
  70. L.elem[k] = L.elem[k + 1];
  71. }
  72. L.length--;
  73. return true;
  74. }
  75. void ListDestroy(SqList &L)//销毁顺序表
  76. {
  77. if (L.elem)
  78. {
  79. delete [] L.elem;
  80. L.length = 0;
  81. L.size = 0;
  82. }
  83. }
  84. int main()
  85. {
  86. //1.初始化链表
  87. SqList L;
  88. if (InitList(L))
  89. {
  90. cout << "初始化顺序表成功!"<< endl;
  91. }
  92. else return -1;
  93. //2.添加元素
  94. int count;
  95. int value;
  96. cout << "请输入你要添加的元素个数" << endl;
  97. cin >> count;
  98. cout << "请依次输入你要添加的元素值" << endl;
  99. while (count--)
  100. {
  101. cin >> value;
  102. ListAppend(L, value);
  103. }
  104. PrintList(L);
  105. //3.插入元素
  106. int pos;
  107. cout << "请输入你要插入的元素位置: " << endl;
  108. cin >> pos;
  109. cout << "请输入你要插入的元素值: " << endl;
  110. cin >> value;
  111. ListInsert(L, pos, value);
  112. PrintList(L);
  113. //4.删除元素
  114. cout << "请输入你要删除的元素位置" << endl;
  115. cin >> pos;
  116. ListDelete(L, pos);
  117. PrintList(L);
  118. system( "pause");
  119. return 0;
  120. }

 

 


转载:https://blog.csdn.net/weixin_40582034/article/details/116949331
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场