线性表的顺序存储用c语言实现,线性表顺序存储(c实现)

#include

#include

#include

#include "seqlist.h"

typedef struct tag_SeqList

{

int length;

int capacity;

unsigned int *node;

}TSeqList;

SeqList* SeqList_Create(int capacity)

{

TSeqList *tlist = NULL;

if(capacity < 0 )

{

return NULL;

}

tlist = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(unsigned int)* capacity);

if(tlist == NULL)

{

return NULL;

}

memset(tlist, 0, sizeof(TSeqList) + sizeof(unsigned int)* capacity);

tlist->node = (unsigned int*)(tlist+1);

tlist->length = 0;

tlist->capacity = capacity;

return tlist;

}

void SeqList_Clear(SeqList* slist)

{

if(slist == NULL)

{

return;

}

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

tlist->length = 0;

return ;

}

void SeqList_Destroy(SeqList* slist)

{

if(slist != NULL)

{

free(slist);

}

return ;

}

int SeqList_Length(SeqList* slist)

{

if(slist == NULL)

{

return -1;

}

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

return tlist->length;

}

int SeqList_Capacity(SeqList* slist)

{

if(slist == NULL)

{

return -1;

}

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

return tlist->capacity;

}

int SeqList_Insert(SeqList* slist, int pos, SeqLinkNode* node)

{

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

if(slist == NULL || node == NULL)

{

return -1;

}

if(pos<0 || pos >= tlist->capacity)

{

return -2;

}

if(tlist->length >= tlist->capacity)

{

return -3;

}

if(pos >= tlist->length)

{

pos = tlist->length;

}

int i;

for(i = tlist->length; i > pos; i--)

{

tlist->node[i] = tlist->node[i-1];

}

tlist->node[pos] = (unsigned int)node;

tlist->length++;

return 0;

}

SeqLinkNode* SeqList_Get(SeqList* slist, int pos)

{

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

if(slist == NULL || pos < 0 || pos >= tlist->length)

{

return NULL;

}

SeqLinkNode* ret = NULL;

ret = (SeqLinkNode*)(tlist->node[pos]);

return ret;

}

SeqLinkNode* SeqList_Delete(SeqList* slist, int pos)

{

TSeqList *tlist = NULL;

tlist =  (TSeqList*)slist;

if(slist == NULL || pos < 0 || pos >= tlist->length)

{

return NULL;

}

SeqLinkNode* ret = NULL;

ret = (SeqLinkNode*)(tlist->node[pos]);

int i;

for(i = pos+1; i < tlist->length; i++)

{

tlist->node[i-1] = tlist->node[i];

}

tlist->length--;

return ret;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值