当前位置:   article > 正文

顺序表的基本操作(代码)

顺序表的基本操作(代码)
  1. #include<bits/stdc++.h>
  2. //顺序表:初始化、创建()、取值、查询、插入、删除、销毁、清空、求长度、判断空、排序、修改、去重、遍历
  3. using namespace std;
  4. #define Maxsize 100
  5. typedef struct
  6. {
  7. string id;
  8. double price;
  9. }book;
  10. typedef struct
  11. {
  12. book *elem; //存储空间的基地址
  13. int length; //图书表中当前图书个数
  14. }SqList;
  15. //初始化
  16. void Init(SqList &l){
  17. //构造一个空表==>生成一个空结点or空的空间返回首地址
  18. l.elem = new book[Maxsize];
  19. if(!l.elem) exit(0);//分配空间要判断其分配是否成功
  20. l.length = 0;//表长设为0
  21. }
  22. //创建
  23. void Creat(SqList &l){
  24. //顺序表的创建类似数组,存储空间连续
  25. int n;
  26. cout<<"输入顺序表长度:";
  27. cin>>n;
  28. l.length = n;//表长为n,一般来讲有范围限制的变量可以判断其是否超出范围
  29. for(int i=0;i<n;i++){
  30. cout<<"输入第"<<i+1<<"个信息:";
  31. cin>>l.elem[i].id>>l.elem[i].price;
  32. }
  33. }
  34. //插入
  35. void Insert(SqList &l,int pos,book e){
  36. if(l.length==Maxsize) exit(0);//判断是否顺序表已满
  37. if(pos<1 || pos>l.length) exit(0);//判断插入位置是否合法
  38. //将插入位置之后的元素往后挪,为新元素插入腾空间
  39. for(int i=l.length-1;i>=pos-1;i++){
  40. //从后向前
  41. l.elem[i+1] = l.elem[i];
  42. }
  43. l.length++;//表长加一
  44. }
  45. //删除
  46. void Delete(SqList &l,int pos){
  47. if(l.length) exit(0); //判断表是否为空
  48. if(pos<1 || pos>l.length) exit(0);//判断插入位置是否合法
  49. //将删除元素之后的元素向前挪,覆盖前一位
  50. for(int i=pos;i<l.length;i++){
  51. //从前向后
  52. l.elem[i-1] = l.elem[i];
  53. }
  54. l.length--;//表长减一
  55. }
  56. //取值
  57. void GetElem(SqList l,int pos,book &e){
  58. //根据位置i,获取相应信息
  59. if(pos<1 || pos>l.length) exit(0);//判断位置是否合法
  60. e = l.elem[pos-1];
  61. }
  62. //查询
  63. int Search(SqList l,book e){
  64. //遍历找到信息后返回位置
  65. for(int i=0;i<l.length;i++){
  66. //if(l.elem[i]==e) 错误,因为存储地址不同,只是数据相同
  67. if(l.elem[i].id==e.id)
  68. return i+1;
  69. }
  70. return 0;
  71. }
  72. //去重
  73. void Dedup(SqList &l){
  74. //与冒泡类似
  75. for(int i=0; i<l.length-1 ;i++){
  76. for(int j=i+1;j<l.length;j++){
  77. if(l.elem[i].price == l.elem[j].price){
  78. Delete(l,i+1);
  79. }
  80. }
  81. }
  82. }
  83. //修改
  84. void Revise(SqList &l){
  85. //此处举例为修改相应位置信息
  86. int pos;
  87. cout<<"位置:";
  88. cin>>pos;
  89. if(pos<1 || pos>l.length) exit(0);//判断位置是否合法
  90. string n;
  91. double p;
  92. cout<<"信息:";
  93. cin>>n>>p;
  94. l.elem[pos-1].id = n;
  95. l.elem[pos-1].price = p;
  96. }
  97. //遍历
  98. void Traversal(SqList l){
  99. //与数组类似
  100. for(int i=0;i<l.length;i++){
  101. cout<<l.elem[i].id<<" "<<l.elem[i].price<<endl;
  102. }
  103. }
  104. //求长度
  105. int Length(SqList l){
  106. //返回表长
  107. return l.length;
  108. }
  109. //判断空
  110. bool Empty(SqList l){
  111. //表长为零,表空
  112. if(l.length==0) return 1;
  113. return 0;
  114. }
  115. //清空
  116. void Clear(SqList &l){
  117. //将表长设为0
  118. l.length = 0;
  119. }
  120. //销毁
  121. void Destory(SqList &l){
  122. //若该顺序表存在,释放存储空间
  123. if(l.elem) delete []l.elem;
  124. }
  125. //排序
  126. void Sort(SqList &l){
  127. //冒泡排序
  128. for(int i=0; i<l.length-1 ;i++){
  129. for(int j=i+1;j<l.length;j++){
  130. if(l.elem[i].price > l.elem[j].price){
  131. swap(l.elem[i],l.elem[j]);
  132. }
  133. }
  134. }
  135. }
  136. int main(){
  137. //调用函数
  138. return 0;
  139. }

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

闽ICP备14008679号