C++ 动态线性表的顺序存储结构(数组实现)

描述

主题: C++ 动态线性表的完整实现
功能: 程序运行后,用户自定义输入线性表的长度;分别实现动态链表的插入、删除、查找操作
提示: 如果需要进入下一步操作,输入错误的范围即可

代码

//主题:	C++ 动态线性表的完整实现
//功能:	程序运行后,用户自定义输入线性表的长度
//		分别实现动态链表的插入、删除、查找操作
//提示:	如果需要进入下一步操作,输入错误的范围即可

#include
#include
#include

int SizeInput;//用户输入的长度

typedef struct DynamicSequenceList
{
	int *data = 0;//元素:初值0
	int length = 0;//当前长度
}SeqList;

//插入:在顺序表L的第i个位置插入新元素e
bool ListInsert(SeqList &L, int i, int e)
{
	if (i<1 || i>L.length + 1)
	{
		std::cout << "位置超出范围\n";
		return false;
	}
	if (L.length >= SizeInput)
	{
		std::cout << "链表已满\n";
		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;
}

//删除:删除顺序表L中第i个位置的元素,被删除的元素由e返回
bool ListDelete(SeqList &L, int i, int e)
{
	if (i<1 || i>L.length)
	{
		std::cout << "位置超出范围\n";
		return false;
	}
	e = L.data[i - 1];
	for (int j = i; j < L.length; j++)
	{
		L.data[j - 1] = L.data[j];//前移
	}
	L.length--;
	return true;
}

//查找:查找值为e的元素,如果查找成功,返回元素位序,否则返回0
int LocateElem(SeqList L, int e)
{
	int i;
	for (i = 0; i < L.length; i++)
	{
		if (L.data[i] == e)
		{
			return i + 1;
		}
	}
	return 0;
}


int main()
{
	SeqList DynamicList;

	//用户自定义线性表长度
	std::cout << "请输入线性表长度:";
	std::cin >> SizeInput;
	//DynamicList.data = (int*)malloc(sizeof(int) * SizeInput);	//C
	DynamicList.data = new int[SizeInput];						//C++
	std::cout << "成功创建动态线性表\n\n";

	int e;//元素
	int i;//位置
	bool checker = true;

	//插入
	for (; checker != false;)
	{
		std::cout << "\n(总长度:" << SizeInput << "当前长度:" << DynamicList.length << ")\n请输入:位置 元素 ";
		std::cin >> i >> e;

		//ListInsert(DynamicList, i, e);//输入错误不退出
		checker = ListInsert(DynamicList, i, e);//输入错误则退出

		//打印
		std::cout << std::endl;
		for (int print = 0; print < DynamicList.length; print++)
		{
			std::cout << DynamicList.data[print] << " ";
		}
	}

	//删除
	std::cout << "进入删除操作\n";
	for (checker = true; checker != false;)
	{
		std::cout << "\n(总长度:" << SizeInput << "当前长度:" << DynamicList.length << ")\n删除操作 请输入:位置";
		std::cin >> i;

		//ListInsert(DynamicList, i, e);//输入错误不退出
		checker = ListDelete(DynamicList, i, e);//输入错误则退出

		//打印
		std::cout << std::endl;
		for (int print = 0; print < DynamicList.length; print++)
		{
			std::cout << DynamicList.data[print] << " ";
		}
	}


	//查找
	std::cout << "进入查找操作\n";
	int ret;
	for (ret = -1; ret != 0;)
	{
		std::cout << "\n(总长度:" << SizeInput << "当前长度:" << DynamicList.length << ")\n查找操作 请输入:元素";
		std::cin >> e;

		//ListInsert(DynamicList, i, e);//输入错误不退出
		ret = LocateElem(DynamicList, e);//输入错误则退出

		//打印
		std::cout << "你要查找的元素在第" << ret << "个\n";
	}
	system("pause");
}

你可能感兴趣的:(C++笔记)