线性表--顺序表的基本操作(对小白友好)

文章目录

  • 1.顺序表的定义
  • 2.顺序表的初始化
  • 3.存储元素
  • 4.插入元素
  • 5.删除元素
  • 6.改变元素
  • 7.查询全部元素
  • 8.增加顺序表容量
  • 9.顺序表长度
  • 10.顺序表的销毁
  • 11.源代码
  • 12.运行结果

  顺序表的概念这里不过多介绍,我们直接进入正题,上代码!!!

先是部分操作的代码,最后会有完整代码!

1.顺序表的定义

typedef struct {
	int *data;//动态分配
	int length; //当前个数
	int MaxSize;//最大容量
}SqList;

2.顺序表的初始化

#define InitSize 10
//初始化
void InitList(SqList &L) {
	L.data = (int*)malloc(sizeof(int) * InitSize);//用malloc申请一片空间
	L.length = 0;//顺序表长度为0
	L.MaxSize = InitSize;//初始化最大容量
}

3.存储元素

  给顺序表中放入元素。

//存储元素
void WriteList(SqList& L) {
	cout << "输入你要写的元素个数:";
	int length = 0;
	cin >> length;
	cout << "输入你要存放的元素:";
	for (int i = 0; i < length; ++i)
	{
		cin >> L.data[i];
		L.length++;
	}
}

  注意:每次放入一个元素都要保证顺序表的长度增加1。

4.插入元素

//插入元素
bool ListInsert(SqList& L, int i, int e)
{
	//判断i是否有效
	if (i<1 || i>L.length + 1)
	{
		return false;
	}
	//判断顺序表长度是否达到最大值
	if (L.length >= L.MaxSize)
	{
		return false;
	}
	//从插入的位置开始,所有元素后移一位
	for (int j = L.length; j >= i; --j)
	{
		L.data[j] = L.data[j-1];
	}
	L.data[i - 1] = e;
	//注意顺序表长度要增加1位
	L.length++;
	return true;
}

5.删除元素

//删除元素
bool ListDelte(SqList& L, int i, int& e)
{
	//判断i是否有效
	if (i<1 || i>L.length)
		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;
}

6.改变元素

//改变元素
bool ListChange(SqList& L, int i, int& e)
{
	//判断i是否有效
	if (i<1 || i>L.length)
		return false;
	L.data[i - 1] = e;
	return true;
}

7.查询全部元素

//查询全部元素
void PrintList(SqList L) {
	for (int i = 0; i < L.length; ++i)
	{
		cout << L.data[i] << " ";
	}
}

8.增加顺序表容量

  解释说明:顺序表都是一块连续的存储空间,要增大顺序表容量,我们需要新开辟一块比原有空间更大的连续空间,然后将原本的顺序表内容复制到新的顺序表中,这就是我们增加顺序表容量的思想。

//增加顺序表容量
void IncreaseSize(SqList& L) {
	int len;
	int* p = L.data;//p指针指向顺序表的首地址
	cout << "输入你要增加的顺序表长度";
	cin >> len;
	L.data = (int*)malloc(sizeof(int) * (len + L.MaxSize));//新申请一片空间
	for (int i = 0; i < L.length; ++i)
	{
		L.data[i] = p[i];
	}
	L.MaxSize = L.MaxSize + len;//顺序表最大容量增加
	free(p);//释放空间
}

9.顺序表长度

//求顺序表长度
int Length(SqList L)
{
	if (L.length == 0)
		return 0;
	return L.length;
}

10.顺序表的销毁

//顺序表的销毁
void DestoryList(SqList& L)
{
	L.length = 0;
	L.MaxSize = 0;
	free(L.data);
}

基本操作就是这些。

11.源代码

#include
using namespace std;

//静态顺序表
#define InitSize 10
typedef struct {
	int *data;
	int length; //当前个数
	int MaxSize;//最大容量
}SqList;

