C++顺序表的操作

2017-12-27

  1. // 顺序表.cpp: 定义控制台应用程序的入口点。
  2. //Author:kgvito YinZongYao
  3. //Date: 2017.12.27
  4.  
  5. #include "stdafx.h"
  6. #include<iostream>
  7. using namespace std;
  8.  
  9. #define MAXSIZE 3
  10. #define Node ElemType
  11. #define ERROR 0
  12. typedef int DataType;
  13.  
  14. //创建一个节点类
  15. class Node
  16. {
  17. public:
  18. DataType data;
  19. };
  20.  
  21. //创建一个顺序表类
  22. class SqList
  23. {
  24. public:
  25. SqList(); //初始化顺序表
  26. ~SqList(); //销毁顺序表
  27. void CreateSqList(int n); //定义创建一个顺序表
  28. void TraverseSqList(); //遍历顺序表
  29. ElemType GetElemByIndex(int i); //根据下标查找顺序表中的元素
  30. bool isEmpty(); //判断顺序表是否为空
  31. bool isFull(); //判断顺序表是否满
  32. int GetLength(); //获取顺序表的长度
  33. int GetElemByElem(DataType data); //查看顺序表中是否含有查找的值
  34. void InsertSqList(int n, DataType data); //向顺序表中插入新数据
  35. void InsertSqListAtHead(DataType data); //在头部插入新数据
  36. void InsertSqListAtEnd(DataType data); //向顺序表的最后插入数据
  37. void DeleteElem(int i); //删除指定位置的值
  38. void DeleteElemAtElem(DataType data);//按值删除元素
  39. void DeleteAll(); //删除所有元素
  40. void DeleteAtHead(); //在头部删除元素
  41. private:
  42. Node * elem; //顺序表的基地址
  43. int length; //顺序表的长度
  44. };
  45.  
  46. //初始化顺序表
  47. SqList::SqList()
  48. {
  49. elem = new ElemType[MAXSIZE]; //开辟空间
  50. if (!elem) { //当溢出时报异常
  51. exit(OVERFLOW);
  52. }
  53. length = ; //定义顺序表的长度
  54. }
  55.  
  56. //销毁顺序表
  57. SqList::~SqList()
  58. {
  59. delete[] elem; //删除基地址的指针
  60. }
  61.  
  62. //创建顺序表
  63. void SqList::CreateSqList(int n)
  64. {
  65. if (n < ) { //当输入的数值有误时报异常
  66. cout << "输入的节点个数有误!" << endl;
  67. exit(EXIT_FAILURE);
  68. }
  69. else {
  70. int i;
  71. for (i = ; i < n;i++) { //循环向数组中插入数据
  72. cout << "请输入第" << i + << "个节点元素: ";
  73. cin>>elem[i].data;
  74. }
  75. length = n; //更改顺序表的长度
  76. }
  77. }
  78.  
  79. //遍历顺序表
  80. void SqList::TraverseSqList()
  81. {
  82. for (int i = ; i < length;i++) { //循环打印顺序表的每个节点数据
  83. cout << "第" << i + << "个元素的值是" << elem[i].data << endl;
  84. }
  85. }
  86.  
  87. //通过下标获取元素
  88. ElemType SqList::GetElemByIndex(int i)
  89. {
  90. if (i < || i > length) { //下标输入有误时报异常
  91. cout << "查询的下标不存在" << endl;
  92. }
  93. else {
  94. return elem[i - ]; //返回下标指定的节点
  95. }
  96. }
  97.  
  98. //判断顺序表是否为空
  99. bool SqList::isEmpty()
  100. {
  101. if (length == ) //如果顺序表的长度为0,则表为空
  102. return true;
  103. return false; //长度不为0,表不为空
  104. }
  105.  
  106. //判断顺序表是否满
  107. bool SqList::isFull()
  108. {
  109. if (length == MAXSIZE) //当长度为定义的最大长度,则顺序表满
  110. return true;
  111. return false; //否则不满
  112. }
  113.  
  114. //获取顺序表的长度
  115. int SqList::GetLength()
  116. {
  117. return length; //返回顺序表的长度
  118. }
  119.  
  120. //判断是否存在寻找的值,如果存在将返回下标
  121. int SqList::GetElemByElem(DataType data)
  122. {
  123. int i;
  124. for (i = ; i < length;i++) { //从头遍历顺序表
  125. if (elem && elem[i].data == data) { //若找到与之匹配的数据,则返回当前节点的下标
  126. return i + ;
  127. }
  128. if (i == length - ) { //否则返回-1
  129. return -;
  130. }
  131.  
  132. }
  133. }
  134.  
  135. //插入一个数据
  136. void SqList::InsertSqList(int i, DataType data)
  137. {
  138. if (i< || i > length+) { //下标输入有误时报异常
  139. cout << "输入的下标不合法" << endl;
  140. }
  141. else if (length > MAXSIZE) { //当顺序表满时无法插入新的数据
  142. cout << "已经达到最大长度" << endl;
  143. }
  144. else
  145. {
  146. for (int j = length - ; j >= i - ; j--) { //遍历到要插入的位置
  147. elem[j + ] = elem[j]; //从j位置后的全体数据向后移一位
  148. }
  149. elem[i - ].data = data; //插入数据
  150. length++; //更改顺序表长度
  151. }
  152. }
  153.  
  154. //在头部插入一个新数据
  155. void SqList::InsertSqListAtHead(DataType data)
  156. {
  157.  
  158. for (int i = length - ; i >= ; i--) //将全体元素向后移一位
  159. {
  160. elem[i + ] = elem[i];
  161. }
  162. elem[].data = data; //在第一个位置插入元素
  163. length++; //更改长度
  164. }
  165.  
  166. //在顺序表的最后插入数据
  167. void SqList::InsertSqListAtEnd(DataType data)
  168. {
  169. if (length > MAXSIZE) { //当顺序表满时无法插入新的数据
  170. cout << "已经达到最大长度" << endl;
  171. }
  172. else
  173. {
  174. elem[length].data = data; //插入数据
  175. length++; //更改顺序表长度
  176. }
  177. }
  178.  
  179. //根据下标删除一个节点
  180. void SqList::DeleteElem(int i)
  181. {
  182. int j;
  183. if (i< || i>length) //输入的位置不合法报异常
  184. cout << "输入的下标不合法" << endl;
  185. else
  186. {
  187. for (j = i; j <= length - ;j++) { //循环到要删除节点的位置
  188. elem[j - ] = elem[j]; //该位置后的元素全体向前移一个位置
  189. }
  190. length--; //更改顺序表长度
  191. }
  192. }
  193.  
  194. //按值删除元素
  195. void SqList::DeleteElemAtElem(DataType data)
  196. {
  197. int i = ;
  198. while (elem[i].data == data && i < length) //按值查到要删除数据的位置
  199. {
  200. i++;
  201. }
  202. for (int index = i; index <= length - ; index++) //将该位置后的节点全体向前移一位
  203. {
  204. elem[index - ] = elem[index];
  205. }
  206. length--; //更改顺序表长度
  207. }
  208.  
  209. //删除所有元素
  210. void SqList::DeleteAll()
  211. {
  212. for (int i = length;i > ;i--) //从最后一个元素开始删除,长度减一
  213. {
  214. elem[i] = elem[i - ]; //元素向前移位
  215. length--; //长度减一
  216. }
  217. }
  218.  
  219. //在头部删除元素
  220. void SqList::DeleteAtHead()
  221. {
  222. for (int i = ; i <= length - ; i++) {
  223. elem[i - ] = elem[i];
  224. }
  225. length--;
  226. }
  227.  
  228. //测试函数
  229. int main()
  230. {
  231. SqList l;
  232. int i;
  233. cout << "1.创建一个顺序表 2.遍历顺序表 3.通过下标获取元素\n4.查找要查询的元素的下标 5.通过下标插入元素 6.通过下标删除一个元素\n7.获取顺序表的长度 8.删除所有元素 9.判断顺序表是否为空\n10.判断顺序表是否满 11.根据数据删除节点 12.在头部插入数据\n13.在头部删除数据 14.在顺序表最后插入数据 0.退出" << endl;
  234. do
  235. {
  236. cout << "请选择一个操作: " ;
  237. cin >> i;
  238. switch (i)
  239. {
  240. case :
  241. int n;
  242. cout << "请输入顺序表的元素个数: ";
  243. cin >> n;
  244. l.CreateSqList(n);
  245. break;
  246. case :
  247. l.TraverseSqList();
  248. break;
  249. case :
  250. int i;
  251. cout << "请输入将要获取元素的下标: ";
  252. cin >> i;
  253. ElemType getElemByIndex = l.GetElemByIndex(i);
  254. cout << getElemByIndex.data << endl;
  255. break;
  256. case :
  257. DataType data;
  258. cout << "请输入将要查找元素的值: ";
  259. cin >> data;
  260. cout<<"该元素的下标为:"<<l.GetElemByElem(data)<<endl;
  261. break;
  262. case :
  263. int index;
  264. DataType insertData;
  265. cout << "请输入要插入的数据的位置: ";
  266. cin >> index;
  267. cout << "请输入要插入的数据: ";
  268. cin >> insertData;
  269. l.InsertSqList(index, insertData);
  270. break;
  271. case :
  272. int deleteIndex;
  273. cout << "请输入要删除的数据的下标: ";
  274. cin >> deleteIndex;
  275. l.DeleteElem(deleteIndex);
  276. break;
  277. case :
  278. cout<<l.GetLength()<<endl;
  279. break;
  280. case :
  281. l.DeleteAll();
  282. break;
  283. case :
  284. if (l.isEmpty() == ) {
  285. cout << "顺序表为空" << endl;
  286. }
  287. else
  288. {
  289. cout << "顺序表不为空" << endl;
  290. }
  291. break;
  292. case :
  293. if (l.isFull() == ) {
  294. cout << "顺序表满" << endl;
  295. }
  296. else
  297. {
  298. cout << "顺序表不满" << endl;
  299. }
  300. break;
  301. case :
  302. DataType data1;
  303. cout << "请输入要删除的数据: ";
  304. cin >> data1;
  305. l.DeleteElemAtElem(data1);
  306. break;
  307. case :
  308. DataType data2;
  309. cout << "请输入要在头部插入的数据: ";
  310. cin >> data2;
  311. l.InsertSqListAtHead(data2);
  312. break;
  313. case :
  314. l.DeleteAtHead();
  315. break;
  316. case :
  317. DataType data3;
  318. cout << "请输入要在末尾插入的数据: ";
  319. cin >> data3;
  320. l.InsertSqListAtEnd(data3);
  321. break;
  322. default:
  323. break;
  324. }
  325. } while(i != );
  326. system("pause");
  327. return ;
  328. }

