动态顺序存储结构
//动态存储结构
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100//当前所拥有的空间
#define LISTINCREMENT 10//每次新开辟的空间
#define OVERFLOW -2
typedef struct {
int *elem;
int length;
int listsize;
}Sqlist;
void Initlist_sq1(Sqlist* l)//初始化
{
l->elem = (int*)malloc((LIST_INIT_SIZE)*sizeof(int));//开辟空间
if (l->elem == NULL)exit(OVERFLOW);
l->length = 0;
l->listsize = LIST_INIT_SIZE;
return ;
}
void Initlist_sq(Sqlist* l, int i, int a)//在i位置前插入a
{
if (i < 1 || i>l->length + 1)return ;
else if (l->length >= l->listsize)
{
int* newbase;
newbase = (int*)realloc(l->elem, (l->listsize + LISTINCREMENT)*sizeof(int));//空间满了,新开辟一个空间
if (newbase == NULL)return ;
l->elem = newbase;
l->listsize += LISTINCREMENT;
int* q = &l->elem[i - 1];
int* p=NULL;
for (p = &l->elem[l->length - 1]; p >= q; p--)
{
*(p + 1) = *p;
}
*q = a;
l->length++;
return ;
}
}
int main(void) {
Sqlist p;
Initlist_sq1(&p);
for (int i = 1; i <= 100; i++)
{
p.elem[i - 1] = i;
p.length = i;
}
Initlist_sq(&p, 77, 66666);
for (int i = 0; i <101; i++)
printf("%d\n", p.elem[i]);
return 0;
}