数据结构——顺序表及其操作

今天总结了一下顺序表的一些操作实现,算是这个本该上而没有上的体育课的一些小收获吧!

BTW,青轴用起来是爽,但时间长了感觉自己的手指痛的不行呀/TOT/~~

  1 #include<iostream>
  2
  3 using namespace std;
  4
  5 #define MAXSIZE 100        //最大长度
  6 #define OK 1
  7 #define ERROR -1
  8
  9
 10 //类型重命名
 11 typedef int Elemtype;
 12 typedef int Status;
 13
 14
 15 //顺序表的存储结构
 16 typedef struct
 17 {
 18     Elemtype *elem;        //基地址
 19     int length;            //顺序表长度
 20 }SqList;                //顺序表的结构类型为SqList
 21
 22
 23 //顺序表的初始化---即构造一个空的顺序表
 24 Status InitList(SqList &L)
 25 {
 26     L.elem = new Elemtype[MAXSIZE];        //为顺序表分配一个大小为MAXSIZE的数组空间
 27
 28     if (!L.elem)
 29         return ERROR;        //存储分配失败退出
 30
 31     L.length = 0;            //初始化为空表,长度为0
 32
 33     return OK;
 34 }
 35
 36
 37 //顺序表的创建
 38 Status CreateList(SqList &L)
 39 {
 40     int a, i = 0;
 41
 42     cin >> a;        //表元素的输入
 43
 44     while (a != -1)
 45     {
 46         if (L.length == MAXSIZE)
 47         {
 48             cout << "顺序表已满!";
 49             return ERROR;
 50         }
 51
 52         L.elem[i++] = a;
 53         L.length++;
 54         cin >> a;    //迭代输入顺序表元素
 55     }
 56     return OK;
 57 }
 58
 59
 60 //取值
 61 //获取顺序表中第i个数据元素的值,赋值给e并返回
 62 Status GetElem(SqList L, int i, Elemtype &e)
 63 {
 64     //判断i值是否合理
 65     if (i<1 || i>L.length)
 66         return ERROR;
 67
 68     e = L.elem[i - 1];    //elem[i-1]存储第i个数据元素 (注意是 i-1 !!!
 69
 70     return OK;
 71 }
 72
 73
 74 //查找
 75 //查找顺序表中第1个与e相等的元素,若查找成功,则返回该元素在表中的位置序号
 76 int LocateElem(SqList L, Elemtype e)
 77 {
 78     int i;
 79
 80     for (i = 0; i < L.length; i++)
 81     {
 82         if (L.elem[i] == e)        //查找成功,返回序号i+1 (注意位置序号是 i+1 !!!
 83             return i + 1;
 84     }
 85     return ERROR;    //查找失败
 86 }
 87
 88
 89 //插入
 90 //在表的第i个位置插入一个新的数据元素e
 91 Status ListInsert(SqList &L, int i, Elemtype e)
 92 {
 93     //判断i值是否合法 (注意此处是L.length + 1。因为插入一个元素后表长加1
 94     if( (i<1) || (i > L.length + 1) )
 95         return ERROR;
 96
 97     if (L.length == MAXSIZE)    //溢出
 98         return ERROR;
 99
100     for (int j = L.length - 1; j >= i - 1; j--)
101     {
102         L.elem[j + 1] = L.elem[j];    //从最后一个元素开始后移,直到第i个元素后移
103     }
104
105     L.elem[i - 1] = e;    //将新的数据元素放在第i个位置上
106     L.length++;            //表长加1
107
108     return OK;
109 }
110
111
112 //删除
113 //将表的第i个元素删除
114 Status ListDelete(SqList &L, int i, int &e)
115 {
116     //判断i值是否合法
117     if ((i < 1) || (i > L.length))
118         return ERROR;
119
120     e = L.elem[i - 1];    //将要删除的元素保留在e中,利于删除信息的找回
121
122     for (int j = i; j <= L.length - 1; j++)
123     {
124         L.elem[j - 1] = L.elem[j];    //要删除元素之后的元素前移
125     }
126
127     L.length--;        //表长减1
128
129     return OK;
130 }
131
132
133 //顺序表的输出
134 void print(SqList L)
135 {
136     cout << "输出顺序表" << endl;
137     for (int i = 0; i < L.length; i++)
138     {
139         cout << L.elem[i] << " ";
140     }
141     cout << "\n";
142 }
143
144
145 //顺序表的销毁
146 void DestroyList(SqList &L)
147 {
148     if (L.elem)
149         delete[]L.elem;
150 }
151
152
153 int main()
154 {
155     SqList myL;
156     int i, e;
157
158     cout << "1. 初始化\n";
159
160     cout << "2. 创建\n";
161
162     cout << "3. 取值\n";
163
164     cout << "4. 查找\n";
165
166     cout << "5. 插入\n";
167
168     cout << "6. 删除\n";
169
170     cout << "7. 输出\n";
171
172     cout << "8. 销毁\n";
173
174     cout << "0. 退出\n";
175
176     int choose = -1;
177
178     while (choose != 0)
179     {
180         cout << "请选择:" << endl;
181
182         cin >> choose;
183
184         switch (choose)
185         {
186         case 1:    //初始化
187             cout << "顺序表初始化..." << endl;
188
189             if (InitList(myL))
190                 cout << "顺序表初始化成功!" << endl;
191
192             else
193                 cout << "顺序表初始化失败!" << endl;
194
195             break;
196
197         case 2:    //创建
198             cout << "顺序表创建..." << endl;
199
200             cout << "输入整型数,输入-1结束" << endl;
201
202             if (CreateList(myL))
203                 cout << "顺序表创建成功!" << endl;
204
205             else
206                 cout << "顺序表创建失败!" << endl;
207
208             break;
209
210         case 3:    //取值
211             cout << "输入整型数i,取第i个元素输出:" << endl;
212
213             cin >> i;
214
215             if (GetElem(myL, i, e))
216                 cout << "第i个元素是:" << e << endl;
217
218             else
219                 cout << "取值失败!" << endl;
220
221             break;
222         case 4:    //查找
223             cout << "请输入要查找的数e:";
224
225             cin >> e;
226
227             if (LocateElem(myL, e) == -1)
228                 cout << "查找失败!" << endl;
229
230             else
231             {
232                 cout << "查找成功!" << endl;
233                 cout << "查找数的位置为:" << LocateElem(myL, e) << endl;
234             }
235
236             break;
237         case 5:    //插入
238             cout << "请输入要插入的位置和要插入的数据元素值e:";
239
240             cin >> i >> e;
241
242             if (ListInsert(myL, i, e))
243                 cout << "插入成功!" << endl;
244
245             else
246                 cout << "插入失败!" << endl;
247
248             break;
249         case 6:    //删除
250             cout << "请输入要删除的位置i:";
251
252             cin >> i;
253
254             if (ListDelete(myL, i, e))
255                 cout << "删除成功!" << endl;
256
257             else
258                 cout << "删除失败!" << endl;
259
260             break;
261         case 7:    //输出
262             print(myL);
263
264             break;
265         case 8:    //销毁
266             cout << "顺序表销毁..." << endl;
267
268             DestroyList(myL);
269
270             cout << "顺序表销毁成功!" << endl;
271             break;
272         }
273     }
274     return 0;
275 }

