数据结构 - 顺序表 C++ 实现
顺序表
此处实现的顺序表为**第一个位置为 data[0] **的顺序表
顺序表的定义为
const int MAX = 50;
typedef int ElemType;
typedef struct {
ElemType data[MAX];
int length;
} SeqList; //data[0] 为第一个元素
顺序表元素的插入
在顺序表 L 位置 i 处插入元素 e
需要注意的几个点:
- 插入元素,插入位置范围为 1 ~ length + 1,否则不合法;
- 移动时的
for的首尾元素的分析- 此处为 data[0] 开始的顺序表,因此第 j 个元素位置在 data[j - 1]
- 第一次移动将第 L.length 个元素移动到第 L.length + 1 处,代码为 L.data[L.length] = L.data[L.length - 1];
- 最后一次移动将第 i 个元素移动到下一个位置,代码为 L.data[i] = L.data[i - 1];
- L.data[j + 1] = L.data[j]: for 起始为 j = L.length - 1 最后为 j = i - 1;
- L.data[j] = L.data[j - 1]: for 起始为 j = L.length 最后为 j = i;
代码如下:
bool ListInsert(SeqList &L, int i, ElemType e) {
if(i < 1 || i > L.length + 1) {
return false;
}
if(L.length == MAX) {
return false;
}
// 1.
for(int j = L.length - 1; j >= i - 1; j--) {
L.data[j + 1] = L.data[j];
}
// 2.
for(int j = L.length; j >= i; j--) {
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return true;
}
顺序表元素的删除
删除顺序表 L 位置 i 处的元素,将删除元素放在 x 中
需要注意的几个点:
删除元素,删除位置范围为 1 ~ length,否则不合法;
移动时的
for的首尾元素的分析此处为 data[0] 开始的顺序表,因此第 j 个元素位置在 data[j - 1]
第一次移动将第 i + 1 个(data[i])元素移动到第 i 处(data[i - 1]),代码为
L.data[i - 1] = L.data[i];
最后一次移动将第 L.length 个(data[L.length-1])元素移动到第 L.length - 1 处,
代码为 L.data[L.length - 2] = L.data[L.length - 1];
L.data[j + 1] = L.data[j]: for 起始为 j = i 最后为 j = L.lenght - 1;
L.data[j] = L.data[j - 1]: for 起始为 j = i - 1 最后为 j = L.length - 2;
代码如下:
bool ListDelete(SeqList &L, int i, ElemType &e) {
if(i < 1 || i > L.length) {
return false;
}
e = L.data[i - 1];
for(int j = i - 1; j < L.length - 1; j++) {
L.data[j] = L.data[j + 1];
}
for(int j = i; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
顺序表的查找
按值查找返回位置
顺序查找所有顺序表中的值,若找到则返回位置(第一个位置为 data[0]),若未找到返回 0
int LocateElem(SqList L, ElemType e) {
for(int i = 0; i < L.length; i++) {
if(L.data[i] == e) {
return i + 1;
}
}
return 0;
}
按位置查找
对于顺序表可以随机存储,直接取数即可;
ElemType GetByLocate(SqList L,int i) {
return L.data[i];
}
顺序表的测试
#include<iostream>
using namespace std;
//静态分配空间
const int MAX = 50;
typedef int ElemType;
typedef struct {
ElemType data[MAX];
int length;
} SqList; //data[0] 为第一个元素
/*
//动态分配空间
typedef struct {
ElemType *data;
int MAX, length;
};
*/
void ListInitite(SqList &L) {
L.length = 0;
}
//插入元素,插入位置范围为 1 ~ length + 1
bool ListInsert(SqList &L, int i, ElemType e) {
if(i < 1 || i > L.length + 1) {
return false;
}
if(L.length == MAX) {
return false;
}
// for(int j = L.length - 1; j >= i - 1; j--) {
// L.data[j + 1] = L.data[j];
// }
for(int j = L.length; j >= i; j--) {
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return true;
}
bool ListDelete(SqList &L, int i, ElemType &e) {
if(i < 1 || i > L.length) {
return false;
}
e = L.data[i - 1];
// for(int j = i - 1; j < L.length - 1; j++) {
// L.data[j] = L.data[j + 1];
// }
for(int j = i; j < L.length; j++) {
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
int LocateElem(SqList L, ElemType e) {
for(int i = 0; i < L.length; i++) {
if(L.data[i] == e) {
return i + 1;
}
}
return 0;
}
ElemType GetByLocate(SqList L,int i) {
return L.data[i - 1];
}
int main() {
SqList L;
ListInitite(L);
for(int i = 1; i <= 10; i++) {
if(ListInsert(L, i, 3 * i)) {
printf("插入成功\n");
}
}
cout << L.data[0] << endl;
for(int i = 1; i <= L.length; i++) {
ElemType k = GetByLocate(L, i);
printf("%d ", k);
}
printf("\n元素 9 在顺序表中的位置为:%d\n", LocateElem(L, 9));
ElemType e;
ListDelete(L, 8, e); //删除第 8 个元素
printf("被删除的元素为%d\n", e);
printf("删除后\n");
for(int i = 1; i <= L.length; i++) {
ElemType k = GetByLocate(L, i);
printf("%d ", k);
}
return 0;
}
测试数据及结果如下
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
3
3 6 9 12 15 18 21 24 27 30
元素 9 在顺序表中的位置为:3
被删除的元素为24
删除后
3 6 9 12 15 18 21 27 30
数据结构 - 顺序表 C++ 实现的更多相关文章
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- hrbust-1545-基础数据结构——顺序表(2)
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- 数据结构顺序表删除所有特定元素x
顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...
- 数据结构---顺序表(C++)
顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...
- 数据结构顺序表Java实现
Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...
- python算法与数据结构-顺序表(37)
1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...
- 数据结构——顺序表(sequence list)
/* sequenceList.c */ /* 顺序表 */ /* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表. */ #in ...
- 数据结构顺序表中Sqlist *L,&L,Sqlist *&L
//定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...
- Java数据结构——顺序表
一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...
随机推荐
- 趣谈IO多路复用的本质
在<轻松搞懂5种IO模型>中,我发起了一个投票. 答案是[同步IO多路复用].目前,60%的朋友答对了.原因这里解释一下. 同步和异步的概念区别 同步:线程自己去获取结果.(一个线程) 异 ...
- 通过shell脚本统计elasticsearch indices每天的数量以及大小
前情提要: 最近elasticsearch集群总出问题,之前虽然修复了,现在又出现新的问题,于是PM要求拉取elasticsearch每天建立的索引有多少,索引有多大,需要对机器进行评估 客户现场无法 ...
- VS Code开发TypeScript
TypeScript是JaveScript的超集,为JavaScript增加了很多特性,它可以编译成纯JavaScript在浏览器上运行.TypeScript已经成为各种流行框架和前端应用开发的首选. ...
- Dubbo扩展点应用之二负载均衡
负载均衡其本质就是将请求分摊到多个操作单元上进行,从而共同完成工作任务.其策略主要用于客户端春常在多个提供者时根据算法选择某个提供者.在集群负载均衡时,Dubbo提供了多种均衡策略(包括随机.轮询.最 ...
- RadonDB MySQL on K8s 2.1.2 发布!
RadonDB MySQL on Kubernetes 于 2 月 17 日发布了新版本 2.1.2 .该版本在节点的重建.增删等方面进行了全面升级. 致谢: 首先感谢 @andyli029 @ace ...
- python虚拟环境与伪静态网页
目录 一:python虚拟环境 1.本地虚拟环境 1.创建虚拟环境 2.venv表示虚拟环境标志 3.虚拟环境下载django 4.使用虚拟环境 二:伪静态(了解) 1.什么是伪静态网页? 2.为什么 ...
- eBPF会成为服务网格的未来吗?
服务网格现状 服务网格为服务提供了复杂的应用层网络管理,如服务发现.流量路由.弹性(超时/重试/断路).认证/授权.可观察性(日志/度量/追踪)等. 在分布式应用的早期,这些要求是通过直接将所需的逻辑 ...
- Dashboard究竟是什么,它在数据展示上的优势何在?
相信很多人在做数据分析工作的时候都遇到这种情况,辛辛苦苦做出来的数据报表老板看了嫌弃不够直观.生动,客户看了嫌弃不够高大上.这个时候不妨尝试一下使用Dashboard来展示报表数据,可能有些人对Da ...
- 思迈特软件Smartbi发展再提速,完成B+轮过亿战略融资
2021年4月,思迈特软件(Smartbi)宣布完成亿级B+轮战略融资,本轮投资方为领先的全球企业级数据分析和组织智能服务平台提供商--明略科技.此前,思迈特软件曾先后获得来自价值资本.方广资本的数千 ...
- 实现按钮跳转&下划线等
按钮点击跳转页面:(在java文件里写) 1 public class MainActivity extends AppCompatActivity { 2 3 private Button mbtn ...