void menu()
{
	cout << "1.插入元素" << endl;
	cout << "2.删除元素" << endl;
	cout << "3.改变元素" << endl;
	cout << "4.查找元素" << endl;
	cout << "5.扩线性表长" << endl;
	cout << "6.求线性表长度" << endl;
	cout << "7.销毁线性表" << endl;
	cout << "0.exit" << endl;
}

//初始化
void InitList(SqList &L) {
	L.data = (int*)malloc(sizeof(int) * InitSize);
	L.length = 0;
	L.MaxSize = InitSize;
}

//存储元素
void WriteList(SqList& L) {
	cout << "输入你要写的元素个数:";
	int length = 0;
	cin >> length;
	cout << "输入你要存放的元素:";
	for (int i = 0; i < length; ++i)
	{
		cin >> L.data[i];
		L.length++;
	}
}

//插入元素
bool ListInsert(SqList& L, int i, int e)
{
	//判断i是否有效
	if (i<1 || i>L.length + 1)
	{
		return false;
	}
	//判断顺序表长度是否达到最大值
	if (L.length >= L.MaxSize)
	{
		return false;
	}
	//从插入的位置开始,所有元素后移一位
	for (int j = L.length; j >= i; --j)
	{
		L.data[j] = L.data[j-1];
	}
	L.data[i - 1] = e;
	//注意顺序表长度要增加1位
	L.length++;
	return true;
}

//删除元素
bool ListDelte(SqList& L, int i, int& e)
{
	//判断i是否有效
	if (i<1 || i>L.length)
		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;
}

//改变元素
bool ListChange(SqList& L, int i, int& e)
{
	//判断i是否有效
	if (i<1 || i>L.length)
		return false;
	L.data[i - 1] = e;
	return true;
}

//查询全部元素
void PrintList(SqList L) {
	for (int i = 0; i < L.length; ++i)
	{
		cout << L.data[i] << " ";
	}
}

//增加顺便表容量
void IncreaseSize(SqList& L) {
	int len;
	int* p = L.data;//p指针指向顺序表的首地址
	cout << "输入你要增加的顺序表长度";
	cin >> len;
	L.data = (int*)malloc(sizeof(int) * (len + L.MaxSize));//新申请一片空间
	for (int i = 0; i < L.length; ++i)
	{
		L.data[i] = p[i];
	}
	L.MaxSize = L.MaxSize + len;//顺序表最大容量增加
	free(p);//释放空间
}

//求线性表长度
int Length(SqList L)
{
	if (L.length == 0)
		return 0;
	return L.length;
}


//线性表的销毁
void DestoryList(SqList& L)
{
	L.length = 0;
	L.MaxSize = 0;
	free(L.data);
}

int main()
{
	int i = 0;
	int e = 0;

	int input = 0;
	SqList L;
	//初始化
	InitList(L);

	//写元素
	WriteList(L);

	menu();
	do {
		cout << "进行相应的操作:";
		cin >> input;
		switch (input) {
		case 1:
			cout << "请输入你要插入的位置:";
			cin >> i;
			cout << "请输入你要插入的元素:";
			cin >> e;
			ListInsert(L, i, e);
			break;
		case 2:
			cout << "请输入你要删除元素的位置:";
			cin >> i;
			ListDelte(L, i, e);
			break;
		case 3:
			cout << "请输入你要改变元素的位置:";
			cin >> i;
			cout << "请输入你要改变的元素:";
			cin >> e;
			ListChange(L, i, e);
			break;
		case 4:
			PrintList(L);
			cout << endl;
			break;
		case 5:
			IncreaseSize(L);
			break;
		case 6:
			cout << Length(L);
			break;
		case 7:
			DestoryList(L);
			cout << "销毁成功";
			break;
		case 0:
			cout << "exit";
			break;
		default:
			cout << "请重新输入:";
			break;
		}
	} while (input);
	return 0;
}

12.运行结果

线性表--顺序表的基本操作(对小白友好)_第1张图片
线性表--顺序表的基本操作(对小白友好)_第2张图片

对你有帮助,请点一个关注哟!!!

你可能感兴趣的:(数据结构,数据结构,算法)