C++实现顺序表的14种操作的更多相关文章

  1. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  2. C++学习---顺序表的构建及操作

    #include<iostream> #include<fstream> using namespace std; #define MAXLEN 100 //定义顺序表 str ...

  3. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  4. c语言实现--顺序表操作

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2;采用的实现方式:一段地址连 ...

  5. 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表

    在学习之前,先说下我的软件情况,操作系统是manjaro linux 今天刚刚升级的,编辑器是vim8.0.55,编译器是gcc 6.2.1,调试器是gdb 7.12,版本再低点也可以,只要gcc版本 ...

  6. C#顺序表(数据结构)

    xmfdsh我近来心情实在不好,只因为这两天课比较少,然后一下子时间太多,不知道干什么,心情郁闷......这是要闹哪样?这都让我一个郁闷了一个晚上.闲来无聊,回顾下之前学的C#数据结构,数据结构的重 ...

  7. 3、顺序表、内存、类型、python中的list

    1.内存.类型本质.连续存储 1.内存本质 2.C 语言实例-计算 int, float, double 和 char 字节大小 使用 sizeof 操作符计算int, float, double 和 ...

  8. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  9. 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表

    一.基本概念: 线性表:由n个类型相同的数据元素组成的有限序列,记为(a1,a2,--an). 线性表的特征:其中的元素存在这序偶关系,元素之间存在着严格的次序关系. 顺序存储表:线性表中的元素依次存 ...

