#define SEQLIST_H_INCLUDED
typedef void SeqList;
typedef void SeqListNode;
SeqList* Seqlist_create(int capacity);
void Seqlist_destroy(SeqList* list);
void Seqlist_clear(SeqList* list);
int Seqlist_length(SeqList* list);
int Seqlist_capacity(SeqList* list);
int Seqlist_insert(SeqList* list,SeqListNode* node,int pos);
SeqListNode* Seqlist_delete(SeqList* list,int pos);
SeqListNode* Seqlist_get(SeqList* list,int pos);
#endif // SEQLIST_H_INCLUDED
/
#include "Seqlist.h"
#include <malloc.h>
typedef unsigned int TSeqListNode;
typedef struct __tag_list
{
int length;
int capacity;
TSeqListNode* node;
}TSeqList;
/**********************************
*函数功能:顺序线性表的创建
*参数说明:
* 输入:capacity:容量大小
* 输出:seqlist: 返回创建的线性表
*日期: 2018-04-14-08.45
***********************************/
SeqList* Seqlist_create(int capacity) //o(1)
{
if(capacity>0)
{
TSeqList* list=(TSeqList*)malloc(sizeof(TSeqList)+capacity*sizeof(TSeqListNode*));
if(list!=NULL){
list->capacity=capacity;
list->length=0;
list->node=(TSeqListNode*)(list+1);
}else{
return NULL;
}
return list;
}else{
return NULL;
}
}
/**********************************
*函数功能:删除线性表
*参数说明:
* 输入:list:创建的线性表
* 输出:void
*日期: 2018-04-14-08.45
***********************************/
void Seqlist_destroy(SeqList* list) //o(1)
{
free(list);
}
/**********************************
*函数功能:清空线性表
*参数说明:
* 输入:list:创建的线性表
* 输出:void
*日期: 2018-04-14-08.45
***********************************/
void Seqlist_clear(SeqList* list) //o(1)
{
if(list!=NULL)
{
TSeqList* slist=(TSeqList*)list;
slist->capacity=0;
slist->length=0;
}
}
int Seqlist_length(SeqList* list) //o(1)
{
if(list!=NULL)
{
TSeqList* slist=(TSeqList*)list;
return slist->length;
}else{
return -1;
}
}
int Seqlist_capacity(SeqList* list) //o(1)
{
if(list!=NULL){
TSeqList* slist=(TSeqList*)list;
return slist->capacity;
}else{
return -1;
}
}
/**********************************
*函数功能:顺序线性表元素插入
*参数说明:
* 输入:list:待插入线性表;node:节点元素;pos:位置
* 输出:插入成功为1,失败为0
*日期: 2018-04-14-09.58
***********************************/
int Seqlist_insert(SeqList* list,SeqListNode* node,int pos) //o(n)
{
if(list!=NULL && pos>=0)
{
TSeqList* slist=(TSeqList*)list;
int ret=1;
int i=0;
ret=ret && (slist->capacity >= pos+1) && (node != NULL);
if(ret)
{
if(pos >= slist->length)
{
pos=slist->length;
}
for(i=slist->length;i>pos;i--)
{
slist->node[i]=slist->node[i-1];
}
slist->node[pos]=(TSeqListNode)node;
slist->length++;
}
return ret;
}else{
return 0;
}
}
/**********************************
*函数功能:顺序线性表删除
*参数说明:
* 输入:list:待删除线性表;pos:位置
* 输出:删除节点位置元素
*日期: 2018-04-14-09.58
***********************************/
SeqListNode* Seqlist_delete(SeqList* list,int pos) //o(n)
{
if(list!=NULL && pos>=0)
{
TSeqList* slist=(TSeqList*)list;
int ret=1;
int i=0;
SeqListNode* result=NULL;
ret=ret && (slist->length > pos);
if(ret)
{
result=slist->node[pos];
for(i=pos+1;i<slist->length;i++)
{
slist->node[i-1]=slist->node[i];
}
slist->length--;
}
return result;
}else{
return NULL;
}
}
/**********************************
*函数功能:获取线性表元素
*参数说明:
* 输入:list:线性表;pos:位置
* 输出:位置元素
*日期: 2018-04-14-09.58
***********************************/
SeqListNode* Seqlist_get(SeqList* list,int pos) //o(1)
{
if(list!=NULL && pos>=0)
{
TSeqList* slist=(TSeqList*)list;
int ret=1;
ret=ret && (slist->length > pos);
if(ret)
{
return (SeqListNode*)slist->node[pos];
}else{
return NULL;
}
}else{
return NULL;
}
}
/
#include <stdio.h>
#include <stdlib.h>
#include "Seqlist.h"
int main()
{
SeqList* list=Seqlist_create(10);
int K[]={1,2,3,4,5,6,7,8,9,10,11};
int length=sizeof(K)/sizeof(*K);
int i=0;
for(i=0;i<length;i++)
{
Seqlist_insert(list,&(*(K+i)),i);
}
for(i=0;i<Seqlist_length(list);i++)
{
int* temp=(int*)Seqlist_get(list,i);
printf("%d\t",*temp);
}
printf("\n-------------------\n");
printf("capacity = %d\n",Seqlist_capacity(list));
while(Seqlist_length(list)>0)
{
int* temp=(int*)Seqlist_delete(list,0);
printf("%d\t",*temp);
}
printf("\n");
printf("capacity = %d\n",Seqlist_capacity(list));
printf("Hello world!\n");
Seqlist_destroy(list);
return 0;
}