iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++顺序表的基本操作实现
  • 182
分享到

C++顺序表的基本操作实现

2024-04-02 19:04:59 182人浏览 独家记忆
摘要

目录1.顺序表的定义2.顺序表上基本操作的实现完整代码如下:总结1.顺序表的定义 线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相

1.顺序表的定义

线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。第1个元素存储在线性表的起始位置,第i个元素的存储位置后面紧邻这存储的是第i+1个元素,称 i 为元素ai在线性表中的位序。因此,顺序表的特点是表中元素的逻辑顺序和物理顺序相同。

    假定线性表中的元素类型为ElemType,则线性表的顺序存储为

#define ElemType int
#define MaxSize 50  //定义线性表的最大长度
typedef struct{
    ElemType data[MaxSize] //顺序表的元素
    int length; //顺序表的当前长度
}sqlist;   //顺序表的类型定义

此时,一维数组是静态分配,由于数组的大小和空间事先已经固定,一单空间占满,再加入新的数据就会产生溢出,进而导致程序崩溃。

2.顺序表上基本操作的实现

(1)初始化操作
初始化顺序表。构造一个空的线性表。

void IniteList(SqList &L){
	memset(L.data,0,sizeof(L)); //将顺序表L中的数据初始化为0 
	L.length = 0;
} 

注意: “&”表示c++中的应用调用,后面就不一一赘述了!
(2)创建顺序表

bool CreateList(SqList &L,int n){
	if(n<0||n>MaxSize){  //创建顺序表的个数不合理
		return false;
	}
	L.length = n;
	cout << "请依次输出" << n <<"个数并用空格隔开:"; 
	for(int i=0;i<L.length;i++){
		cin >> L.data[i];
	}
	return true;
} 

(3)插入操作
在顺序表L的第i(1 <= i <= L.length+1)个位置插入新元素e。若 i 的输入不合法,则返回false,表示插入失败;否则,将第 i 个元素及其后的所有元素依次往后移动一个位置,腾出一个空位置插入新元素e,顺序表的长度加1,插入成功,返回true.

bool InserteList(SqList &L,int i,ElemType e){
	if(i<1||i>L.length+1){
		return false;
		cout << "插入位置不合法!"; 
	}
	if(L.length == MaxSize){
		return false;
		cout << "当前顺序表空间已满!";
	}
	for(int j=L.length;j>=i;j--){  //先移动最后一个元素,在移动其他的
		L.data[j]=L.data[j-1];//将i以及i之后的所有元素都往后移 
	}
	L.data[i-1]=e; //注意:先后移完之后在插入 
	L.length++;
	return true;
}

注意: 区别顺序表的位序和数组下标。前者是从1开始,后者是从0开始。
(4)删除操作
删除顺序表L中的第 i (1 <= i <= L.length) 个位置的元素,用应用变量e返回。若 i 的输入不合法,则返回 false;否则,将被删除元素赋给引用变量e,并将第 i + 1 个元素及其后的所有元素依次往前移动一个位置,返回true。

bool DeleteList(SqList &L,int i,ElemType e){
	if(i<1||i>L.length){
		return false;
	}
	e=L.data[i-1]; //将所删除的元素赋值给 e
	for(int j=i;j<L.length;j++){  //j = i,在数组中下标表示就是所删除元素后面第一个元素
		L.data[j-1]=L.data[j]; //将i之后的元素都往前移 
	}
	L.length--;
	return true;
}

(5)查找(按值查找)
在顺序表L中查找第一个元素值等于 e 的元素,并将其返回。

int Search1_List(SqList &L,ElemType e){
	int j=0;
	for(int i=0;i<L.length;i++){
		if(L.data[i] == e){
			j=i+1;   //下标为 i 的元素值等于 e ,将其返回其位序 i+1
		}
	}
	return j;
} 

(6)查找(按序查找)
在顺序表中返回指定位置的元素。

int Search2_List(SqList &L,int i){
	if(i<1||i>L.length){
		cout << "查找位置不合理!";
	}
	return L.data[i-1];
} 

(7)打印操作
按前后顺序打印线性表L中的所有值。

void PrintList(SqList L){
	cout << "顺序表中所有元素为:";
	for(int j=0;j<L.length;j++){
		cout << L.data[j] << " ";
	} 
	cout <<endl;
} 

完整代码如下:


