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

目录
  • 1.顺序表的定义
  • 2.顺序表上基本操作的实现
  • 完整代码如下:
  • 总结

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++顺序表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++实现数据结构的顺序表详解

    目录 前言: 代码 1.SeqList.h 2.SeqList.cpp 3.test.cpp 总结 前言: hello,大家好,这篇文章博主来分享一下C++实现数据结构中的顺序表的代码.希望对大家有所帮助. 在博主之前的文章中,已经详细地写过顺序表,读者可以点击查看C语言如何建立链表并实现增删查改,在之前的文章中,是用C语言来实现的,这篇文章中,我们用C++来实现. 代码 1.SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostr

  • C++实现顺序表的方法

    废话不多说了,直接给大家上关键代码了. #pragma once #include <assert.h> template<class T> class SeqList { public: SeqList() :_a(NULL) ,_size(1) ,_capacity(1) {} SeqList(T* a, size_t size) :_a(new T[size]) ,_size(size) ,_capacity(size) { for (size_t i = 0; i <

  • C++实现动态顺序表(vector)

    vector是连续存储结构,支持随机的高效的随机和在尾部进行插入.删除操作,其它位置的插入.删除操作相对来说效率较低. vector相当于一个数组,但它的数组空间大小需要写一程序来实现. 它的内存分配原理大概可分为下面几步: 1)首先分配一块内存空间进行存储: 2)当所需存储的数据超过分配的空间时,再重新分配一块空间: 3)将旧元素复制到新空间: 4)释放旧空间. 实现代码如下: vector.h #pragma once #include<stdio.h> #include<asser

  • C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include<iostream> using namespace std; #define MAXSIZE 15 typedef int DataType; typedef struct { DataType data[MAXSIZE]; //通常用一位数组来描述顺序表的数据存储 int SeqLength; /*线性表长度*/ } SeqList; SeqList *Init

  • 利用C++简单实现顺序表和单链表的示例代码

    本文主要给大家介绍了关于C++实现顺序表和单链表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 一.顺序表示例代码: #include <assert.h> #include <iostream> using namespace std; typedef int Datatype; class SeqList { public: SeqList() :_array(NULL) ,_size(0) ,_capacity(0) { } SeqList(const

  • C++顺序表实现图书管理系统

    本文为大家分享了C++顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下 图书信息表包括以下10项常用的基本操作:图书信息表的创建和输出.排序.修改.逆序存储.最贵图书的查找.最爱图书的查找.最佳位置图书的查找.新图书的入库.旧图书的出库.图书去重. 代码: #include<iostream> #include<iomanip> #include<string> using namespace std; //函数结果状态代码 #define OK 1 #def

  • C++超详细分析顺序表

    本次我们解剖顺序表将从以下三个结构: 1.静态顺序表和动态顺序表 2.顺序表实现增删查改等常见接口 3.顺序表相关OJ题练习 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储.在数组上完成数据的增删查改. 兄弟们兄弟们,记得抠字眼啊,顺序表一定是连续的存储单元,并且是依次存储数据的!!!! 顺序表一般可以分为: 静态顺序表      动态顺序表 静态顺序表:使用定长数组存储,简单来说大小是固定的,数据个数也是固定的! 动态顺序表:使用动态开辟

  • C++实现基于静态数组的顺序表

    本文实例为大家分享了C++实现基于静态数组的顺序表,供大家参考,具体内容如下 实现的基本操作有: 1. 初始化 2. 尾插 3. 尾删 4. 头插 5. 头删 6.查找任意元素 7. 读任意位置元素 8. 修改任意位置元素 9. 查找指定元素值的下标 10. 在任意位置插入元素 11.删除指定位置的元素 12.删除任意元素 13.打印数据 头文件seqlist.h: #pragma once #include<stdio.h> #include<stdlib.h> #include

  • C++实现动态顺序表

    本文实例为大家分享了C++实现动态顺序表的具体代码,供大家参考,具体内容如下 Vector.h #pragma once #include <stdio.h> #include <iostream> #include <assert.h> #include <string.h> using namespace std; typedef int DataType; class Vector { public: Vector() :_first(NULL) ,

  • C++顺序表的基本操作(使用模版类)

    本文实例为大家分享了C++顺序表的基本操作,供大家参考,具体内容如下 一.遇到问题: 原因:类的函数定义不能放在SeqList.cpp中,必须放在Seqlist.h(类的函数声明和定义放在同一个文件下)中,否则 会出现以下问题. 二.实现程序: 1.SeqList.h #ifndef SeqList_h #define SeqList_h #include <iostream> using namespace std; const int defaultSize = 100; template

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

    目录 1.顺序表的定义 2.顺序表上基本操作的实现 完整代码如下: 总结 1.顺序表的定义 线性表的顺序存储又称顺序表.它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻.第1个元素存储在线性表的起始位置,第i个元素的存储位置后面紧邻这存储的是第i+1个元素,称 i 为元素ai在线性表中的位序.因此,顺序表的特点是表中元素的逻辑顺序和物理顺序相同. 假定线性表中的元素类型为ElemType,则线性表的顺序存储为 #define ElemType

  • C语言实现顺序表的基本操作的示例详解

    目录 一.认识顺序表 1.线性表 2.顺序表的概念及结构 二.顺序表的基本操作(接口实现) 1.初始化顺序表 2.打印顺序表 3.尾插 4.尾删 5.扩容 6.头插 7.头删 8.任意位置插入 9.任意位置删除 10.查找某个数的位置 三.顺序表演示及代码(含源码) 1.演示效果 2.完整源代码 一.认识顺序表 1.线性表 线性表是n个具有相同特性的数据元素的有限序列,线性表是一种在实际中广泛使用的数据结构,常见的线性表有顺序表.链表.栈.队列.字符串……线性表在逻辑上是线性结构,也就是说是一条

  • c语言实现顺序表的基本操作

    数据结构顺序表操作 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100#define LISINCREMENT 10#define ElemType int#define Status inttypedef struct Sq{ ElemType *elem; int length; int listsize;}SqList;Statu

  • C语言动态顺序表实例代码

    目录 顺序表概念: 一.准备工作 二.顺序表的基本操作  1.顺序表的初始化函数 2.尾插函数(在尾部插入数据) 3.头插函数(在数组头部插入数据)  4.尾删函数 5.头删函数 6.在第pos的位置插入数据 7.删除第pos个位置的数据 8.修改第pos个位置的数据 9.查找函数. 10.销毁函数 11.打印函数 三.总代码: 顺序表概念:         顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构.一般情况下用数组存储.在数组上完成数据的增删查改. 代码解析: 一.准备工

  • 详解Python数据结构与算法中的顺序表

    目录 0. 学习目标 1. 线性表的顺序存储结构 1.1 顺序表基本概念 1.2 顺序表的优缺点 1.3 动态顺序表 2. 顺序表的实现 2.1 顺序表的初始化 2.2 获取顺序表长度 2.3 读取指定位置元素 2.4 查找指定元素 2.5 在指定位置插入新元素 2.6 删除指定位置元素 2.7 其它一些有用的操作 3. 顺序表应用 3.1 顺序表应用示例 3.2 利用顺序表基本操作实现复杂操作 0. 学习目标 线性表在计算机中的表示可以采用多种方法,采用不同存储方法的线性表也有着不同的名称和特

  • Java实现顺序表的操作

    本文实例为大家分享了Java实现顺序表的基本操作,供大家参考,具体内容如下 静态顺序表:使用定长数组存储.动态顺序表:使用动态开辟的数组存储. 接口 package com.github.sqlist; public interface ISequence {     // 在 pos 位置插入 val     boolean add(int pos, Object data);     // 查找关键字 key 找到返回 key 的下表,没有返回 -1     int search(Objec

  • C语言的线性表之顺序表你了解吗

    目录 线性表 —— 顺序表 (C语言) 1. 顺序表的储存结构 2. 顺序表的基本操作 2.1 顺序表的插入 2.2 顺序表的查找 2.3 顺序表的删除 总结 线性表 —— 顺序表 (C语言) 概念 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表中的数据元素,这种表示也称做线性表的顺序储存结构或顺序映像.通常,称这种存储结构的线性表为顺序表 (Sequential List) .其特点是,逻辑上相邻的数据元素,其物理次序也是相邻的. 1. 顺序表的储存结构 #include <st

  • C语言实现顺序表基本操作汇总

    本文汇总了C语言下实现及操作顺序表的方法,对于学习数据结构的朋友来说是一个不错的参考程序.完整代码如下: #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int status ;

随机推荐