数据结构-线性表-顺序表

这篇具有很好参考价值的文章主要介绍了数据结构-线性表-顺序表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构-线性表

线性表的定义:由n(n>=0)个数据特性相同的元素构成的有限序列,称为线性表。当n=0时称之为空表。

1.数据类型声明

#define OK 1//定义一个宏,使用OK表示操作成功
#define ERROR 0//定义一个宏。使用ERROR表示操作失败
#define OVERFLOW -2//定义宏,表示溢出操作

typedef int Status;//重命名为status用于表示函数的返回状态
typedef int ElemType;//重命名为ElemType用于表示线性表数据元素类型

#define MAXSIZE 100//定义宏,表示线性表可能得最大空间

2.构建线性表

typedef struct{
	ElemType elem[MAXSIZE];//定义了数组,用于存储线性表中的元素
	int length;//表示当前线性表的长度,顺序表中的元素个数
}SqList;

3.初始化线性表

因为构件线性表时元素数组已经使用静态分配,所以在此只需要对线性表的长度执行初始化即可。

/**
 * @brief 初始化
 * 
 * @param L 线性表
 * 
 * @return 
 **/
Status InitList(SqList *L){
	L->length = 0;
	return OK;
}

4.获取线性表中数据

获取数据需要参数:
sqList:需要给定一个线性表从而获取数据,因为只是拿值而没有改变线性表的内容,所以使用值传递即可。
i:需要给一个数值,确定要查找的数据在线性表的那个位置。
&e:需要一个地址变量,要把找到的值传递出去。

/**
 * @brief 获取值
 * 
 * @param sqList 操作数组
 * @param i 数据位置
 * @param e 返回地址
 * 
 * @return 
 **/
Status GetElem(SqList sqList,int i,ElemType &e){
	if(i<1 || i>sqList.length){//判断i是否合法,是否在线性表的范围内
		return ERROR;
	}
	e=sqList.elem[i];
	return OK;
}

5.查找线性表中数据

l:给定一个线性表,确定要在那个线性表中查询数据。
e:给定一个元素,确定我们需要查找那个元素,返回在线性表中的位置

/**
 * @brief 查值
 * 
 * @param l 操作线性表
 * @param e 查找的元素
 * 
 * @return 返回所在位置
 **/
int LocateElemTyp(SqList l,ElemType e){
	for(int i=1;i<l.length;i++){//根据线性表的大小进行遍历
		if(l.elem[i]==e){//遍历一遍进行判断是否是要查找的值
			return i;//如果是返回位置
		}
	}
	
	return ERROR;
}

6.插入数据

*p:给定一个线性表,因为需要改变线性表内部数据,所以需要传递进一个线性表的地址。
i:给定一个位置,需要在那个位置插入数据。
e:给定一个元素,需要插入的元素。

/**
 * @brief 插入数据
 * 
 * @param p 
 * @param i 
 * @param e 
 * 
 * @return 
 **/
Status insertElem(SqList *p,int i,ElemType e){
	if(i<1||i>p->length||p->length==MAXSIZE){//对i的进行合法判断,是否在线性表的范围内、判断线性表是否已满
		//TODO
		return ERROR;
	}
	for(int j=p->length;j>=i;j--){//对线性表进行数据后移,空出插入位置的空间
		//TODO
		p->elem[j]=p->elem[j-1];
	}
	p->elem[i]=e;
	p->length++;//表长度加一
	return OK;
}

7.删除数据

*p:给定一个线性表的地址,删除需要改变线性表的内容所以需要一个线性表的地址
i:给定一个位置,确定要删除的位置元素文章来源地址https://www.toymoban.com/news/detail-715886.html

/**
 * @brief 删除数据
 * 
 * @param p 
 * @param i 
 * 
 * @return 
 **/
Status deleteElem(SqList *p,int i){
	if(i<1||i>p->length){//判断i在线性表中是否合法
		//TODO
		return ERROR;
	}
	
	for(int j=i;j<=p->length;j++){//直接对线性表数据进行前置移位即可,直接覆盖需要删除的数据
		//TODO
		p->elem[j]=p->elem[j+1];
	}
	p->length--;//表长度减一
	return OK;
}

测试:

