C++实现顺序表

本文详细介绍了如何使用C++实现顺序表的基本操作,包括初始化、创建、插入、删除、查找、取值、清空、长度判断、打印等,适合初学者理解数据结构基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++实现顺序表中的基本操作:

1、顺序表的初始化
2、顺序表的创建
3、顺序表的插入
4、顺序表的删除
5、顺序表的查找
6、顺序表的取值
7、顺序表的清空
8、顺序表的长度
9、顺序表的判空
10、顺序表的打印

/*
Project: sequence_list(数据结构-顺序表)
Date: 2021/11/15
InitList(SqList &L) 参数:顺序表L 功能:初始化 时间复杂度:O(1)
CreateList(SqList &L,int n) 参数:顺序表L,顺序表长度n 功能:创建长度为n的顺序表 时间复杂度:O(n)
InsertList(SqList &L,int i,ElemType e) 参数:顺序表L,位置i,元素e 功能:位置i处插入元素e 时间复杂度:O(n)
DeleteList(SqList &L,int i) 参数:顺序表L,位置i 功能:删除位置i处元素 时间复杂度:O(n)
LocateDate(SqList L,ElemType e) 参数:顺序表L,元素e 功能:返回第一个等于e的元素的位置 时间复杂度:O(n)
GetData(SqList L, int i, ElemType &e) 参数:顺序表L,位置i,元素e 功能:取得i处的元素e 时间复杂度:O(1)
ClearList(SqList &L) 参数:顺序表L 功能:清空顺序表
GetLength(SqList L) 参数:顺序表L 功能:求顺序表的长度
IsEmpty(SqList L) 参数:顺序表L 功能:判断顺序表是否为空
PrintList(SqList L) 参数:顺序表L 功能:遍历并输出顺序表
*/

#include<iostream>
#define Maxsize 100
#define ElemType char//ElemType 可根据需求自行定义
using namespace std;

//顺序表数据结构
typedef struct
{
	/*ElemType是数据结构的书上为了说明问题而用的一个词。它是element type(“元素的类型”)的简化体。*/
	ElemType *data;//顺序表元素
	int length;//顺讯表当前长度
}SqList;

//*******************************基本操作函数******************************

//顺序表的初始化,创建一个空的顺序表
int Initlist(SqList &L)
{
	L.data = new ElemType[Maxsize];//为顺序表分配一个大小为Maxsize的数组空间
	if (!L.data)
		exit(OVERFLOW);//存储空间分配失败
	L.length = 0;//空表长度为0
	return 0;
}

//顺序表的创建,创建一个长度为n的顺序表
bool CreateList(SqList& L, int n)
{
	if (n<0 || n>Maxsize)
	{
		return false;
	}
	else
		for (int i = 0; i < n; i++)
		{
			cout << "请输入第" << i+1 << "个元素:" << endl;
			cin >> L.data[i];
			L.length++;
		}
	return true;
}

//顺序表的插入,第i个位置插入新元素e
bool InsertList(SqList& L, int i, ElemType e)
{
	if (i<1 || i>L.length + 1)
	{
		return false;//插入位置不合法
	}
	if (L.length == Maxsize)
	{
		return false;//当前存储空间已满
	}
	for (int j = L.length; j >= i; j--)
	{
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;
	L.length++;
	return true;
}

//顺序表的删除,删除第i个元素
bool DeleteList(SqList& L,int i)
{
	if (i<1 || i>L.length)
	{
		return false;//删除位置不合法
	}
	for (int j = i; j < L.length; j++)
	{
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;
}

//顺序表的查找,按值查找
int LocateData(SqList L, ElemType e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.data[i] == e)
		{
			return i + 1;//查找成功,返回其序号
		}
	}
	return 0;
}

//顺序表的取值,取得第i个元素的值
bool GetData(SqList L, int i, ElemType &e)
{
	if (i<1 || i>L.length)
	{
		return false;
	}
	else
	{
		e = L.data[i - 1];
		return true;
	}
}

//*********************************功能函数********************************

//1、 顺序表的创建函数
void Create(SqList& L)
{
	int n;
	bool flag;
	cout << "请输入要创建的顺序表长度:" << endl;
	while (1)
	{
		cin >> n;
		flag = CreateList(L, n);
		if (flag)
		{
			cout << "顺序表创建成功!" << endl;
			break;
		}
		else
		{
			cout << "顺序表创建失败!" << endl;
			cout << "请重新输入要创建数据表的长度:" << endl;
		}
	}
	
}

