当前位置:   article > 正文

数据结构(C++版)—— 顺序表Ⅰ_c++顺序表

c++顺序表

目录

一、顺序表的定义

 二,要实现的代码功能

一、顺序表的定义

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

把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现,是具有相同数据类型的n(n>0)个数据元素的有限序列。

 二,要实现的代码功能

主要操作

  • InitList(&L):初始化列表,构造一个空的线性表L,分配内存空间。
  • DestroyList(&L): 销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
  • Listlnsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
  • ListDelete(&L,i,&e): 删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值
  • LocateElem(L,e): 按值查找操作。在表L中查找具有给定关键字值的元素
  • GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

其他常用操作

  • Length(L):求表长。返回线性表L的长度,即L中数据元素的个数
  • PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
  • Empty(L):判空操作。若L为空表,则返回true,否则返回false。

三,具体代码实现

(1)顺序表建立

  1. //顺序表的建立
  2. //结构体封装data数据数组和数组长度
  3. struct SqList
  4. {
  5. int data[MaxSize];
  6. int Length; //当前长度
  7. };

(2)InitList(&L):初始化列表

  1. //顺序表的初始化
  2. //将长度设置为零
  3. void InitList(SqList& sq)
  4. {
  5. sq.Length = 0;
  6. cout << "顺序表初始化完成" << endl;
  7. }

(3)顺序表查找

1>按位查找
  1. //顺序表的查找
  2. int GetList(SqList sq)
  3. {
  4. int i,k;
  5. cout << "请输入你要查找元素的位序" << endl;
  6. cin >> i;
  7. if (i<0 || i>sq.Length - 1)
  8. {
  9. return 0;
  10. }
  11. else
  12. {
  13. k = sq.data[i - 1];
  14. cout << "你要查找的元素为" << k << endl;
  15. }
  16. }

(4)插入

  1. int Listlnsert(SqList& sq)
  2. {
  3. int i, e;
  4. cout << "请输入您要插入的位序及数字"<<endl;
  5. cin >> i >> e;
  6. if (i<0 || i>sq.Length)
  7. {
  8. cout << "插入地址不合法" << endl;
  9. return 0;
  10. }
  11. for (int j = sq.Length; j >= i ; j--)
  12. {
  13. sq.data[j] = sq.data[j - 1];
  14. }
  15. sq.data[i - 1] = e;
  16. sq.Length++;
  17. cout << "插入成功" << endl;
  18. }

(5)删除

  1. bool Deletelist(SqList &sq,int &m)
  2. {
  3. int i;
  4. cout << "请输入您要删除的位序" << endl;
  5. cin >> i;
  6. if (i<1 || i>sq.Length)
  7. {
  8. return false;
  9. }
  10. m = sq.data[i - 1];
  11. for (int j = i; j < sq.Length; j++)
  12. {
  13. sq.data[j - 1] = sq.data[j];
  14. }
  15. sq.Length--;
  16. return true;
  17. }

注:利用m将第i位要删除的数据带出去,接着用for循环将data[i-1]后面的数依次向前移位

四、完整代码

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. #define MaxSize 10
  5. //顺序表的建立
  6. struct SqList
  7. {
  8. int data[MaxSize];
  9. int Length; //当前长度
  10. };
  11. //顺序表的初始化
  12. void InitList(SqList& sq)
  13. {
  14. sq.Length = 0;
  15. cout << "顺序表初始化完成" << endl;
  16. }
  17. //顺序表传值
  18. void Chuan(SqList& sq, int n)
  19. {
  20. cout << "请传入数值" << endl;
  21. for (int i = 0; i < n; i++)
  22. {
  23. cin >> sq.data[i];
  24. sq.Length++;
  25. }
  26. }
  27. //打印顺序表
  28. int dayin(SqList sq)
  29. {
  30. cout << "当前顺序表为" << endl;
  31. if (sq.Length == 0)
  32. {
  33. return 0;
  34. }
  35. for (int k = 0; k < sq.Length; k++)
  36. {
  37. cout << sq.data[k] << "\t";
  38. }
  39. cout << endl;
  40. }
  41. //顺序表的查找
  42. int GetList(SqList sq)
  43. {
  44. int i,k;
  45. cout << "请输入你要查找元素的位序" << endl;
  46. cin >> i;
  47. if (i<0 || i>sq.Length)
  48. {
  49. return 0;
  50. }
  51. else {
  52. k = sq.data[i - 1];
  53. cout << "你要查找的元素为" << k << endl;
  54. }
  55. }
  56. //顺序表的插入
  57. int ListCha(SqList& sq)
  58. {
  59. int i, e;
  60. cout << "请输入您要插入的位序及数字"<<endl;
  61. cin >> i >> e;
  62. if (i<0 || i>sq.Length)
  63. {
  64. cout << "插入地址不合法" << endl;
  65. return 0;
  66. }
  67. for (int j = sq.Length; j >= i ; j--)
  68. {
  69. sq.data[j] = sq.data[j - 1];
  70. }
  71. sq.data[i - 1] = e;
  72. sq.Length++;
  73. cout << "插入成功" << endl;
  74. }
  75. //顺序表删除
  76. bool Deletelist(SqList &sq,int &m)
  77. {
  78. int i;
  79. cout << "请输入您要删除的位序" << endl;
  80. cin >> i;
  81. if (i<1 || i>sq.Length)
  82. {
  83. return false;
  84. }
  85. m = sq.data[i - 1];
  86. for (int j = i; j < sq.Length; j++)
  87. {
  88. sq.data[j - 1] = sq.data[j];
  89. }
  90. sq.Length--;
  91. return true;
  92. }
  93. int main()
  94. {
  95. int n,e;
  96. cout << "请输入顺序表长度"<<endl;
  97. cin >> n;
  98. int m = -1;
  99. SqList sq; //创建对象
  100. InitList(sq);//顺序表初始化
  101. Chuan(sq, n);//顺序表传值
  102. dayin(sq);
  103. GetList(sq);
  104. ListCha(sq);
  105. dayin(sq);
  106. if (Deletelist(sq, m))
  107. {
  108. cout << "已删除" << endl;
  109. }
  110. else
  111. {
  112. cout << "删除失败" << endl;
  113. }
  114. dayin(sq);
  115. return 0;
  116. }

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

闽ICP备14008679号