#include<iOStream>
#include<stdlib.h>
#include<cstring>
#include<string.h>
#define ElemType int
#define MaxSize 100
using namespace std;
typedef struct{
	ElemType data[MaxSize];
	int length; //数序标的长度 
}SqList;
//初始化顺序表
void IniteList(SqList &L){
	memset(L.data,0,sizeof(L)); //将顺序表L中的数据初始化为0 
	L.length = 0;
} 
//创建顺序表函数 
bool CreateList(SqList &L,int n){
	if(n<0||n>MaxSize){
		return false;
	}
	L.length = n;
	cout << "请依次输出" << n <<"个数并用空格隔开:"; 
	for(int i=0;i<L.length;i++){
		cin >> L.data[i];
	}
	return true;
} 
//顺序表L中在第i个位插入元素
bool InserteList(SqList &L,int i,ElemType e){
	if(i<1||i>L.length+1){
		return false;
		cout << "插入位置不合法!"; 
	}
	if(L.length == MaxSize){
		return false;
		cout << "当前顺序表空间已满!";
	}
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];//将i以及i之后的所有元素都往后移 
	}
	L.data[i-1]=e; //注意:先后移完之后在插入 
	L.length++;
	return true;
}
//删除顺序表L中第i个元素的位置上 
bool DeleteList(SqList &L,int i,ElemType e){
	if(i<1||i>L.length){
		return false;
	}
	e=L.data[i-1]; //将所删除的元素赋值给 e
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j]; //将i之后的元素都往前移 
	}
	L.length--;
	return true;
}
//查找(按值查找)函数
int Search1_List(SqList &L,ElemType e){
	int j=0;
	for(int i=0;i<L.length;i++){
		if(L.data[i] == e){
			j=i+1;
		}
	}
	return j;
} 
//查找(按序查找)函数
int Search2_List(SqList &L,int i){
	if(i<1||i>L.length){
		cout << "查找位置不合理!";
	}
	return L.data[i-1];
} 
//打印输出顺序表函数
void PrintList(SqList L){
	cout << "顺序表中所有元素为:";
	for(int j=0;j<L.length;j++){
		cout << L.data[j] << " ";
	} 
	cout <<endl;
} 
//创建
void Create(SqList &L){
	int n;bool flag;
	cout << "请输入所创建顺序表中元素的个数:";
	cin >> n;
	flag = CreateList(L,n);
	if(flag){
		cout << "创建成功!";
		PrintList(L);
	}
	else
	  cout << "创建失败!"; 
} 
//插入 
void Insert(SqList &L){
	int i; 
	int e;
	bool flag;
	cout << "请输入插入位置和所插元素:";
	cin >> i >> e;
	flag = InserteList(L,i,e);
	if(flag){
		cout << "插入成功!\n" << "插入后" ;
		PrintList(L);
	}
	else 
	  cout << "插入失败!";
}
//删除 
void Delete(SqList &L){
	int i; int e; bool flag;
	cout << "请输入删除位置:";
	cin >> i;
	flag = DeleteList(L,i,e);
	if(flag){
		cout << "删除成功!" << "删除后";
		PrintList(L);
	}
	else 
	  cout << "删除位置不合法!";
}
//按值查找
void Search_1(SqList &L){
	int e,a;
	cout << "请输入要查找的值:";
	cin >> e;
	a = Search1_List(L,e);
	cout << e << "在顺序表L中的位置为:"<< a << endl;
} 
//按序查找
void Search_2(SqList &L){
	int i;
	cout << "请输入要查找的位置:\n";
	cin >> i;
	int j = Search2_List(L,i);
	cout << "顺序表L第" << i << "个位置上的元素为" << j; 
} 
int main(){
	SqList L;
	IniteList(L);
	Create(L);
	Insert(L);
	Delete(L);
	Search_1(L);
	Search_2(L);
	return 0;
}

编译器DEVC++:
编译结果:

在这里插入图片描述

总结

到此这篇关于C++顺序表的基本操作实现的文章就介绍到这了,更多相关C++顺序表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++顺序表的基本操作实现

