数据结构之顺序表

开始学习数据结构,刚开始学没有一个整体的概念,学一点写一点吧!
第一次更新

链表之顺序表

首先我们应该定义一个顺序表
如果顺序表的元素只是数字的话,未免太单调了一些!
所以,先定义一个数据类型来吧!!!

typedef struct
{
	int id;
	char *name;//字符型指针,如果不太明白,请自行百度
} ElementType;

于是我们得到了一个叫做ElementTtype的的数据类型,接下来开始定义顺序表

typedef struct 
{
	ElementType data[MAX_SIZE];
	int length;//为了以后便于操作,我们加入一个length
}SeqList;

我们得到了一个顺序表,接下来我们写一些方法来对这个顺序表进行操作
最基础的操作应该是插入操作,而不是初始化操作。
对整个链表进行统一的相同的操作叫做初始化。嗯,应该是这样的!
先上代码,再解释

插入算法

void InsertElement(SeqList *seqlist, int index, ElementType element)
{

	if (seqlist->length + 1 >= MAX_SIZE)
	{
		printf("inster fail ,plese try again");
	}
	else if(index<0||index>MAX_SIZE-1)
	{
		printf("the index is unavailble!");
	}
	else
	{
		ElementType tem;//临时变量
		
		for ( int i = seqlist->length; i >= index;i--)
		{
			seqlist->data[i + 1] = seqlist->data[i];
		}
		seqlist->data[index] = element;
		seqlist->length++;

	}
}

我们如何写一个方法?

从以下几个角度考虑

我们需要传入什么?

我们要对链表进行操作,当然需要传入待插入操作的链表,我们需要插入元素,当然需要传入一个与链表数据类型相同的数据元素,此外这个链表很长,我们不知道向那个位置插入,这时候就需要传入对应操作的位置(这就是索引)

我们返回什么?

对于返回值来说,我们的操作的结果是改变这个链表,当然可以返回这个插入后的链表,但是我们从各个方面综合考虑来看,使用指针直接对原数据经行操作会更好

那么我们如何利用传入得到传出?

1.我们应该对传入的索引进行验证,以免发生越界的情况
索引是从0开始的,传入的索引不能超过链表的最大长度MAX_SIZE,于是index<MAX_SIZE-1,那么index肯定要>0
2.对链表的长度也是需要验证的
链表的长度不能超过链表的最大长度的
链表的长度也不能等于链表的最大长度
3.如果上述的验证都通过那么,我们可以大胆放心的进行插入操作了
所谓插入操作不过是对数据元素进行重新排序而以
我们知道进行完插入操作之后,链表的长度肯定是要加1的
现在有两个思路
第一个是,我们先把我么需要插入的元素放到索引在的位置上,然后把该位置的元素以此后移一个单位
第二个是,我们从后向前来,把最后一个元素后移一个单位,然后依次进行,那么到索引在的位置的时候,我们直接经行插入
这样的话我们的插入方法应该就算是写完了
接下来是初始化算法

初始化算法

void InitList(SeqList *seqlist, ElementType * element, int length)
{
	if (length >= MAX_SIZE)
	{
		printf("the length more lenth than maxsize");
	}
	
	else
	{
		seqlist->length = 0;
		for ( int i = 0; i < length; i++)
		{
			InsertElement(seqlist, i, element[i]);
		}
	}
}

对于传入的元素依次进行插入算法就ok了,不过注意传入数据的长度和MAX_SIZE的关系
具体的思路参考上面的插入算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值