//顺序表存储
//顺序存储就是先申请一块区域,再插入相应数据
//但可能并没有插满,会浪费一定的空间,这就是顺序存储局限性

#include <stdio.h>

#include <stdlib.h>//malloc

#include <strings.h>//bzero

#define MAX 10

typedef int datatype;

typedef struct

{

datatype buf[MAX];//最多存储数

int n;//实际存储数

}seqlist;



//1.创建空的顺序表

seqlist* create_empty_seqlist()

{

seqlist *l = NULL;

l = (seqlist *)malloc(sizeof(seqlist));

if(NULL == l)

{

printf("malloc fail",__FUNCTION__);

return NULL;

}

bzero(l,sizeof(seqlist));

return l;

}

//2.判断顺序表是否为满

int is_full_seqlist(seqlist*l)

{

return l->n == MAX ? 1: 0;

}



//3.判断顺序表是否为空

int is_empty_seqlist(seqlist *l)

{

return l->n == 0 ? 1 : 0;

}



//4.顺序表插入数据

void insert_data_seqlist(seqlist *l,datatype data)

{

l->buf[l->n] = data;

l->n++;

return ;

}



//5.打印顺序表数据

void printf_data_seqlist(seqlist *l)

{

int i = 0;

for(i = 0;i < l->n;i++)

{

printf("%d ",l->buf[i]);

}

return ;

}



//6.按要求插入数据

void insert_assign_seqlist(seqlist *l,int post,datatype data)

{

int set = post - 1;

int last = l->n - 1;

int i = 0;

for (i = last;i >= set;i--)

{

l->buf[i + 1] = l->buf[i];

}

l->buf[set] = data;

l->n++;

return ;

}



//7.删除相同数据

void dele_same_deleta_data(seqlist*l,datatype data)

{

int i = 0, j= 0;

for(i = 0;i < l->n;i++)

{

if(data != l->buf[i])

{

l->buf[j] = l->buf[i];

j++;

}

}

l->n = j;

return ;

}



//8.数据排序

void sort_data_seqlist(seqlist *l)

{

int i = 0,j = 0,temp = 0;

for(i = 0;i < l->n - 1;i++)

{

for(j = 0;j < l->n - 1 - i;j++)

{

if(l->buf[j] < l->buf[j + 1])

{

temp = l->buf[j];

l->buf[j] = l->buf[j + 1];

l->buf[j + 1] = temp;

}

}

}

return ;

}



int main()

{

seqlist *l = NULL;

l = create_empty_seqlist();

datatype buf[] = {10,20,30,40,50};

int len = sizeof(buf) / sizeof(buf[0]);

int i = 0;

int data = 0, post = 0;

int data1 = 0;

for(i = 0;i < len;i++)//循环插入数据

{

insert_data_seqlist(l,buf[i]);

}

printf_data_seqlist(l);

putchar('\n');



printf("please enter insert post and data:");

scanf("%d%d",&post,&data);

insert_assign_seqlist(l,post,data);

printf_data_seqlist(l);

putchar('\n');



printf("please input delete data:");

scanf("%d",&data1);

dele_same_deleta_data(l,data1);

printf_data_seqlist(l);

putchar('\n');



sort_data_seqlist(l);

printf_data_seqlist(l);

putchar('\n');



free(l);//释放申请内存

l = NULL;

return 0;

}