实现头删、清空顺序表、按位置插入、释放顺序表
头删
//头删
void dele_head(seq_p S)
{
if(S==NULL)
{
printf("入参为空\n");
return;
}
//判空
if(empty_seq(S))
{
printf("表为空,无需删除\n");
return;
}
for(int i=1;i<S->len;i++)
{
S->data[i-1]=S->data[i];
}
//长度自减
S->len--;
}
清空顺序表
//清空顺序表
void clear_seq(seq_p S)
{
if(S==NULL)
{
printf("入参为空\n");
return;
}
S->len=0; //直接将长度置0
}
按位置插入
//按位置插入
void insert_pos(seq_p S,datatype data,int pos)
{
if(S==NULL)
{
printf("入参为空\n");
return;
}
//判满
if(full_seq(S))
{
printf("表已满\n");
return;
}
//位置合理性判断
if(pos<=0||pos>S->len+1)
{
printf("位置不合理\n");
return;
}
for(int i=S->len-1;i>=pos-1;i--)
{
S->data[i+1]=S->data[i];
}
//循环后移结束
S->data[pos-1]=data;
S->len++;
}
释放顺序表
//释放顺序表
//可以传一级指针,但是不能给主函数中的S置空
void free_seq(seq_p *S)
{
//S==NULL和*S==NULL不能交换位置,因为S是一个二级指针,要先判断二级指针不为空,再判断二级指针指向的内容不为空
if(S==NULL||*S==NULL)
{
printf("入参为空\n");
return;
}
free(*S);
*S = NULL;
}