int main(){
	SqList sqlist;
	InitList(&sqlist);
	cout<<"请输入要创建的线性表的元素个数(5个数据)"<<endl;
	for(int i=1;i<=5;i++){
		cin>>sqlist.elem[i];
		sqlist.length++;
	}
	
	cout<<"线性表中的数据元素为:";
	for(int i=1;i<=5;i++){
		cout<<sqlist.elem[i]<<"  ";
	}
	cout<<endl;
	
	
	
	ElemType value;
	int index;
	cout<<"请输入要查找的位置:";
	cin>>index;
	if(OK == GetElem(sqlist,index,value)){
		//TODO
		cout<<"位置为"<<index<<"值为"<<value<<" ";
	}else{
		cout<<"取值不合法";
	}
	
	cout<<endl;	
	value = 2;
	cout<<LocateElemTyp(sqlist,value);
	cout<<endl;
	
	if(OK==insertElem(&sqlist,3,2)){
		//TODO
		cout<<"插入成功";
	}
	cout<<"线性表中的数据元素为:";
	for(int i=1;i<sqlist.length;i++){
		cout<<sqlist.elem[i]<<"  ";
	}
	cout<<endl;
	
	if(OK==deleteElem(&sqlist,1)){
		//TODO
		cout<<"删除成功";
	}
	cout<<"线性表中的数据元素为:";
	for(int i=1;i<sqlist.length;i++){
		cout<<sqlist.elem[i]<<"  ";
	}
	cout<<endl;
}

到了这里,关于数据结构-线性表-顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:线性表之-顺序表

    目录 1.线性表概念 1.1 什么是顺序列表 1.2 线性表 2.顺序表实现 将有以下功能: 详细过程 顺序表的动态存储 顺序表初始化 尾插 扩容 头插 更改后的尾插 尾删 头删 打印 释放内存 优化顺序表 (任意位置插入删除) 优化后的头插尾插 优化后的头删尾删 查找和删除 进行装饰(菜单

    2024年02月10日
    浏览(35)
  • 数据结构: 线性表(顺序表实现)

    线性表(linear list)是 n 个具有相同特性的数据元素的有序序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表: 顺序表,链表,栈,队列,字符串… 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删

    2024年02月14日
    浏览(36)
  • 数据结构---顺序表示的线性表

             数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简言之,数据

    2024年02月16日
    浏览(41)
  • 数据结构——线性表①(顺序表)

    线性表是一种数据结构,它是由n个具有 相同数据类型 的数据元素a1,a2,…,an组成的 有限序列 。 其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。 线性表可以用 顺序存储结构 或 链式存储结构

    2024年02月06日
    浏览(42)
  • C/C++数据结构---顺序表---线性存储结构

    个人主页: 仍有未知等待探索_小项目,洛谷刷题,数据结构-CSDN博客 专题分栏---数据结构: 数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、知识储备 二、引例  三、顺序表 第一步,先创建一个顺序表类型 第二步,定义和初始化顺序表    第三步,顺序表的基本操作

    2024年02月08日
    浏览(28)
  • 【数据结构】线性表与顺序表

    ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 它是一种在实际中广泛使用的数据结构,常见的线性表:顺序表

    2024年02月07日
    浏览(34)
  • 【数据结构】线性表之顺序表

    线性表是 n (n = 0) 个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… 线性表在 逻辑上是线性结构 ,也就说是连续的一条直线。但是在 物理结构 上并 不一定 是连续的线性表在物理上存储时,通常以

    2024年02月04日
    浏览(40)
  • 数据结构——线性表之顺序表

    目录 一.线性表 二.顺序表实现  2.1 概念及结构  2.2 动态顺序表 2.2.1 初始化与销毁函数 2.2.2 打印函数 2.2.3 尾插函数 2.2.4 尾删函数 2.2.5 扩容函数 2.2.6 头插函数 2.2.7 头删函数 2.2.8 任意位置插入函数 2.2.9 查找函数 2.2.10 任意位置删除函数  2.2.11 修改函数 三.完整代码 四.力扣

    2024年02月07日
    浏览(29)
  • 【数据结构】线性表和顺序表

    Yan-英杰的主页 悟已往之不谏 知来者之可追 目录 1.线性表 2.顺序表         2.1 静态顺序表         2.2 动态顺序表         2.3移除元素         线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线

    2023年04月08日
    浏览(67)
  • 数据结构(二)----线性表(顺序表,链表)

    目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序表的按值查找: 顺序表的特点: (2)单链表 •单链表的实现 不带头结点的单链表

    2024年04月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包