线性表::零个或者多个数据元素的有限序列。
线性表的顺序的存储结构指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的存储的结构代码:.h文件中
typedef void SeqList; //顺序表
typedef void SeqListNode; //顺序表的元素
SeqList * SeqList_Creat(int capacity); //创建大小为capacity大小的顺序表
void SeqList_Destory(SeqList *list); //释放顺序表
void SeqList_Clear(SeqList *list); //清空顺序表
int SeqList_Length(SeqList *list); //得到线性表的长度
int SeqList_Capacity(SeqList *list); //返回线性表的容量大小
int SeqList_Insert(SeqList *list, int pos,SeqListNode * node);//插入线性表
SeqListNode * SeqList_Delet(SeqList *list,int pos); //删除一个顺序表的元素
SeqListNode * SeqList_Get(SeqList *list,int pos); //得到一个顺序表的元素
在.c文件中
typedef unsigned int TseqListNode; //创建数据类型
typedef struct _tag_SeqList
{
int capacity; //线性表的容量
int length; //线性表的长度 长度和容量是不一样的 length<=capacity
TseqListNode * node; //数据指针
}TseqList;
SeqList * SeqList_Creat(int capacity) //创建一个线性表
{
TseqList *ret=NULL;
if(capacity >0)
ret = (TseqList*)malloc(sizeof(TseqList)+sizeof(TseqListNode)*capacity); //动态分配内存
if(ret != NULL)
{
ret->capacity=capacity;
ret->length=0;
ret->node = (TseqListNode *)(ret+1); //指向后面的地址
}
return ret;
}
void SeqList_Destory(SeqList *list)
{
free(list);
}
void SeqList_Clear(SeqList *list)
{
TseqList * slist = TseqList *(list);
if(slist != NULL)
slist->length=0;
}
int SeqList_Length(SeqList *list)
{
TseqList * slist = TseqList *(list);
int len;
if(slist != NULL)
len= slist->length;
return len;
}
int SeqList_Capacity(SeqList *list)
{
TseqList * slist = TseqList *(list);
int cap;
if(slist != NULL)
cap= slist->capacity;
return cap;
}
int SeqList_Insert(SeqList *list, int pos,SeqListNode * node) //插入从线性表的最后一个元素向前移动
{
TseqList * slist = TseqList *(list);
int ret = (slist!=NULL);
int i=0;
//判断合法性
ret= ret && (slist->length+1<slist->capacity)&&(0<pos);
if(ret)
{
if(pos>slist->length)
pos=slist->length; //放到线性表的最后
for(i=slist->length;i>pos;i--)
{
slist->node[i]=slist->node[i-1]; //pos后面依次移动一位
}
slist->node[i]=(TseqListNode)node;
slist->length++; //长度加一
}
return ret;
}
SeqListNode * SeqList_Get(SeqList *list,int pos) //得到顺序表的一个元素
{
TseqList * slist = TseqList *(list);
SeqListNode* ret=NULL;
if((slist!=NULL)&&(pos>=0)&&(pos<slist->length))
{
ret = (TseqListNode*)(slist->node[pos]); //这里是强制装换
}
return ret;
}
SeqListNode * SeqList_Delet(SeqList *list,int pos) //删除一个元素 从该元素到最后一个元素位置 依次移动一位
{
TseqList * slist = TseqList *(list);
SeqListNode* ret = SeqList_Get(list,pos);
int i=0;
if(ret !=NULL)
{
for(i=pos+1;i<slist->length;i++)
slist->node[i-1]=slist->node[i];
slist->length--;
}
return ret;
}
主函数
int main()
{
SeqList *list = SeqList_Creat(5);
int i=0;
int j=1;
int k=2;
int x=3;
int y=4;
int z=5;
int c=0;
SeqList_Insert(list,&i,0);
SeqList_Insert(list,&j,0);
SeqList_Insert(list,&k,0);
SeqList_Insert(list,&x,0);
SeqList_Insert(list,&y,0);
SeqList_Insert(list,&z,0);
for(c=0;c<SeqList_Length(list);c++)
{
int *p=(int*)SeqList_Get(list,c);
printf("%d\n",*p);
}
}