算法编程之顺序表头插法

int New_size(sequencelist *s)     //为顺序表开辟一块更大的空间
{
	if(s == NULL)
	{
		return FALSE;
	}
	int new_size = sizeof(int) / sizeof(char)*(SIZE_LIST + NEW_SIZE);   //开辟新空间关键代码
	int *tmp = (int *)realloc(s->list,new_size);
	if(tmp == NULL)            	//判断空间是否开辟成功
	{
		return FALSE;
	}
	s->list = tmp;             //开辟新空间里存了多少值
	s->MAX_len += NEW_SIZE;    //开辟新的空间的最大长度
	
	return TRUE;
}


int Head_insert(sequencelist *s,int date)    //头插法
{
	if(s == NULL)
	{
		return FALSE;
	}
	if(s->len == s->MAX_len)    //判断原来的空间是否占满,占满了就要再开辟一块空间
	{
		New_size(s);   //调用New_size函数开辟新的空间
		if(s == TRUE)    //判断新空间是否开辟成功
		{
			return FALSE;
		}
	}
	int i;
	for(i = s->len - 1;i >= 0; i--)    //头插法关键代码
	{
		s->list[i+1] = s->list[i];
	}
	s->list[0] = date;
	
	return TRUE;
}

总结:
1、	首先我们要知道头插法怎么插,我们要先判断这个顺序链表是否还有空间来存我们要插的元素,如果没有,那么我们就要再新开辟一块空间来存储它。
2、	我们新开辟一块空间用的是realloc函数,这个函数是先看你需要分配多少内存,然后再判断你原空间后面是否有这么大的空间,如果有,那么它会直接在你的原空间后面加上你要得这么多空间,如果不够,那么它会在堆里面重新找一块内存分配原来空间加你要新开辟空间大小,然后再释放掉原来空间。
3、	然后头插法关键思想就是,在内存空间够用的情况下,把空间里的值一个一个地往后移一个位置,把首地址里存的元素空出来,然后把你要插入的元素赋给首地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值