(2)数据结构-线性表顺序存储
文章目录
- 1、简介
- 2、数据结构
- 3、函数实现
- 3.1 初始化线性表
- 3.2 求线性表长度
- 3.3 求数据e的索引
- 3.4 获取第i个数据
- 3.5 在第i个位置插入e
- 3.6 删除第i个位置的数据,并返回
- 3.7 打印线性表
- 3.8 判断线性表是否为空
- 3.9 销毁线性表
- 4、完整代码
- 5、运行结果
1、简介
线性表是具有相同数据类型的n个数据元素的有限序列。
对于线性表的操作有如下几种:
2、数据结构
/** 定长线性表结构定义*typedef struct LNode{ElemType Data[MaxSize];int length;
}SqList;* *///不定长线性表结构结构定义
typedef struct LNode{ElemType *Data;int length;
}SqList;
3、函数实现
void InitList(SqList &L); //定长
void InitList(SqList &L, int n); //不定长
Status Length(SqList &L);
Status LocateElem(SqList &L, ElemType e);
ElemType GetElem(SqList L, Status i);
bool ListInsert(SqList &L, Status i, ElemType e);
bool ListDelete(SqList &L, Status i,ElemType &e);
void PrintList(SqList L);
bool Empty(SqList L);
bool DestoryList(SqList &L);
3.1 初始化线性表
//初始化定长线性表
void InitList(SqList &L){L.length = 0;cout << "初始化成功" << endl;
}//初始化不定长线性表
void InitList(SqList &L, int n){L.Data = new ElemType [MaxSize];L.length = 0;cout << "初始化成功" << endl;
}
3.2 求线性表长度
//获取链表长度
Status Length(SqList &L){return L.length;
}
3.3 求数据e的索引
//查找e的下标
Status LocateElem(SqList &L, ElemType e){for (int i = 0; i < L.length; i++){if (L.Data[i] == e){return i;}}return -1;
}
3.4 获取第i个数据
//获取第i个数据
ElemType GetElem(SqList L, Status i){//如果输入的i非法if(i<1 || i > L.length){cout << "输入的i不合法" << endl;return Error;}return L.Data[i-1];
}
3.5 在第i个位置插入e
//向第i个位置插入数据e
bool ListInsert(SqList &L, Status i, ElemType e){//如果输入的i非法if(i<1 || i > L.length+1){cout << "输入的i不合法" << endl;return Error;}//如果顺序表的已经达到最大长度if (L.length == MaxSize){cout << "顺序表的长度已经达到最大" << endl;return Error;}//for (int j = L.length-1; j > i-1; j--){L.Data[j] = L.Data[j-1];}L.Data[i-1] = e;L.length++;return OK;
}
3.6 删除第i个位置的数据,并返回
//删除第i个数据
bool ListDelete(SqList &L, Status i,ElemType &e){//如果线性表为空if(Empty(L)){return Error;}//如果输入的i非法if(i<1 || i > L.length){cout << "输入的i不合法" << endl;return Error;}e = L.Data[i-1];for(int j = i-1; j< L.length-1; j++){L.Data[j] = L.Data[j+1];}L.length--;return OK;
}
3.7 打印线性表
//遍历顺序表
void PrintList(SqList L){for (int i = 0; i < L.length; i++){cout << L.Data[i] << " ";}cout << endl;
}
3.8 判断线性表是否为空
//判断顺序表是否为空
bool Empty(SqList L){return !L.length;
}
3.9 销毁线性表
bool DestoryList(SqList &L){L.length = 0;return true;
}
4、完整代码
#include<iostream>
#define MaxSize 1000
#define Error -1
#define OK 1
using namespace std;typedef int Status;
typedef int ElemType;/** 定长线性标结构定义*typedef struct LNode{ElemType Data[MaxSize];int length;
}SqList;* *///不定长线性标结构结构定义
typedef struct LNode{ElemType *Data;int length;
}SqList;void InitList(SqList &L); //定长
void InitList(SqList &L, int n); //不定长
Status Length(SqList &L);
Status LocateElem(SqList &L, ElemType e);
ElemType GetElem(SqList L, Status i);
bool ListInsert(SqList &L, Status i, ElemType e);
bool ListDelete(SqList &L, Status i,ElemType &e);
void PrintList(SqList L);
bool Empty(SqList L);
bool DestoryList(SqList &L);int main(){SqList L;cout << "欢迎来到线性表顺序存储" << endl;InitList(L,10);cout << L.length << endl;cout << "Next, I want to inset some data" << endl;for (int i = 1; i < 6; i++){ListInsert(L,i,i*2);}PrintList(L);cout << "Next, I want to delete one data" << endl;ElemType e;if(ListDelete(L,2,e) == OK){PrintList(L);cout << "The data has been deleted is " << e << endl;}cout << "Now, the length of L is " << Length(L) << endl;cout << "The location of 6 is " << LocateElem(L,6) << endl;cout << "The number with subscript 3 is " << GetElem(L,2) << endl;cout << "whether L is empty" << Empty(L) << endl;cout << "clear L" << endl;DestoryList(L);cout << "After clear , lenghth of L is " << Length(L);return 0;
}//初始化定长线性表
void InitList(SqList &L){L.length = 0;cout << "初始化成功" << endl;
}//初始化不定长线性表
void InitList(SqList &L, int n){L.Data = new ElemType [MaxSize];L.length = 0;cout << "初始化成功" << endl;
}//获取链表长度
Status Length(SqList &L){return L.length;
}//查找e的下标
Status LocateElem(SqList &L, ElemType e){for (int i = 0; i < L.length; i++){if (L.Data[i] == e){return i;}}return -1;
}//获取第i个数据
ElemType GetElem(SqList L, Status i){//如果输入的i非法if(i<1 || i > L.length){cout << "输入的i不合法" << endl;return Error;}return L.Data[i-1];
}//向第i个位置插入数据e
bool ListInsert(SqList &L, Status i, ElemType e){//如果输入的i非法if(i<1 || i > L.length+1){cout << "输入的i不合法" << endl;return Error;}//如果顺序表的已经达到最大长度if (L.length == MaxSize){cout << "顺序表的长度已经达到最大" << endl;return Error;}//for (int j = L.length-1; j > i-1; j--){L.Data[j] = L.Data[j-1];}L.Data[i-1] = e;L.length++;return OK;
}//删除第i个数据
bool ListDelete(SqList &L, Status i,ElemType &e){//如果线性表为空if(Empty(L)){return Error;}//如果输入的i非法if(i<1 || i > L.length){cout << "输入的i不合法" << endl;return Error;}e = L.Data[i-1];for(int j = i-1; j< L.length-1; j++){L.Data[j] = L.Data[j+1];}L.length--;return OK;
}//便利顺序表
void PrintList(SqList L){for (int i = 0; i < L.length; i++){cout << L.Data[i] << " ";}cout << endl;
}//判断顺序表是否为空
bool Empty(SqList L){return !L.length;
}bool DestoryList(SqList &L){L.length = 0;return true;
}
5、运行结果
(2)数据结构-线性表顺序存储相关推荐
- 数据结构—线性表顺序存储插入和删除操作
线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...
- 数据结构线性表顺序存储结构和主要算法实现
(1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...
- 数据结构--线性表顺序存储(顺序表)
特点: 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素. 作用: 线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之 ...
- C语言数据结构线性表顺序存储结构(插入、删除、获取)
一.代码 #include<stdio.h> #define MAXSIZE 20 /*存储空间初始分配量*/ #define OK 1 #define ERROR 0//元素数据类型,假 ...
- [数据结构]线性表——顺序存储
- 数据结构例程——线性表顺序存储的应用
本文是数据结构基础系列网络课程(2):线性表中第6课时线性表顺序存储的应用中所讲的例程. 例:删除元素 问题:已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素. 要求 ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- 关于数据结构链表问题(C语言实现)—— 线性表顺序存储设计与实现
这是我的第一篇博客(内容为废话) 现在马上面临毕业的我,发现整理总结问题真的非常重要,刚刚开始学习数据结构,并且非科班出身的我,感觉得到压力非常大,所以开始学习完后在这进行回忆,复习学习.在这里要感谢 ...
- 《数据结构与算法》——线性表顺序存储结构的插入与删除
什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...
- 数据结构:线性表顺序存储
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.线性表(List):0个或多个数据结构的有限序列 二.线性表的顺序存储结构 1.顺序存储定义 2.顺序存储方式 3.顺序 ...
最新文章
- spring boot 框架搭建
- 爱酷pro充电测试软件,iQOO 5 Pro续航、充电测试简报
- Qt Creator使用Memcheck检测内存泄漏
- 牛客 - 牛牛的最大兴趣组(思维+数论)
- iso qemu 安装ubuntu_基于libvirt 和QEMU在macOS安装Ubuntu
- 前端学习(1653):前端系列实战课程之常见各种窗口
- Linux块层技术全面剖析-v0.1
- Spring中的Aop底层原理
- 【TOJ1132】Square Root,二次同余方程
- Telnet命令检测远程主机上的端口是否开启
- mysql 参照完整性规则_MySQL存储引擎你们知道多少?
- Gcc 完全参考手册,参数说明,操作指南-Gcc Complete referene
- headless webkit(无界面浏览器、爬虫)
- 程序员记录每天工作日志软件_程序员日志记录简介
- ADS入门,使用ADS创建和仿真一个简单的线路
- 苏州外包php,【苏州IT外包经验】Ubuntu 17.10系统下配置PHP+Apache+Mysql
- 【生活】驾照C1-科二手册
- 用计算机搞音乐,用电脑键盘做音乐
- 关于av_freep
- rstudio协整检验代码