//seqlist.h
#define _seqlist_h_
#define INT_SIZE 100
#define INCRESS_SIZE 20
#define true 0
#define false -1
typedef int seqdata;
typedef struct _seqlist
{
seqdata *list;
int max_len;
int len;
}seqlist;
// 创建顺序表
seqlist *create_list();
// 插入数据:头插法
int insert_head(seqlist*s,seqdata data);
#endif
//seqlist.c
#incldue<stdio.h>
#include"seqlist.h"
int againmalloc(seqlist *s)
{
if(s == NULL)
return false;
int NEW_SIZE = sizeof(seqdata)/sizeof(char)*(INT_SIZE + NEW_SIZE);
int *tmp = (int *)realloc(s->list,NEW_SIZE);
s->list = tmp;
s->max_len += INCRESS_SIZE;
return true;
}
int insert_head(seqlist*s,seqdata data)
{
if(s == NULL)
return false;
if(againmalloc(s) != true)
{
return false;
}
//检查顺序表是否装满
if (s->len == s->max_len)
{
if(againmalloc(s) != true)
{
return false;
}
}
//进行移位
int i;
for(i = s->len-1;i >= 0;i--)
{
s->list[i+1] = s->list[i];
}
s->list[0] = data;
s->len++;
return true;
}
//main.c
#include <stdio.h>
#include "seqlist.h"
int main()
{
seqlist *s = create_list();
if(s == NULL)
{
printf("创建失败了\n\n");
return ;
}
printf("\n创建成功了\n");
int i;
for(i = 0;i < 20;i++)
{
insert_head(s,i);
}
insert_head(s,5);//头插入数据
display(s);
printf("\n");
return 0;
void display(seqlist *s)
{
if (s == NULL)
return;
int i;
for(i = 0;i < s->len;i++)
{
if(i % 4 == 0)
printf("\n");
printf("%8d",s->list[i]);
}
printf("\n");
}