#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct _tag_SeqList
{
int capacity;//容量
int length;//长度
int * node;//地址
}TSeqList;//创建头结点的元素
typedef void SeqList;//定义不返回类型的表
typedef void SeqListNode;
//创建顺序表
SeqList* SeqList_create(int capacity)
{
int ret;
TSeqList* temp = NULL;
temp = (TSeqList*)malloc(sizeof(TSeqList));//给头结点分配空间(动态分配)
if (temp == NULL)
{
ret = 1;
printf("func SeqList_create() error:%d\n", ret);
return NULL;
}
memset(temp, 0, sizeof(TSeqList));
temp->capacity = capacity;//为顺序表分配空间
temp->length = 0;
temp->node = (int*)malloc(sizeof(void*)*capacity);//分配一个指针数组
if (temp->node == NULL)
{
ret = 2;
printf("func SeqList_create() error:%d\n", ret);
return NULL;
}
return temp;
//求顺序表的容量
}int SeqList_Capacity(SeqList* list)
{
TSeqList * temp = NULL;
if (list == NULL)
{
return 0;
}
temp = (TSeqList *)list;
return temp->capacity;
}
//获取顺序表的长度
int SeqList_Length(SeqList* list)
{
TSeqList * temp = NULL;
if (list == NULL)
{
return ;
}
temp = (TSeqList *)list;
return temp->length;
}
//插入元素
int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)
{
int i;
TSeqList * temp = NULL;
if (list == NULL || node == NULL)
{
return -1;
}
temp = (TSeqList *)list;
if (temp->length >= temp->capacity)
{
return -2;
}
if (pos > temp->length)
pos = temp->capacity;
for (i = temp->length;i > pos;i--)
{
temp->node[i] = temp->node[i - 1];
}
temp->node[i] = (int)node;
temp->length++;
return 0;
}
//删除元素
SeqList* SeqList_delete(SeqList* list, int pos)
{
int i;
TSeqList *tlist = NULL;
SeqListNode *temp = NULL;
tlist = (TSeqList *)list;
if (list == NULL || pos<0 || pos>tlist->capacity)
{
printf("Seqlist_delete()erroror\n");
return NULL;
}
temp = (SeqListNode *)tlist->node[pos];
for (i = pos + 1;i < tlist->length;i++)
{
tlist->node[i - 1] = tlist->node[i];
}
tlist->length--;
}
//查找元素
SeqList* SeqList_Get(SeqList* list,int pos)
{
TSeqList *tlist = NULL;
SeqListNode * temp = NULL;
tlist = (TSeqList *)list;
if (list == NULL || pos<0 || pos>=tlist->capacity)
{
printf("Seqlistnode _get(error\n");
return NULL;
}
temp = (SeqListNode*)tlist->node[pos];
return temp;
}
//清空顺序表
void SeqList_clear(SeqList*list)
{
TSeqList *temp = NULL;
if (list == NULL)
{
return ;
}
temp = (TSeqList *)list;
temp->length = 0;
memset(temp->node, 0, (temp->capacity * sizeof(void*)));
return;
}
//销毁顺序表
void SeqList_destory(SeqList*list)
{
TSeqList* temp = NULL;
if (list == NULL)
{
return;
}
temp = (TSeqList *)list;
if (temp->node != NULL)
{
free(temp->node);
}
free(temp);
return;
}
09-11
1万+
09-30
5万+