当前位置:   article > 正文

数据结构 ->顺序表的输入 输出 查找 删除 销毁 快速排序

数据结构 ->顺序表的输入 输出 查找 删除 销毁 快速排序

目录

「话不多说」上代码:定义

顺序表的「输入」

顺序表的「输出」

顺序表的「查找」

顺序表的「删除」

顺序表的「销毁」

顺序表的「快速排序」


顺序表,全名顺序储存结构,是线性表的一种。

顺序表储存数据时,会提前申请一整块足够大小的物理空间,然后将数据依次储存起来,储存时做到数据元素之间不留一丝缝隙。

顺序表_百度百科

个人理解:顺序表储存数据的模式同数组十分相近,但是(当然有但是)顺序表每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数或一个字符,也可以是一页书,甚至其他更复杂的信息。

「话不多说」上代码:定义

  1. #pragma once
  2. #include<iostream>
  3. using namespace std;
  4. typedef int Sbt;
  5. #define Size 1 //线性表储存空间的增量
  6. typedef struct Sqlist
  7. {
  8. Sbt* date = nullptr; //储存空间的基址
  9. int legth = 0; //当前长度
  10. int size = 0; //当前分配的储存容量(以sizeof(Sbt)为单位)
  11. }Sqlist;

初始化时将date置空,将线性表当前长度设为“0”。

顺序表的「输入」

  1. //输入
  2. void Sq_push(Sqlist& s, int x)
  3. {
  4. if (s.legth <= s.size)
  5. {
  6. Sbt* temp;
  7. temp = (int *)realloc(s.date, (s.legth + Size) * sizeof(int));
  8. if (temp == nullptr)
  9. {
  10. cout << "内存分配失败" << endl;
  11. exit(0);
  12. }
  13. s.date = temp;
  14. s.size += Size;
  15. }
  16. s.date[s.legth] = x;
  17. ++s.legth;
  18. }

温馨提示:建议不要直接分配内存给s.date,在Microsoft Visual Studio Community 2019(我用的是这个)中,它会有以下警告:

官方给出的错误提示链接在此 --->    C6308 | Microsoft Docs

顺序表的「输出」

这个还是比较简单的,就不废话了,上代码。

  1. void Sq_outall(Sqlist& s)
  2. {
  3. for (int i = 0; i < s.legth; i++)
  4. {
  5. cout << s.date[i] << " ";
  6. }
  7. }

顺序表的「查找」

上代码

  1. //查找
  2. int Sq_found(Sqlist& s, int x)
  3. {
  4. for (int i = 0; i < s.legth; i++)
  5. {
  6. if (s.date[i] == x)
  7. {
  8. cout << "位于第" << i << "号节点 (下标)" << endl;
  9. return i;
  10. }
  11. }
  12. cout << "ERROR:" << x << "不在指定范围内" << endl;
  13. return -1;
  14. }

顺序表的「删除」

删除有三种情况有:前端删除,中端删除,后端删除。这三种都可以一次性解决。

从主函数内获得某数的下标,将其后方的数替换掉它,那它后方的数由它后方的后方替换掉,以此类推。

  1. //删除
  2. void Sq_dele(Sqlist& s, int x)
  3. {
  4. for (int i = 0; i < s.legth; i++)
  5. {
  6. if (s.date[i] == x)
  7. {
  8. for (; i < s.legth; i++)
  9. {
  10. s.date[i] = s.date[i + 1];//将后方的数值替换掉前方的
  11. }
  12. s.legth--;
  13. break;
  14. }
  15. }
  16. cout<<"ERROR: " << x << " 不在指定范围内" << endl;
  17. }

「别怪我没提醒你」  每删除一个数,s.legth都要减一;s.size不用管,因为你已经分配了内存空间,以便下次使用。

顺序表的「销毁」

  1. //销毁
  2. void Sq_destroy(Sqlist& s)
  3. {
  4. s.legth = 0;
  5. s.size = 0;
  6. free(s.date);
  7. s.date = nullptr;
  8. }

顺序表的「快速排序

  1. //快速排序
  2. int Sq_quickcollate(Sqlist& s, int a, int b)
  3. {
  4. int l = a, r = b,center;
  5. if (l < r)
  6. {
  7. while (l < r)
  8. {
  9. while (l < r && s.date[l] >= s.date[r])
  10. r--;
  11. if (l < r)
  12. {
  13. center = s.date[l];// ------ center <--
  14. s.date[l] = s.date[r];// / \
  15. s.date[r] = center;// -> s.date[r]------>s.date[l]
  16. l++;
  17. center = NULL;
  18. }
  19. while (l < r && s.date[r] <= s.date[r])
  20. l++;
  21. if (l < r)
  22. {
  23. center = s.date[l];
  24. s.date[l] = s.date[r];
  25. s.date[r] = center;
  26. r--;
  27. center = NULL;
  28. }
  29. }
  30. Sq_quickcollate(s, a, l);
  31. l++;
  32. Sq_quickcollate(s, l, b);
  33. }
  34. return 0;
  35. }

参考文献:数据结构; C 语言版/严蔚敏,昊伟民编著。一北京:清华大学出版社,2007(2019.1重印(清华大学计算机系列教材)
 iSBN 978-7-302-14751-0

本人小白一枚,望指点

本人小白一枚,望指点

本人小白一枚,望指点

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

闽ICP备14008679号