数据结构之线性表

数据结构线性表的构建 数据结构线性表的构建 创建名为线性表的空项目,在创建的线性表中创建线性表cpp文件,之际按c文件的格式写代码即可。 首先要在开头添加两个头文件: #include <conio.h> (不然,getch()没有定义) #include <windows.h> 然后,因为clrscr()在vs中没有提供,所以我们采用以下代码来说明,需要与#include <wi... 阅读详情

开始考研复习数据结构了,准备把《数据结构》严蔚敏版中所有的数据结构全部实现一遍,今天是线性表.

基本上和课本上的类c语言差不多。(代码注释的很详细了哈哈)
Mycode:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;

#define List_Init_Size 100 //线性表存储空间的初始分配量
#define ListIncrement 10   //线性表存储空间的分配增量

typedef struct{
	int *elem;		//存储空间基址
	int length; //当前表长
	int listsize;	//当前分配的存储大小
}SqList;

int InitList(SqList &L){
	//初始化一个空的线性表
	L.elem = (int *)malloc(List_Init_Size * sizeof(int)); //初始分配存储空间
	if (!L.elem) exit(-2);	//分配失败
	L.length = 0;
	L.listsize = List_Init_Size;
	return 1;
}

int DestroyList(SqList &L){
	//销毁线性表
	free(L.elem);	//直接释放掉这段空间
	return 1;
}

int ListEmpty(SqList L){
	//判断表是否为空
	if (L.length == 0) return 1;
	return 0;
}

/* 个人感觉这个实在没啥用
int ListLength(SqList L){
	//返回表长
	return L.length;
}
*/

int ListClear(SqList &L){
	//清空线性表
	for(int i = 0; i < L.length; i++)
		L.elem[i] = 0;
	L.length = 0;
	return 1;
}

int GetElem(SqList L, int i, int &e){
	//找到第i个元素,并用e返回
	if (i < 0 || i > L.length) return 0;	//i不合法
	e = L.elem[i - 1];
	return 1;
}

int LocateElem(SqList L, int e){
	//返回线性表中第一个和e相等的元素
	for(int i = 0; i < L.length; i++)
		if (L.elem[i] == e)
			return i + 1;
	return 0;
}

int PriorElem(SqList L, int cur, int &pre){
	//若cur是L中的元素,且不是第一个,则返回它的前驱
	for(int i = 0; i < L.length; i++){
		if (L.elem[i] == cur){
			if (i == 0){
				return 0;	//不能是第一个元素
			}
			pre = L.elem[i - 1];
			return 1;
		}
	}
	return 0;	//cur不在线性表中,找不到前驱
}

int NextElem(SqList L, int cur, int &next){
	//若cur是L中的元素,且不是最后一个,则返回它的后继
	for(int i = 0; i < L.length; i++){
		if (L.elem[i] == cur){
			if (i == L.length - 1){
				return 0;	//不能是最后一个元素
			}
			next = L.elem[i + 1];
			return 1;
		}
	}
	return 0;	//cur不是线性表中的元素
}

int ListInsert(SqList &L, int i, int e){
	//在第i个位置之前插入新的元素e
	if (i < 1 || i > L.length + 1) return 0;  //i不合法
	if (L.length >= L.listsize){	//当前空间已满,增加分配
		L.elem = (int *)realloc(L.elem, (L.listsize + ListIncrement) * sizeof(int));
		L.length += ListIncrement; 
	}
	int *q = &(L.elem[i-1]);
	int *p ;
	for(p = &(L.elem[L.length - 1]); p >= q; p--)
		*(p+1) = *p;	//插入的位置及以后的元素全部后移1位
	*q = e;
	L.length += 1;	//插入后表长+1
	return 1;
}

int ListDelete(SqList &L, int i, int &e){
	//删除第i位元素,并用e返回
	if (i < 1 || i > L.length) return 0;
	int *p = &(L.elem[i - 1]);
	e = *p;
	int *q = &(L.elem[L.length - 1]);
	for(++p; p <= q; p++){
		*(p - 1) = *p;
	}
	L.length--;
	return 1;
}

int main(){
	SqList s;
	printf("开始初始化线性表s\n");
	InitList(s);
	printf("空表长度: %d, 分配存储大小: %d\n",s.length,s.listsize);
	printf("---------------------------------\n");
	printf("开始进行插入操作\n");
	for(int i = 1; i <= 10; i++){
		printf("线性表第%d个元素插入%d\n",i,i);
		ListInsert(s, i, i);
	}
	printf("---------------------------------\n");
	if (ListEmpty(s)) printf("线性表为空\n");
	else printf("此时线性表的表长为: %d\n", s.length);
	int e;
	GetElem(s, 5, e);
	printf("第5个元素的值是: %d\n", e);
	printf("---------------------------------\n");
	PriorElem(s, 7, e);
	printf("第7个元素的前驱是: %d\n", e);
	NextElem(s, 7, e);
	printf("第7个元素的后继是: %d\n", e);
	printf("---------------------------------\n");
	ListDelete(s, 1, e);
	printf("删除1号元素后的表长: %d\n", s.length);
	for(int i = 0; i < s.length; i++){
		printf("第%d个元素为:%d\n", i + 1, s.elem[i]);
	}
	printf("---------------------------------\n");
	ListClear(s);
	printf("清空后s的表长: %d\n", s.length);
	DestroyList(s);
	return 0;
}

