#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define SEQ_INIT_SIZE 2
#define SEQ_INC_SIZE 2
typedef int ElemType;
typedef struct
{
ElemType *data;
int capacity;
int cursize;
}SeaList
初始化
void InitSeqList(SeqList *plist)
{
assert(plist != NULL);
plist->capacity = SEQ_INIT_SIZE;
plist->cursize = 0;
plist->date = ((ElemType*)malloc(sizeof(ElemType)*plist->capacity);
if(NULL == plist->date)
{
printf("内存申请失败\n");
exit(EXIT_FAILURE);
}
}
获取 元素个数
int GetSize(SeqList *plist)
{
assert(plist != NULL);
return plist->cursize;
}
是否为空
bool IsEmpty(Seqlist *plist)
{
assert(plist != NULL);
return GetSize(plist) == 0;
}
获取容量
int GetCapacity(SeqList *plist)
{
assert(plist != NULL);
return plist->capacity;
}
判断是否满
bool IsFull(SeqList *plist)
{
assert(plist != NULL);
return GetSize(plist) == GetCapacity(plist);
}
增容
bool Inc_Capacity(SeqList *plist)
{
assert(plist != NULL);
ElemType *newdate = NULL;
int total = plist->capacity * SEQ_INC_SIZE;
newdate = (ElemType*)malloc(sizeof(ElemType)*total);
if(NULL == newdate)
{
return false;
}
for(int i = 0;i<plist->capaciy;++i)
{
newdate[i] = plist->date[i];
}
free(plist->date);
plist->date = newdate;
plist->capacity = total;
return true;
}
插入函数 (含增容)
bool InsertItem(SeqList *plist, int pos, ElemType val)
{
assert(plist != NULL);
if(pos < 0 || pos > plist->cursize)
{
return false;
}
if(IsFull(plist) && !Inc_Capacity(plist))
{
return false;
}
for(int i = plist->cursize ; i > pos; --i)
{
plist->date[i] = plist->date[i-1];
}
plist->date[pos] = val;
plist->cursize +=1;
return ture;
}
头插入
void Push_Front(SeaList *plist,ElemType val)
{
assert(plist != NULL);
InsertItem(plist,0,val);
}
尾插入
void Push_Back(Seaplist *plist,ElemType val)
{
assert(plist != NULL);
InsertItem(plist,plist->cursize,val);
}
查找(有则返回下标)
int FindValue(SeqList *plist,ElemTYpe val)
{
assert(plist != NULL);
int pos = -1;
for(int i = 0;i<plist->cursize;++1)
{
if(val = plist->date[i])
{
pos = i;
break;
}
}
return pos;
}