//2、顺序表的插入函数
void Insert(SqList& L)
{
	int place;
	ElemType e;
	bool flag;
	cout << "请输入元素要插入的位置:" << endl;
	cin >> place;
	cout << "请输入元素要插入的元素:" << endl;
	cin >> e;
	flag = InsertList(L, place, e);
	if (flag)
	{
		cout << "顺序表插入成功!" << endl;
	}
	else
	{
		cout << "顺序表插入失败!" << endl;
	}
}

//3、顺序表的删除函数
void Delete(SqList& L)
{
	int place;
	bool flag;
	cout << "请输入要删除元素的位置:" << endl;

	cin >> place;
	flag = DeleteList(L, place);
	if (flag)
	{
		cout << "顺序表的元素删除成功!" << endl;
	}
	else
	{
		cout << "顺序表的元素删除失败!" << endl;
	}
}

//4、顺序表的查找函数
void Search(SqList L)
{
	ElemType e;
	int place;
	cout << "请输入要查找的值:" << endl;
	cin >> e;
	place = LocateData(L, e);
	if (place)
		cout << "该元素的位置为:" << place << endl;
	else
		cout << "没有找到该元素" << endl;
}

//5、顺序表的取值函数
void Get(SqList L)
{
	int place;
	ElemType e;
	bool flag;
	cout << "请输入要取元素的位置:" << endl;
	cin >> place;
	flag=GetData(L, place, e);
	if (flag)
	{
		cout << "取得的元素为:" << e << endl;
	}
	else
		cout << "取值失败!" << endl;
}

//6、顺序表的清空函数
void ClearList(SqList& L)
{
	L.length = 0;
}

//7、顺序表的求长函数
void GetLength(SqList L)
{
	cout << "顺序表的长度为:" << L.length << endl;
}

//8、顺序表的判空函数
void IsEmpty(SqList L)
{
	if (L.length == 0)
		cout << "顺序表为空" << endl;
	else
		cout << "顺序表不为空" << endl;
}

//9、打印输出当前顺序表的所有元素
void PrintList(SqList L)
{
	cout << "当前顺序表的所有元素分别为:" << endl;
	for (int i = 0; i < L.length; i++)
	{
		cout << "第" << i + 1 << "个元素为:" << L.data[i] << endl;
	}
}

//菜单
void menu()
{
	cout << "************************************************" << endl;
	cout << "*********************1、创建********************" << endl;
	cout << "*********************2、插入********************" << endl;
	cout << "*********************3、删除********************" << endl;
	cout << "*********************4、查找********************" << endl;
	cout << "*********************5、取值********************" << endl;
	cout << "*********************6、清空********************" << endl;
	cout << "*********************7、求长********************" << endl;
	cout << "*********************8、判空********************" << endl;
	cout << "*********************9、打印********************" << endl;
	cout << "*********************0、退出********************" << endl;
	cout << "************************************************" << endl;
}

int main()
{
	SqList L;
	Initlist(L);
	int select;
	while (1)
	{
		system("cls");//进行清屏操作
		menu();
		cout << "请输入菜单序号:" << endl;
		cin >> select;
		switch (select)
		{
		case 1:
			Create(L);//创建
			system("pause");//按任意键继续
			break;
		case 2:
			Insert(L);//插入
			system("pause");
			break;
		case 3:
			Delete(L);//删除
			system("pause");
			break;
		case 4:
			Search(L);//查找
			system("pause");
			break;
		case 5:
			Get(L);//取值
			system("pause");
			break;
		case 6:
			ClearList(L);//清空
			system("pause");
			break;
		case 7:
			GetLength(L);//求长
			system("pause");
			break;
		case 8:
			IsEmpty(L);//判空
			system("pause");
			break;
		case 9:
			PrintList(L);//打印
			system("pause");
			break;
		case 0:
			cout << "欢迎下次使用!" << endl;//退出
			system("pause");
			return 0;
			break;
		default:
			cout << "菜单序号输入有误!" << endl;
			system("pause");
			break;
		}
	}
	system("pause");
	return 0;
}

注意:ElemType 可根据需求自行定义,将其定义成合适的结构体形式,对以上代码稍作修改,便可以实现通讯录管理系统或图书信息管理系统的一些基本操作。
例如:图书信息管理系统可对ElemType进行如下定义。

typedef struct
{
    string number;//图书编号
	string name;//图书名字
	float price;//图书价格
}ElemType;

参考资料:
《数据结构》(C语言版)严蔚敏
数据结构-顺序表基本操作的实现(含全部代码)_lady_killer9的博客-优快云博客_数据结构顺序表代码

使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值