顺序表的基本操作增 删 查 排序
//主函数 main.c
#include"seq_list.h"
int main()
{
//seq_t *my_seq=create_list();
seq_t *my_seq=create_list();
//插入数据
insert_list(my_seq,0,10);
insert_list(my_seq,1,20);
insert_list(my_seq,1,40);
insert_list(my_seq,1,30);
insert_list(my_seq,1,50);
print_seq_list(my_seq);
DATA_TYPE var=-1;
del_list(my_seq,3,&var);
printf("%d\n",var);
print_seq_list(my_seq);
DATA_TYPE VAR=search_list_data(my_seq,1);
printf("%d\n",VAR);
print_seq_list(my_seq);
sort_seq_list(my_seq,0);
print_seq_list(my_seq);
sort_seq_list(my_seq,1);
print_seq_list(my_seq);
release_list(my_seq);
my_seq=NULL;
return 0;
}
//函数模块 创建seq_list.c
#include"seq_list.h"
//创建一个顺序表
seq_t *create_list()
{
seq_t *ptemp=(seq_t *)malloc(sizeof(seq_t));
if(NULL==ptemp)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"malloc error");
exit(-1);
}
//数据初始化
memset(ptemp,0,sizeof(seq_t));
// ptemp->data[ptemp->lenth]=insert_data;
// ptemp->lenth++;
return ptemp;
}
//插入数据
int insert_list(seq_t *my_seq,int pos,DATA_TYPE var)
{
if(NULL==my_seq)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
exit(-1);
}
if(pos<0||pos>my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"插入位置有误 error");
return -1;
}
if(N==my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表已经满了 error");
return -1;
}
int i=0;
for(i=my_seq->lenth;i>pos;i--)
{
my_seq->data[i]=my_seq->data[i-1];
}
my_seq->data[i]=var;
my_seq->lenth++;
return 0;
}
//删除数据
int del_list(seq_t *my_seq,int pos,DATA_TYPE *var)
{
if(NULL==my_seq)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
exit(-1);
}
if(pos<0||pos>=my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"删除位置有误 error");
return -1;
}
if(0==my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空,无法删除 error");
return -1;
}
int i=0;
*var=my_seq->data[pos];
for(i=pos;i<my_seq->lenth-1;i++)
{
my_seq->data[i]=my_seq->data[i+1];
}
my_seq->lenth--;
return 0;
}
//遍历函数
int print_seq_list(seq_t *my_seq)
{
if(NULL==my_seq)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
exit(-1);
}
if(0==my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空 error");
return -1;
}
int i=0;
for(i=0;i<my_seq->lenth;i++)
{
printf("%d ",my_seq->data[i]);
}
printf("\n");
return 0;
}
DATA_TYPE search_list_data(seq_t *my_seq,int pos)
{
if(NULL==my_seq)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
exit(-1);
}
if(pos<0||pos>=my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"删除位置有误 error");
return -1;
}
if(0==my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空,无法删除 error");
return -1;
}
DATA_TYPE VAR= my_seq->data[pos];
return VAR;
}
//释放顺序表
void release_list(seq_t *my_seq)
{
free(my_seq);
}
//排序
int sort_seq_list(seq_t *my_seq,int flag)
{
if(NULL==my_seq)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"入参为NULL error");
exit(-1);
}
if(0==my_seq->lenth||1==my_seq->lenth)
{
printf("%s(%d):%s\n",__FILE__,__LINE__,"顺序表为空或只有一个元素,无法排序");
return -1;
}
int i=1;
int j=0;
if(0==flag)//降序
{
for(i=1;i<=my_seq->lenth-1;i++)
{
for(j=0;j<my_seq->lenth-1-i+1;j++)
{
if(my_seq->data[j]<my_seq->data[j+1])
{
DATA_TYPE ptemp=my_seq->data[j];
my_seq->data[j]=my_seq->data[j+1];
my_seq->data[j+1]=ptemp;
}
}
}
printf("----------------------\n");
}
else if(1==flag)//升序
{
for(i=1;i<=my_seq->lenth-1;i++)
{
for(j=0;j<my_seq->lenth-1-i+1;j++)
{
if(my_seq->data[j]>my_seq->data[j+1])
{
DATA_TYPE ptemp=my_seq->data[j];
my_seq->data[j]=my_seq->data[j+1];
my_seq->data[j+1]=ptemp;
}
}
}
printf("----------------------\n");
}
else
{
printf("输入有误,请重新输入\n");
}
}
创建一个头文件seq_list.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define DATA_TYPE int
#define N 5
typedef struct __SEQ{
DATA_TYPE data[N];
int lenth;
}seq_t;
//创建一个顺序表
seq_t *create_list();
//插入数据
int insert_list(seq_t *my_seq,int pos,DATA_TYPE var);
//删除数据
int del_list(seq_t *my_seq,int pos,DATA_TYPE *var);
//释放函数
void release_list(seq_t *my_seq);
//遍历函数
int print_seq_list(seq_t *my_seq);
//按位置查找数据
DATA_TYPE search_list_data(seq_t *my_seq,int pos);
//排序
int sort_seq_list(seq_t *my_seq,int flag);
在这里插入代码片