定长顺序表
顺序表的常见操作:初始化、插入(按位置插入、头插、尾插)、删除(按元素值删除、按位置删除)、清空
- 插入:
//判空
static void DeterPointIsNull(pFixedSeqList list)
{
assert(list != NULL);
if (list == NULL)
{
printf("list is NULL, Please check\n");
exit(0);
}
}
// 对于顺序表的初始化
void InitFixedSeqList(pFixedSeqList list)
{
DeterPointIsNull(list);
list->length = 0;
}
// 根据pos位置插入val值
int InsertFixedSeqListPos(pFixedSeqList list, ElemType val, int pos)
{
DeterPointIsNull(list); //1.判断list是否为空
if(list->length==LISTSIZE) //2.判断顺序表是否还有存储空间
{
return 0;
}
if(pos<0||pos>list->length) //3.判断pos位置是否合法
{
return 0;
}
int i=0;
for(i=list->length;i>pos;i--) //4.将pos位置和其后面的值统一向后挪一个位置
{
list->data[i]=list->data[i-1];
}
list->data[pos]=val; //5.将val值存储到pos
list->length++; //6.顺序表length+1
return 1;
}
// 头插
int InsertFixedSeqListHead(pFixedSeqList list, ElemType val)
{
return InsertFixedSeqListPos(list, val, 0);
}
//尾插
int InsertFixedSeqListTail(pFixedSeqList list, ElemType val)
{
DeterPointIsNull(list);
return InsertFixedSeqListPos(list, val, list->length);
}
- 删除
按位置删除
//按位置删除
int DeleteFixSeqListpos(pFixedSeqList list,int pos)
{
DeterPointIsNull(list);
if(pos<0||pos>=list->length)
{
printf("pos is error\n");
return 0;
}
for(int i=pos;i<=list->length-1;i++) //注意临界值问题 如果删除最后一个,data[i+1]就会越界
{
list->data[i]=list->data[i+1];
}
list->length--;
return 1;
}
注意临界值问题 如果是i<=list->length,删除最后一个,data[i+1]就会越界
按元素值删除:
int DeleteFixSeqListElem(pFixedSeqList list, ElemType val)
{
DeterPointIsNull(list);
int i=0;
int j=0;
while(j<list->length)
{
if(list->data[j]=val)
{
j++;
}
else
{
list->data[i++]=list->data[j++];
}
}
list->length=i;
return 1;
}
- 清空
void ClearFixedSeqlist(pFixedSeqList list)
{
DeterPointIsNull(list);
list->length==0;
}