原文地址:https://www.cnblogs.com/friend-A/p/9036551.html

时间: 2024-10-24 22:21:07

数据结构——顺序表及其操作的相关文章

数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)

#include"stdio.h" #include"stdlib.h" #include"malloc.h" #define list_size 100 typedef struct Node { int data[list_size]; int len; }NODE,* PNODE; void creat_list(PNODE L) { int i; int val; int len; /* PNODE L=(PNODE)malloc(siz

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

编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include<stdlib.h> #define LINK_INIT_SIZE 100#define LISTINCREAMENT 10#define ElemType int#define OVERFLOW -2#define OK 1#define ERROR 0 typedef int status; /

hrbust-1545-基础数据结构——顺序表(2)

http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 412(165 users) Total Accepted: 188(150 users) Rating:  Special Judge: No Description 在长度为n(n<10

顺序表 其他操作

1 实验2 顺序表其它操作 2 实验目的 3 1.进一步掌握在线性表的顺序存储结构上的一些其它操作. 4 实验内容 5 程序1 6 已知一个线性表,用另辟空间和利用原表两种方法把线性表逆置. 7 设计要求:在程序中构造三个子程序分别为 8 SeqList reverse(SeqList A) /*顺序表的就地逆置 */ 9 void ListTraverse(SeqList L) /* 遍历顺序表 */ 10 SeqList create(int n) /* 建立顺序表 */ 11 12 程序2

07、顺序表的操作

顺序表的操作 一.从顺序表中删除具有最小值的元素 /* 时间:2017年7月2日10:49:39 功能:从顺序表中删除具有最小值的元素并将最后元素放于被删除元素的位置,由函数返回被删元素的值 */ #include "stdio.h" #include "string.h" #include"stdlib.h" #define maxSize 15 //显式地定义表的长度 typedef int DataType; //定义表元素的数据类型 ty

C++数据结构 顺序表的实现(模板类的实现)

利用模板类实现顺序表的操作 实现的功能: 1.尾插,2.头插,3.显示,4.尾删,5.头删,6.按位置,7.插按值插,8.按位置删,9.按值删,10.按值查,11.求表长,12.清除数据,13.摧毁该顺序表,14.反转,15.排序(冒泡排序,快速排序). 头文件源代码: #pragma once // 防止重复编译 #include<iostream> using namespace std; template<class Type> class SeqList { public:

Java 3:顺序表的操作

顺序表常见操作有插入.删除.查找.修改.一.插入:1.插入有头插.尾插.任意位置插入.在插入时要注意下标的取值在顺序表长度范围内.所以最好在插入之前进行扩容操作.2.在头插时要注意先将原数组的元素从后往前依次向后移动.因为如果从前往后开始移动的话,会造成后一个元素被前一个元素覆盖,而丢失数据且造成重复.arr[i+1]=arr[i],注意此处i的意思是要移动的元素的下标.3.任意位置插入与头插类似,从后往前(要插入的位置元素下标)依次向后移动,再将数据插入二.删除1.删除有头删.尾删.任意位置删

算法数据结构 顺序表的实现+操作 及对产生问题的分析

线性表的顺序存储是将线性表中的元素存放在一组连续的存储单元中.使得在线性表中逻辑上相邻的元素在物理存储单元上也是连续的.采用顺序存储的线性表叫做顺序表. 线性表的顺序存储结构如下: 模块化设计: 头文件 结构体和相应函数的定义,声明 #ifndef _SEQLIST_H #define _SEQLIST_H #include<iostream> #include<assert.h>//断言 #include<string.h> #include<stdlib.h&

8.基本数据结构-顺序表和链表

一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计算机中存储的是基于二进制的电影数据,然后我们可以通过相关的视频播放软件结合相关的硬件对电影的二进制数据进行相关的运算操作,所产生的结果就是我们可以看到电影的画面和听到音频的声音. - 问题:阐述计算机如何计算1+2的结果? - 阐述:简单理解为,首先可以将1和2输入到计算机中,然后计算机会将1和2转