运行结果:

开始初始化线性表s
空表长度: 0, 分配存储大小: 100
---------------------------------
开始进行插入操作
线性表第1个元素插入1
线性表第2个元素插入2
线性表第3个元素插入3
线性表第4个元素插入4
线性表第5个元素插入5
线性表第6个元素插入6
线性表第7个元素插入7
线性表第8个元素插入8
线性表第9个元素插入9
线性表第10个元素插入10
---------------------------------
此时线性表的表长为: 10
第5个元素的值是: 5
---------------------------------
第7个元素的前驱是: 6
第7个元素的后继是: 8
---------------------------------
删除1号元素后的表长: 9
第1个元素为:2
第2个元素为:3
第3个元素为:4
第4个元素为:5
第5个元素为:6
第6个元素为:7
第7个元素为:8
第8个元素为:9
第9个元素为:10
---------------------------------
清空后s的表长: 0
Hit any key to close this window...
王道数据结构线性表基本操作实现 #include<iostream> using namespace std; //#define MaxSize 50 //线性表最大长度 #define InitSize 100 //表长度初始定义 typedef int ElemType; //typedef struct { // ElemType data[MaxSize]; ... 阅读详情

相关推荐

数据结构——线性表习题

看这里看这里一、移除链表元素问题描述思路代码二、取单链表中间值(带头结点)问题描述思路代码三、括号匹配问题问题描述思路代码四、队列实现栈问题描述思路代码五、栈实现队列问题描述思路代码六、最小栈问题描述思路代码三级目录 今天给大家介绍几道常考的关于数据结构线性表的习题。小小拙见,希望对你有帮助哦! 一、移除链表元素 问题描述 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->

m0_46859476的博客 1548

数据结构线性表题库

网络课课后题 1、下面关于线性表的叙述中,正确的是 A、线性表采用顺序存储,必须占用一片连续的存储单元。 B、线性表采用顺序存储,便于进行插入和删除操作。 C、线性表采用链接存储,不必占用一片连续的存储单元。 D、线性表采用链接存储,便于插入和删除操作。 解析 顺序存储是按索引值从小到大存放在一片相邻的连续区域 采用链接存储,便于插入和删除操作,如果采用顺序存储,插入和删除时需要...

闲狗的博客 1万+

DevEco Studio在初始化时出现Installing pnpm@8.13.1...npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm E

npm的仓库源设置的有问题,下载不了鸿蒙相关组件,所以你的启动依赖都没有,或者以前下载过npm,使用的源改的乱七八糟了。以前安装过前端相关的node.js的话,启动的时候记得使用管理远权限。(DevEco Studio)就出错,npm显示超时。

qq_56392862的博客 2628

数据结构篇——线性表

线性表的定义:用数据元素的有限序列表示。具体情况如下图所示:线性表的几个特点如下:①只有一个首结点和尾结点;② 除首尾结点外,其他结点只有一个直接前驱和一个 直接后继。Tips:线性结构反映结点间的逻辑关系是 一对一 的。线性结构包括线性表、堆栈、队列、字符串、数组等。

2301_79702677的博客 1568

无线控制的隐形桥梁:深入解析NRF24L01在电机控制中的数据传输艺术

本文深入解析NRF24L01无线模块在电机控制中的数据传输技术,涵盖通信机制优化、抗干扰策略及实时性保障。通过舵机和无刷电机的实战案例,展示如何构建稳定高效的无线控制系统,为嵌入式开发提供完整解决方案。

j7k8l的博客 332

聚宽策略实盘新路径:不开通QMT , 小资金自动化交易解决方案

聚宽策略实盘新路径:不开通QMT , 小资金自动化交易解决方案

u011111246的博客 1466

数据结构 线性表

其中,数组实现的线性表具有随机访问的优势,可以通过索引直接访问元素,而链表实现的线性表具有动态插入和删除的优势。哈希表:哈希表是一种基于数组的线性表,通过哈希函数将关键字映射到数组的索引位置,用于高效地查找、插入和删除元素。链表:链表是一种链式存储的线性表,适用于频繁插入和删除元素的场景。这些只是线性表在各个领域中的一些应用示例,实际上线性表作为一种基础数据结构,几乎在所有计算机科学和软件开发的领域中都有广泛的应用。,并实现了初始化、获取长度、判断是否为空、获取元素、插入元素、删除元素和输出线性表的函数。

qq_52847866的博客 1777

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1510