随机推荐

  1. uboot的环境变量

    https://www.cnblogs.com/biaohc/p/6398515.html uboot 环境变量实现原理: 首先我们先要搞清楚uboot中环境变量的作用,uboot中环境变量的作用就是 ...

  2. Windows下 dmp文件的产生

    一.windows下的崩溃捕获windows程序当遇到异常,没有try-catch或者try-catch也无法捕获到的异常时,程序就会自动退出.windows系统默认是不产生程序dmp文件的.dump ...

  3. java 图片上传

    代码是最有力量的,嘎嘎 @CrossOrigin@ApiOperation(value = "上传图片", notes = "上传图片", httpMethod ...

  4. Xmanager 实现图形化安装CentOS7上的软件

    Xmanager 是个很不错的工具,集成Xshell,Xftp,Xstart,Xbrowser等常用的远程工具. 当前需求为:有个软件,哑安装(静默安装)方式,在安装时会遇到配置文件加载不全,安装成功 ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-fast-forward

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. Day 29:HTML常用标签

    软件的结构:  cs结构的软件的缺点:更新的时候需要用户下载更新包然后再安装,需要开发客户端与服务端.  cs结构软件的优点: 减轻服务端的压力,而且可以大量保存数据在客户端.  C/S(Client ...

  7. win下的常用8个命令

    windows下常用的几个指令 一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的 ...

  8. vSphere vSwitch网络属性配置详解

    1.安全 混杂模式:把vSwitch当成是一个hub,同一台交换机上面所有的虚拟机都能接受到二层数据包. MAC地址更改:当vSwitch上面连接的某一个虚拟机MAC地址发生更改时,vSwitch是否 ...

  9. 又一个无效的列类型错误Error setting null for parameter #7 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLExcept

    在更新数据时候出现的错误 更新代码如下: <update id="modify" parameterType="Standard"> update ...

  10. 解决:Server IPC version 9 cannot communicate with client version 4

    使用idea的maven项目运行mapreduce程序Server IPC version 9 cannot communicate with client version 4 原因: Java初始化 ...