线性表(顺序表)的初始化,取值,查找,插入及删除(c++)

这篇具有很好参考价值的文章主要介绍了线性表(顺序表)的初始化,取值,查找,插入及删除(c++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题描述:

顺序表中的基本操作以及描述(基本操作包括对线性表进行初始化,取值,查找元素,插入元素以及删除元素)

二、功能:

(1)初始化线性表:

构造一个空的顺序表,并将表的长度设置为0,具体代码实现如下:

Status InitList(SqList &L)
{
	L.elem=new ElemType[MAXSIZE];
	if(L.elem==NULL) return ERROR;
	L.length=0;
	return OK;
}

(2)存值

本用例为方便,仅存储5个数据,可以更改循环次数从而增加线性表刚开始存储元素的个数。

利用循环将5个值存入顺序表中,每一次存入都要将表的长度加一,记得形参这里的L一定要使用引

用传递,否则存入后线性表仍然是一个空的线性表

void Creat_n(SqList &L)//参数一定要使用引用
{
	ElemType c;
	printf("请输入线性表的5个值:\n");
	for(int i=1;i<=5;i++){
		scanf("%d",&c);
		L.elem[i]=c;
		L.length++;
	}
} 

(3)元素的取值

通过输入要取值的元素的位置来进行取值,并将取到的结果赋给同种变量类型e,在这里e同时也要使用引用传递,因为将取到的值赋给变量e后e的值已经发生改变了。同时要对输入的i值(所取元素的位置)进行判断,如果i值合理才能继续进行,否则需要找一个安全出口退出(return ERROR),具体代码如下:

Status GetElem(SqList L,int i,ElemType &e) 
{
	if(i<1 || i>L.length) return ERROR;
	e=L.elem[i];
	return OK;
} 

(4)元素的查找

元素的查找要使用逐一对比,从第一个元素开始依次与传进的值e进行对比,如果相同,返回i+1,如果没有与传入元素相同的值,返回0,具体代码实现如下:

int LocateElem(SqList L,ElemType e)
{
	for(int i=1;i<=L.length;i++)
		if(L.elem[i]==e) return i;
	return 0;
}

(5)元素的插入

插入元素首先判断插入的位置是否合理,及(i<1 || i>L.length+1),如果不合理,返回ERROR值,其次要判断该线性表的长度是否已经到达最大值MAXSIZE,如果达到,同样返回值ERROR,当插入位置合适并且线性表的长度没有到达最大值,进行元素的插入,将要插入的位置的后面所有元素依次向后移动一个位置(从后面开始移动),并将该元素插入指定位置,插入后,要将线性表的长度加1,具体代码实现如下:

Status ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1 || i>L.length+1) return ERROR;
	if(L.length==MAXSIZE) return ERROR;
	for(int j=L.length;j>=i;j--)
		L.elem[j+1]=L.elem[j];
	L.elem[i]=e;
	++L.length;
	return OK;
} 

(6)元素的删除

同元素的插入一样,需要判断删除元素的位置是否合理,即(i<1 || i>L.length),但是不需要判断线性表的长度是否已经达到最大值,进行元素的删除时,要将该元素后面的元素一一向前挪动一个位置,删除元素后,要将线性表的长度减1,具体代码实现如下:

Status ListDelete(SqList &L,int i){
	if(i<1 || i>L.length) return ERROR;
	for(int j=i+1;j<=L.length;j++)
		L.elem[j-1]=L.elem[j];
	--L.length;
	return OK;
} 

(7)线性表的展示

线性表的展示直接利用循环遍历线性表中的每一个元素即可,这里的L不需要使用参数传递,因为只是简单的遍历输出元素,没有改变线性表元素的值,具体代码如下:

void Display(SqList L)
{
	printf("当前线性表为:\n");
	for(int i=1;i<=L.length;i++)
		 printf("%d ",L.elem[i]);
	printf("\n");
}

三、整体代码(注释及运行截图)

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 10
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct
{
	ElemType *elem;
	int length; 
}SqList;
 
//线性表的初始化 
Status InitList(SqList &L)
{
	L.elem=new ElemType[MAXSIZE];
	if(L.elem==NULL) return ERROR;
	L.length=0;
	return OK;
}
 
//线性表的存值
void Creat_n(SqList &L)
{
	ElemType c;
	printf("请输入线性表的5个值:\n");
	for(int i=1;i<=5;i++){
		scanf("%d",&c);
		L.elem[i]=c;
		L.length++;
	}
} 

//线性表的取值
Status GetElem(SqList L,int i,ElemType &e) 
{
	if(i<1 || i>L.length) return ERROR;
	e=L.elem[i];
	return OK;
} 
 
//线性表的查找元素
int LocateElem(SqList L,ElemType e)
{
	for(int i=1;i<=L.length;i++)
		if(L.elem[i]==e) return i;
	return 0;
}
 
//线性表的插入元素
Status ListInsert(SqList &L,int i,ElemType e)
{
	if(i<1 || i>L.length+1) return ERROR;
	if(L.length==MAXSIZE) return ERROR;
	for(int j=L.length;j>=i;j--)
		L.elem[j+1]=L.elem[j];
	L.elem[i]=e;
	++L.length;
	return OK;
} 
 
//线性表的删除元素
Status ListDelete(SqList &L,int i){
	if(i<1 || i>L.length) return ERROR;
	for(int j=i+1;j<=L.length;j++)
		L.elem[j-1]=L.elem[j];
	--L.length;
	return OK;
} 	
 
//打印线性表
void Display(SqList L)
{
	printf("当前线性表为:\n");
	for(int i=1;i<=L.length;i++)
		 printf("%d ",L.elem[i]);
	printf("\n");
}
 