JAVA数据结构——线性表

线性表是典型的数据结构之一,Java API支持多种数据结构,利用集合框架进行具体实现。本文将剖析这些数据结构是如何实现的。

NJfunkGiser的博客 880

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

多模型机器学习生存预测分析:AUC比较、生存分层与SHAP解释

本文研究了多种机器学习模型在心力衰竭患者生存预测中的应用。通过比较逻辑回归、随机森林、XGBoost、LightGBM和梯度提升机五种模型的AUC表现,选择最优预测模型。基于最优模型的预测概率对患者进行风险分层,并使用Kaplan-Meier生存分析和log-rank检验验证分层的有效性。最后采用SHAP方法解释模型决策过程,识别关键预测因素。研究提供了从模型构建、评估到解释的完整技术流程,为临床预后预测提供了可复现的分析框架。

AI的内部世界的博客 157

数据结构——线性表

(2)当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。(2)链式,数据存放的存储单位是随机或任意的,可以连续也可以不连续。(1)顺序存储,数据存放在连续的存储单位中。1,输入,输出特性,输入时可选的,输出时必须的。

wxy319的博客 1358

【DRAM存储器五十六】LPDDR5介绍--WCK2CK Leveling和Read gate training

简述LPDDR5 WCK2CK leveling和read gate traning基本原理与操作步骤

highman110的博客 8786

【数据结构】线性表的顺序存储

💯线性表是具有相同类型的数据类型的n个数据元素的有限序列,其中n为表长,n0n=0n0时为空表ege.geg这里要注意的是,定义中描述的为数据元素,而非数据项,也就是,存储单元可以是一个结构体,而数据项为里面的成员✨线性表的特点:表中元素的个数为有限个表中元素具有逻辑上的顺序性,表中元素有其先后顺序表中元素都是数据元素,每一个元素都为单个元素表中元素的数据类型都相同,每个元素占相同的内存空间表中元素具有抽象性,即仅讨论元素之间的逻辑关系,而不考虑具体实现方式🔑。

DAY I 的成长之路 5012

【华为OD机试真题】2、在字符串中找出连续最长的数字串含+-号 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。   注意: 数字串可以由数字”0-9″、小数点”.”、正负号”±”组成,长度包括组成数字串的所有符号。 “.”、“±”仅能出现一次,”.”的两边必须是数字,”±”仅能出现在开头且其后必须要有数字。 长度不定,可能含有空格

KJ.JK 6271

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构 线性表 插入 删除

数据结构线性表的插入,删除 任务描述 本关任务:实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的插入、删除与查找等功能。 相关知识) 线性表是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。具体实现时,线性表可以采用不同的存储策略。下面给出了一种基于顺序存...

mmmm0303的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【数据结构】线性表

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。它主要研究的是数据的逻辑结构、存储结构以及在这些结构上定义的运算。逻辑结构描述了数据元素之间的逻辑关系,比如线性结构、树形结构、图状结构等。存储结构则关注数据元素及其关系在计算机存储器中的存储方式,常见的有顺序存储、链式存储等。通过合理地选择和运用数据结构,可以更高效地解决实际问题,提高程序的运行效率和性能。线性表是由n(n≥0)个具有相同类型的数据元素组成的有限序列。

Guiat的博客 1122

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构—线性表

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,每个数据元素可能会有多个数据项。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,...

the_sea1的博客 284

【数据结构中的线性表】

在编写本篇博客时,学校正要进行期末考试,花费的时间比较长,内容很多,还望耐心看完!线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

Z15255808023的博客 1007

数据结构:线性表

由n(n≥0)个具有相同特性的数据元素组成的有限序列。有序性:元素之间存在明确的先后顺序,第一个元素无前驱,最后一个元素无后继,其余元素有且仅有一个前驱和一个后继(如数组[1,2,3]中,2的前驱是1,后继是3)。同质性:所有元素属于同一数据类型(如整数列表、字符串列表)。有限性:元素个数n为非负整数,当n=0时称为“空表”。线性表是现实世界中“序列关系”的抽象,例如学生点名册(按学号排序)、购物清单(按添加顺序)等均符合其特征。

梁辰兴的博客 1038

数据结构考研之线性表

线性表 点击 线性表练习题 线性表是具有 相同类型的n (n>=O)个元素的有限序列,其中n为表长,当n=0时,该表为空表。 若L命名为线性表,则一般表示为 L= ( a1,a2 ,…, ai,ai+1,…,an) 除了表头(a1)结点都有前驱结点,除了表尾(an)结点都有后继结点 线性表的特点: 表中元素个数有限 表中元素具有逻辑上的顺序性,在序列中各个元素排序有其先后次序 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间 表中元素具有抽象性,即讨论元素间一对一的逻辑关系,而不考

sf9090的博客 3万+
上一篇: LeetCode刷题~
下一篇: 数据结构之链表
_dingzhen
博客等级 码龄9年 120粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值