#include "seqlist.h"
//创建顺序表并初始化
int create_list(Ls_t **list)
{
if(NULL==list)//判定传入的指针是否是一个空指针
{
printf("申请空间失败\n");
return -1;
}
//申请内存空间
*list=(Ls_t *)malloc(sizeof(Ls_t));
if(NULL==*list)//申请空间失败
{
printf("申请空间失败\n");
return -1;
}
//初始化
(*list)->count=0;
memset(*list,0,sizeof(Ls_t));
return 0;
}
int show_list(Ls_t *list)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
for(int i=0;i<list->count;i++)
{
printf("%d ",list->listArr[i].data);
}
putchar(10);
return 0;
}
//在顺序表任意位置插入数据
int insert_list(Ls_t *list,int pos,int num)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(MAX_SIZE == list->count)
{
printf("顺序表已满\n");
return -1;
}
if(pos < 0 || pos > list->count)
{
printf("插入位置违法\n");
return -1;
}
//从后往前,依次向后移动一位,直到到达插入位置
int i=list->count;
while(i!=pos)
{
list->listArr[i]=list->listArr[i-1];
i--;
}
//插入数据
list->listArr[pos].data=num;
//顺序表存入数据的数量+1
list->count++;
return 0;
}
//在尾部插入数据
int insert_list_by_tail(Ls_t *list,int num)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(MAX_SIZE == list->count)
{
printf("顺序表已满\n");
return -1;
}
//插入数据
list->listArr[list->count].data=num;
//顺序表存入数据的数量+1
list->count++;
return 0;
}
int delete_list(Ls_t *list,int pos)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
if(pos<0||pos>=list->count)
{
printf("删除位置违法\n");
return -1;
}
for(int i=pos;i<list->count;i++)
{
list->listArr[i]=list->listArr[i+1];
}
list->count--;
return 0;
}
int delete_list_by_tail(Ls_t *list)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
list->count--;
return 0;
}
int modify_list(Ls_t *list,int pos,int num)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
if(pos<0||pos>=list->count)
{
printf("修改位置违法\n");
return -1;
}
list->listArr[pos].data=num;
return 0;
}
int search_list(Ls_t *list,int pos,int *num)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
if(pos<0||pos>=list->count)
{
printf("查询位置违法\n");
return -1;
}
*num=list->listArr[pos].data;
return 0;
}
int clean_list(Ls_t *list)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
list->count=0;
return 0;
}
//销毁顺序表
int destroy_list(Ls_t **list)
{
if(NULL == *list)
{
printf("操作的表不存在\n");
return -1;
}
if(NULL == list)
{
printf("操作的指针不存在\n");
return -1;
}
free(*list);
*list=NULL;
return 0;
}
int sort_list(Ls_t *list,int s)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
int flag=0;
for(int i=0;i<list->count-1;i++){
flag=0;
for(int j=0;j<list->count-1-i;j++){
if(0==s){ //正序排序
if(list->listArr[j].data>list->listArr[j+1].data)
{
Nd_t temp=list->listArr[j];
list->listArr[j]=list->listArr[j+1];
list->listArr[j+1]=temp;
flag=1;
}
}else{
if(list->listArr[j].data<list->listArr[j+1].data)
{
Nd_t temp=list->listArr[j];
list->listArr[j]=list->listArr[j+1];
list->listArr[j+1]=temp;
flag=1;
}
}
}
if(0==flag) break;
}
return 0;
}
int overturn_list(Ls_t *list){
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
int i=0,j=list->count-1;
Nd_t temp;
while(i<j)
{
temp=list->listArr[i];
list->listArr[i]=list->listArr[j];
list->listArr[j]=temp;
i++;
j--;
}
printf("翻转完成\n");
return 0;
}
int dedup_list(Ls_t *list)
{
if(NULL == list)
{
printf("操作的表不存在\n");
return -1;
}
if(0==list->count)
{
printf("顺序表为空\n");
return -1;
}
int i,j;
for(i=0;i<list->count-1;i++)
{
for(j=i+1;j<list->count;j)
{
if(list->listArr[j].data==list->listArr[i].data){
for(int k=j;k<list->count-1;k++)
{
list->listArr[k]=list->listArr[k+1];
}
list->count--;
}else{
j++;
}
}
}
return 0;
}