线性表的定义和基本操作(C++)版

此处为线性表的基础定义和操作,方便大家一起来学习和探讨。

话不多说,直接上代码。

#include<iostream>
using namespace std;


#define InitSize 10


struct SeqList {
	int* data;//数据数组
	int MaxSize;//最大容量
	int Length;//当前数据长度
};

void InitList(SeqList& L)//初始化
{
	L.data = new int[ InitSize ];//申请一片区域,默认最大长度为10
	L.MaxSize = InitSize;//默认最大容量为10
	L.Length = 0;//默认当前无数据
}


void IncreaseSize(SeqList& L, int Len)//Len为需要扩充的容量大小
{
	int* p = L.data;//创造一个新指针指向老数据
	L.data = new int[Len+L.MaxSize];//L的指针指向扩充后的区域
	for (int i = 0; i < L.Length; i++) L.data[i] = p[i];//将数据进行迁移
	L.MaxSize = Len + L.MaxSize;//重新设置最大容量
	delete[] p;//删除老数据区域
	p = NULL;//确保指针不会乱指
}


bool IsFull(SeqList L)//判断容量是否已满
{
	return L.Length == L.MaxSize;
}


bool IsEmpty(SeqList L)//判断容量是否为空
{
	return L.Length == 0;
}


int RestPlace(SeqList L)//返回剩余容量
{
	return L.MaxSize - L.Length;
}


int GetData(SeqList L, int i)//查找要求位置的数据并返回
{
	if (IsEmpty(L))//判断数组是否为空
	{
		cout << "空数组,查找失败" << endl;//悲报
		return;//退出
	}
	if (i<0 || i>L.MaxSize)//判断要求位置是否正确
	{
		cout << "要求位置错误,查找失败" << endl;//悲报
		return;//退出
	}
	return L.data[i - 1];//注意数组从下标0开始存储,所以是i-1
}


int LocateData(SeqList L, int e)//查找第一个元素为e的为序
{
	for (int i = 0; i < L.MaxSize; i++)//遍历数组查询
	{
		if (e == L.data[i])//判断元素是否相同
		{
			return i+1;//相同则返回对应位置
		}
	}
	cout << "无要求元素,查找失败" << endl;//悲报
}


void ListInsert(SeqList &L,int i,int e)//插入数据
{
	if (IsFull(L))//判断容量大小
	{
		cout << "满了,插入失败" << endl;//悲报
		return;//退出
	}
	if (i<0 || i>L.MaxSize)//判断要求插入位置是否正确
	{
		cout << "插入位置错误,插入失败" << endl;//悲报
		return;//退出
	}
	for (int j = L.MaxSize; j >= i; j--)//将指定位置之后的数据全向后移动一位
	{
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;//插入数据
	L.Length += 1;//当前数据个数加一
	cout << "插入成功" << endl;//喜报
}


void ListDelete(SeqList& L, int i, int& e)//删除指定位置的数据并赋值给e
{
	if (IsEmpty(L))//判断数组是否为空
	{
		cout << "空数组,删除失败" << endl;//悲报
		return;//退出
	}
	if (i<0 || i>L.MaxSize)//判断要求删除位置是否正确
	{
		cout << "删除位置错误,删除失败"<<endl;//悲报
		return;//退出
	}
	e = L.data[i - 1];//将删除的数据赋值给e
	for (int j = i; j < L.MaxSize; j++) L.data[j - 1] = L.data[j];//将指定位置之后的数据向前移动一位
	L.Length--;//更新数据个数
	cout << "删除成功" << endl;//喜报
}

欢迎大家批评指正,我将虚心请教。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值