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、 然后头插法关键思想就是,在内存空间够用的情况下,把空间里的值一个一个地往后移一个位置,把首地址里存的元素空出来,然后把你要插入的元素赋给首地址。
算法编程之顺序表头插法
最新推荐文章于 2024-08-20 14:11:50 发布