//順序表存儲
//順序存儲就是先申請一塊區域,再插入相應資料
//但可能并沒有插滿,會浪費一定的空間,這就是順序存儲局限性
#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;
}