本文链接: https://www.lsjlt.com/news/138788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++顺序表的基本操作实现
    目录1.顺序表的定义2.顺序表上基本操作的实现完整代码如下:总结1.顺序表的定义 线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相...
    99+
    2024-04-02
  • C语言实现顺序表的基本操作的示例详解
    目录一、认识顺序表1.线性表2.顺序表的概念及结构二、顺序表的基本操作(接口实现)1.初始化顺序表2.打印顺序表3.尾插4.尾删5.扩容6.头插7.头删8.任意位置插入9.任意位置删...
    99+
    2022-11-13
    C语言顺序表基本操作 C语言顺序表操作 C语言顺序表
  • C语言实现串的顺序存储表示与基本操作
    本文实例为大家分享了C语言实现串的顺序存储表示与基本操作代码,供大家参考,具体内容如下 1、串的三种存储表示 串,即:字符串。要注意的是,C语言中是没有字符串数据类型的,而将其作为一...
    99+
    2024-04-02
  • C语言实现顺序表的基本操作指南(注释很详细)
    目录创建一个结构体用于存放顺序表相关数据初始化顺序表插入元素先检查容量是否够用删除元素元素修改查找元素排序元素元素反转源码SeqList.ctest.cSeqList.h总结创建一个...
    99+
    2024-04-02
  • Java实现顺序表的操作
    本文实例为大家分享了Java实现顺序表的基本操作,供大家参考,具体内容如下 静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。 接口 package com.gith...
    99+
    2024-04-02
  • C语言怎么实现顺序表的操作
    这篇文章主要介绍了C语言怎么实现顺序表的操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现顺序表的操作文章都会有所收获,下面我们一起来看看吧。线性表线性表(linear list)是n个具有相同特...
    99+
    2023-06-30
  • C语言实现顺序表的全操作详解
    目录线性表顺序表顺序表接口实现1.顺序表初始化2.顺序表空间增容3.顺序表打印4.尾插数据5.尾删数据6.头插数据7.头删数据8.在pos下标处插入数据9.删除pos下标处数据10....
    99+
    2024-04-02
  • Java实现顺序表的操作详解
    目录一、顺序表是什么二、自定义异常空引用异常下标越界异常三、顺序表的方法顺序表的实现获取顺序表长度顺序表是否为空顺序表是否为满打印顺序表末尾新增元素指定位置新增元素判断是否包含某元素...
    99+
    2024-04-02
  • 如何使用Java实现顺序表的操作
    小编给大家分享一下如何使用Java实现顺序表的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟...
    99+
    2023-06-28
  • C++中顺序表操作的示例代码
    编写程序,实现顺序表的下列功能: 从键盘输入数据建立一个顺序表输出该顺序表往顺序表中插入数据从顺序表中删除数据给定数据,进行查找,给出查找成功和失败信息 C++代码: #includ...
    99+
    2022-11-13
    C++顺序表操作 C++ 顺序表
  • Java 3:顺序表的操作
    顺序表常见操作有插入、删除、查找、修改。一、插入:1.插入有头插、尾插、任意位置插入。在插入时要注意下标的取值在顺序表长度范围内。所以最好在插入之前进行扩容操作。2.在头插时要注意先将原数组的元素从后往前依次向后移动。因为如果从前往后开始移...
    99+
    2023-01-31
    顺序 操作 Java
  • C语言顺序表的基本结构与实现思路详解
    目录一、顺序表的概念与结构1、线性表的解释2、顺序表概念解释二、顺序表的思路及代码实现详解1.静态顺序表的实现2.动态顺序表思路及代码实现2.1 动态顺序表的整体思路2.2 定义结构...
    99+
    2023-02-13
    C语言顺序表 C语言顺序表的创建
  • C语言实现单链表的基本操作分享
    目录导语单链表单链表的特点定义初始化操作头插法尾插法删除第i个元素在第i个位置插入导语 无论是顺序存储结构还是链式存储结构,在内存中进行存放元素的时候,不仅需要存放该元素的相关信息,...
    99+
    2022-11-13
    C语言单链表基本操作 C语言单链表
  • C语言实现线性表的基本操作详解
    目录前言一、实训名称二、实训目的三、实训要求四、实现效果五、顺序存储代码实现六、链式存储代码实现前言 这里使用的工具是DEV C++ 可以借鉴一下 一、实训名称 线性表的基本操作 二...
    99+
    2024-04-02
  • ​​​​​​​C语言实现单链表基本操作方法
    目录存储结构基本功能头插法创建单链表尾插法创建单链表获取指定位置的元素在指定位置插入元素删除指定位置的元素获取单链表的长度合并两个非递减的单链表晴链表遍历打印单链表附上完整代码存储结...
    99+
    2024-04-02
  • C语言实现BST二叉排序树的基本操作
    本文实例为大家分享了C语言实现BST二叉排序树的基本操作代码,供大家参考,具体内容如下 BST-二叉排序树的几个基本操作。 头文件声明与函数定义 #include <std...
    99+
    2024-04-02
  • C++实现AVL树的基本操作指南
    目录AVL树的概念AVL树的插入AVL树的四种旋转右单旋左单旋左右双旋右左双旋查找其他接口析构函数拷贝构造拷贝赋值总结AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或...
    99+
    2024-04-02
  • Python实现双向链表基本操作
    双向链表的基本操作的实现,供大家参考,具体内容如下 在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Python来实现双向链表的如下操作。(用到的工...
    99+
    2024-04-02
  • C语言的顺序表怎么实现
    本文小编为大家详细介绍“C语言的顺序表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的顺序表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.线性表线性表(linear list)是n个具...
    99+
    2023-06-30
  • MySQL表的基本操作
    本篇内容主要讲解“MySQL表的基本操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL表的基本操作”吧! create table USER...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作