int main()
{
	SqList L;
	ElemType e;
	int v,k,opt,p;
	p=InitList(L);
	if(p==0) printf("初始化失败!");
	else{
		printf("初始化成功\n");
		printf("请存入5个元素到线性表中\n"); 
		Creat_n(L); 
		printf("1:取出线性表中的某个值\n");
		printf("2:查找线性表中的元素\n");
		printf("3:将线性表中插入一个元素\n");
		printf("4:将线性表中删除一个元素\n");
		printf("5:展示当前线性表\n");
		printf("6:退出\n"); 
		
		while(1){	
			printf("请输入您的选择:");
			cin>>opt;
			if(opt==1){
				//取出线性表中的某个值 
				printf("请输入要取出值的位置:"); 
				cin>>v;
				p=GetElem(L,v,e);
				if(p==0) printf("输入位置非法\n");
				else
					printf("该值为:%d\n",e); 
			}
			else if(opt==2){
				//进行元素的查找
				printf("请输入您要查找的元素:");
				cin>>v;
				k=LocateElem(L,v);
				if(k==0) printf("输入位置非法\n");
				else
					printf("您所查找的元素所在位置为:%d\n",k);
			}
			else if(opt==3){
				//线性表元素的插入
				printf("请输入您要插入的元素及插入的位置:");
				cin>>v>>k;
				p=ListInsert(L,k,v);
				if(p==0) printf("输入位置非法\n");
				else
					Display(L);
			}
			else if(opt==4){ 
				//线性表元素的删除 
				printf("请输入您要删除第几个元素:");
				cin>>v; 
				p=ListDelete(L,v);
				if(p==0) printf("输入位置非法\n");
				else
					Display(L);
			}
			else if(opt==5){
				Display(L);
			}
			else if(opt==6){
				printf("退出成功");
				break; 
			}
		}
	}
}

运行截图

线性表的插入和删除,c++,数据结构

三、线性表(顺序表)的优点及缺点分析:

优点:顺序表可以随机存取表中的任一元素

缺点:插入和删除元素过于麻烦,都需要移动大量的数据,操作过程相对复杂,并且会导致存储空间的浪费。文章来源地址https://www.toymoban.com/news/detail-727155.html

到了这里,关于线性表(顺序表)的初始化,取值,查找,插入及删除(c++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

       堆栈Stack 和 队列Queue 是两种非常重要的数据结构,两者都是特殊的线性表: 对于堆栈,所有的插入和删除(以至几乎所有的存取)都是在表的同一端进行 对于队列,所有的插入都是在表的一端进行,所有的删除(以至几乎所有的存取)都是在表的另一端进行。    堆

    2024年02月07日
    浏览(36)
  • 【数据结构】线性表(一)线性表的定义及其基本操作(顺序表插入、删除、查找、修改)

    目录 一、线性表 1. 线性表的定义 2. 线性表的要素 二、线性表的基本操作 三、线性表的顺序存储结构 1. 定义 2. 顺序表的操作       a. 插入操作 b. 删除操作 c. 查找操作 d. 修改操作 e. 代码实例          一个线性表是由零个或多个 具有相同类型的结点 组成的有序集合。

    2024年02月03日
    浏览(46)
  • 【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)

    要求:利用书本上的线性表的顺序存储结构定义 #define MAXSIZE 100 //顺序表可能达到的最大长度 typedef struct{ ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) } SqList; 1)编写完成下列功能的函数: (1)初始化一个线性表

    2024年04月28日
    浏览(29)
  • golang变量初始化顺序

    顺序: 1.引用的包 2.全局变量 3.init()函数 4.main()函数 输出 $ go run 1.go pkg init func() main init main()

    2024年04月17日
    浏览(34)
  • Java之初始化顺序实践

    在创建Java对象时,需要将对象中的成员变量进行初始化后,才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。 场景1:父类、子类的初始化顺序 用例代码 结果输出 结果分析 先初始化静态块:父类的静态块 - 子类的静态块。 再初始化非静

    2024年02月11日
    浏览(29)
  • 【数组】二分查找(减不减一,看初始化!)

    704. 二分查找 - 力扣(LeetCode) 这道题目的前提是数组为有序数组 ,同时题目还强调 数组中无重复元素 ,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的, 这些都是使用二分法的前提条件 ,当大家看到题目描述满足如上条件的时候,可要想一想是不是

    2024年02月07日
    浏览(38)
  • 数据结构与算法——顺序表(顺序存储结构)及初始化详解

    顺序表 ,全名 顺序存储结构 ,是线性表的一种。通过《什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。 顺序表存储数据时,会提前申请一整块足够大小的物理

    2024年02月16日
    浏览(31)
  • go语言包、变量、init初始化顺序

    一个完整的 go 语言可运行程序,通常会包含引用的包、变量、init 函数以及 main 函数几个部分。 包、变量、常量、init 函数以及 main 函数初始化顺序如下图所示: 在一个 go 语言程序中,初始化顺序规则如下: 引入的包 当前包中的变量、常量 当前包的 init 函数 main 函数 初始

    2023年04月14日
    浏览(40)
  • Spring初始化顺序- RabbitMq 无法自动创建队列

    项目中使用了RabbitMq, 并配置了自动创建topic, exchange,binding 等,但是通过测试发现,有一个队列始终无法自动创建,在对spring 源码以及rabbitmq 源码debug 后发现问题。 rabbitmq 配置了两套环境 , 以下为代码示例 Queue, Exchange, Binding 自动生成配置: 通过运行项目,发现队列,交换机

    2024年02月13日
    浏览(35)
  • 顺序表的基本操作(初始化,增,删,查,改等等)

    1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性

    2024年02月03日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包