数据结构——线性表及其顺序存储

一、线性表

线性表是n个具有相同特性的数据元素的有限序列。

二、顺序表

顺序表:线性表采用顺序存储的方式存储。

顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

1、顺序表头

#define MAX 1000
typedef int datatype;
struct Seq_list
{
	datatype arr[MAX];
	int length;
};

初看到顺序表,相信很多人跟我一样觉得就是数组。但是可以从表头看出,顺序表区别于数组的地方,就是length。这个参数可以记录顺序表的真实长度,给我们带来很大便利。

2、顺序表置空

void init(Seq_list *slt)
{
	slt->length=0;
}

3、顺序表尾部添加一个x

void add(Seq_list *slt,datatype x)
{
	if(slt->length==MAX)
	{
		cout<<"顺序表已满!"<<endl;
		return;
	}
	slt->arr[slt->length]=x;
	slt->length+=1;
}

4、顺序表打印

void print(Seq_list slt)
{
	if(slt.length==0) cout<<"顺序表为空!\n";
	else 
		for(int i=0;i<slt.length;i++)
			printf("%5d",slt.arr[i]);
}

5、判断顺序表是否为空

bool empty(Seq_list slt)
{
	return slt.length==0?1:0;
}
//为空返回1,否则返回0

6、查找顺序表中值为x的结点位置

int find(Seq_list slt,datatype x)
{
	int i=0;
	while(i<slt.length&&slt.arr[i]!=x) i++;
	return i<slt.length?i:-1;
	//找到返回位置i;找不到返回-1 
}

7、取出顺序表第i个数

int get(Seq_list slt,int i)
{
	if(i<0||i>slt.length) 
	{
		cout<<"越界!"<<endl;
		exit(1);
	}
	else return slt.arr[i];
} 

8、在顺序表的position处插入x

void insert(Seq_list *slt,datatype x,int position)
{
	if(position<0||position>slt->length)
	{
		cout<<"越界!"<<endl;
		exit(1);
	}
	if(slt->length==MAX)
	{
		cout<<"顺序表已满,无法插入!"<<endl;
		exit(1);
	}
	for(int i=slt->length;i>position;i--) slt->arr[i]=slt->arr[i-1];
	slt->arr[position]=x;
	slt->length++;
}

9、删除顺序表的第position个数

void delet(Seq_list *slt,int position)
{
	if(slt->length==0)
	{
		cout<<"顺序表为空!"<<endl;
		exit(1);
	}
	if(position<0||position>slt->length)
	{
		cout<<"越界!"<<endl;
		exit(1);
	}
	for(int i=position;i<slt->length-1;i++)
		slt->arr[i]=slt->arr[i+1];
	slt->length--;
}

三、顺序栈

       在上面我们可以看出,顺序表其实就是把一个数组的大小表示出来了,而对于栈,我们只需要用top表示栈顶。

对栈的操作一般有初始化、判断是否为空、取得栈顶元素、删除、插入。

       栈是一种特殊的数据结构,它遵循后进先出的原则,所以插入和删除都是对于栈顶元素而言。

四、队列

       队列则是要求先进先出。但是顺序队列可用性太差,不提。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值