数据结构-顺序表
1.顺序表的概念
顺序表:线性表的顺序存储,称为顺序表(数组)
线性表:是由多个类型相同
个数有限的数据元素组成的集合(属相)
顺序表:逻辑结构线性结构
存储结构:顺序存储
线性表的分类:顺序表,链表,栈,队列,数组,字符串
2顺序表的基本操作
2.1 创建顺序表
Sqlist * create_Sqlist()
{
//创建数据表
Sqlist* list=(Sqlist*)malloc(sizeof(Sqlist));
if(NULL==list)
{
printf("creat_Sqlist false");
return NULL;
}
//对数据元素清0
memset(list->data,0,sizeof(list->data));
//对顺序表长度清0
list->len=0;
return list;
}
2.2 顺序表的尾插
//尾插
int insert_rear(datatype element,Sqlist* list)
{
//判满判空
if(NULL==list||list->len==MAXSIZE)
{
printf("insetr_rear error\n");
return FALSE;
}
//尾插
list->data[list->len]=element;
list->len++;
return SUCCESS;
}
2.3 顺序表的遍历
//循环遍历顺序表
int output_Sqlist(Sqlist *list)
{
//1.顺序表创建失败
//2.判空
if(NULL==list || list->len==0)
{
printf("out_sqlist error");
return FALSE;
}
int i=0;
while(i++<list->len)
{
printf("%d",list->data[i]);
}
return SUCCESS;
}
2.4 顺序表尾删
//尾删
int delete_rear(Sqlist* list)
{
//判断创建
//判空
if(NULL==list ||list->len==0)
{
printf("detele_rear error\n");
return FALSE;
}
//尾删
list->data[list->len-1]=0;
list->len--;
return SUCCESS;
}
2.5 顺序表按下表查找
//按下标查找
int locate_sub(Sqlist *list,int sub)
{
//1.判断
if(NULL==list||list->len==0)
{
printf("insert_1 error");
return FALSE;
}
if(sub<0 ||sub>list->len)
{
printf("insert_sub error");
return FALSE;
}
//2.查找
printf("%d",list->data[sub]);
return SUCCESS;
}
2.6 顺序表按下表删除
//按下标删除
int delete_sub(Sqlist *list,int sub)
{
//1.判空
//2.判溢出
//3.按下标
if(list->len==0&&NULL==list&&sub>0&&sub<list->len)
{
printf("delete_sub error");
return FALSE;
}
for(int i=sub+1;i<list->len;i++)
{
list->data[i-1]=list->data[i];
}
list->len--;
return SUCCESS;
}
2.7 顺序表按下表修改
//按下标修改
int revise_sub(Sqlist *list,int sub,datatype element)
{
//1.判断
if(NULL==list||list->len==0)
{
printf("insert_1 error");
return FALSE;
}
if(sub<0 ||sub>list->len)
{
printf("insert_sub error");
return FALSE;
}
//2.修改
list->data[sub]=element;
printf("%d",list->data[sub]);
return SUCCESS;
}
2.8 顺序表按下表插入
//按下标插入
int insert_sub(Sqlist *list,int sub,datatype element)
{
//1.插入失败
if(NULL==list||list->len==0)
{
printf("insert_sub error");
return FALSE;
}
//2.创建
//3.判断插入下标
if(sub<0 ||sub>list->len)
{
printf("insert_sub error");
return FALSE;
}
//4.插入
for(int i=list->len-1;i>=sub;i--)
{
list->data[i+1]=list->data[i];
}
list->data[sub]=element;
list->len++;
return SUCCESS;
}
2.9顺序表按元素查找
//按元素查找
int locate_element(Sqlist *list,datatype element)
{
//1.判断
if(NULL==list||list->len==0)
{
printf("create error");
return FALSE;
}
//2.查找
for(int i=0;i<list->len;i++)
{
if(element==list->data[i])
{
return i;
}
}
return FALSE;
}
2.10 顺序表按元素删除
//按元素删除
int delete_element(Sqlist *list,datatype element)
{
int sub=locate_element(list,element);
delete_sub(list,sub);
}
2.11 顺序表按元素修改
//按元素修改
int revise_element(Sqlist *list,datatype element1,datatype element2)
{
int sub=locate_element(list,element1);
revise_sub(Sqlist *list,datatype element2);
return SUCCESS;
}
2.12去重
//去重
void deduplication(Sqlist *list)
{
//1.判断
if(NULL==list||list->len==0)
{
printf("craete error");
return NULL;
}
for(int i=0;i<list->len;i++)
{
for(int j=i;j<list->len;j++)
{
if(list->data[i]==list->data[j])
{
delete_sub(list,j);
j--;
}
}
}
}
2.13冒泡排序
//冒泡排序
void bubble_sort(Sqlist *list)
{
int temp;
for(int i=0;i<list->len;i++)
{
for(int j=0;j<list->len-i-1;j++)
{
if(list->data[j]>list->data[j+1])
{
int temp=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=temp;
}
}
}
int temp=list->data[i];
list->data[i]=list->data[min];
list->data[j]=temp;
}
2.14选择排序
/选择排序
void select_sort(Sqlist *list)
{
int min;
for(int i=0;i<list->len;i++)
{
int min=i;
for(int j=i+1;j<list->len;j++)
{
if(list->data[j]>list->data[min])
{
min=j;
}
}
int temp=list->data[i];
list->data[i]=list->data[min];
list->data[j]=temp;
}
}
注:判断也可单独封装为一个函数。