线性表
线性表结构
![线性表结构](https://img-blog.csdnimg.cn/20191214212455439.png)
线性表定义
typedef int T;
struct SeqList{
T* data;
int len;
int max;
};
线性表操作
SeqList* SL_Create(int maxlen){
SeqList* slist=(SeqList*)malloc(sizeof(SeqList));
slist->data = (T*)malloc(sizeof(T)*maxlen);
slist->max=maxlen;
slist->len=0;
return slist;
}
void SL_Free(SeqList* slist)
{
free(slist->data);
free(slist);
}
void SL_MakeEmpty(SeqList* slist)
{
slist->len=0;
}
int SL_Length(SeqList* slist)
{
return slist->len;
}
bool SL_IsEmpty(SeqList* slist)
{
return 0==slist->len;
}
bool SL_IsFull(SeqList* slist)
{
return slist->len==slist->max;
}
T SL_GetAt(SeqList* slist, int i)
{
if(i<0||i>=slist->len) {
printf("SL_GetAt(): location error when reading elements of the slist!\n");
SL_Free(slist);
exit(0);
}
else
return slist->data[i];
}
void SL_SetAt(SeqList* slist, int i, T x)
{
if(i<0||i>=slist->len) {
printf("SL_SetAt(): location error when setting elements of the slist!\n");
SL_Free(slist);
exit(0);
}
else
slist->data[i]=x;
}
bool SL_InsAt(SeqList* slist, int i, T x)
{
if(i<0||i>slist->len)
{
SL_Free(slist);
exit(0);
}
else
{
int j;
for(j=slist->len,slist->data[j+1]=slist->data[j];j>=i;j--)
{
slist->data[j]=slist->data[j-1];
}
slist->data[i]=x;
slist->len++;
}
}
T SL_DelAt(SeqList* slist, int i)
{
int j;
int x=slist->data[i];
for(j=i+1;j<slist->len;j++)
{
slist->data[j-1]=slist->data[j];
}
slist->len--;
return x;
}
int SL_FindValue(SeqList* slist, T x)
{
int i=0;
while(i<slist->len && slist->data[i]!=x) i++;
if (i<slist->len) return i;
else return -1;
}
int SL_DelValue(SeqList* slist, T x)
{
int i;
for(int i=0;i<slist->len;i++){
if(slist->data[i]==x){
SL_DelAt(slist,i);
break;
}
}
}
void SL_Print(SeqList* slist)
{
if (slist->len==0) {
printf("The slist is empty.\n");
return;
}
for (int i=0; i<slist->len; i++) {
printf("%d ", slist->data[i]);
}
printf("\n");
}