线性表 順序储存结构

线性表 順序储存结构

定义

线性表简称表,是具有相同类型的数据结构元素的有限序列,线性表中数据元素个数成为线性表的长度。

顺序表

由于线性表中每个数据的类型相同,通常用一维数组来实现顺序表,也就是把线性表中相邻的元素存储在数组中相邻的位置,从而导致了数据元素的序号和存放它的数组的下标一 一对应关系。

注意:
  1. 数组的长度是一个确定的长度,而线性表的长度是一个不确定的值(要完成 插入、删除等操作),因此数组长度MaxSize一般大于线性表的Length。
  2. 因为数组的编号是从0开始,而线性表的序号是从1开始的。所以ai = a[i + 1]
  3. 令线性表的序号从0开始可以使得线性表的序号与数组的下标相同
  4. 将数组的首位浪费,即从数组的1号单元开始存储数据元素,使得数组的下标与线性表的序号相同。
  5. 讨论地址时问题时,一般选定一个参考存储单元作为基准单元(也称为基准地址),所涉及地址均以此基地址为基准,称这种地址为相对地址(或者是偏移地址)。
顺序表的实现
const int MaxSize = 100;
template <class DataType>
class Seqlist 
{
public:
	SeqList (){length = 0}
	SeqList {DataType a[],int n};
	~SeqList (){ }
	int Length(){return length;}
	DataType Get (int i);
	int Locate(DataType x);
	void Insert(int i, DataType x);
	DataType Delete (int i);
	void printList ();
private:
	DataType data[MaxSize];
	int length;
}

顺序表的构造也极其简单:

template <class DataType>
SeqList <DataType>::SeqList(DataType a[],int n)
{
	if (n > MaxSize)
		throw "参数非法"for(i = 0; i < n; i++)
	{
		data[i] = a[i];
	}
		length = n;
}

顺序表的操作较为简单就不一一举例了
提一下插入与删除吧

插入
template <class DataType>
void SeqList <DataType> :: Insert(int i, DataType x)
{
	if (length >= MaxSize)
		throw "上溢";
	if (i < 1 || i > length + 1)
		throw "位置";
	for (j = length; j >= i; j--)
	{
		data[j] = data[j - 1];
	}
	data[i - 1] = x;
	length++;
}

删除
template <class DataType>
void SeqList <DataType> :: Delete(int i)
{
	if (length = 0)
		throw "下溢";
	if (i <= 1 || i > length)
		throw "位置";
	x = data [i - 1];
	for (j = i; j < length; j++)
	{
		data[j - 1] = data[j];
	}
	length--;
	return x;
}

进一步了解算法可以关注微信公众号:南瓜算法
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值