天天看點

資料結構順序表

//順序表存儲
 //順序存儲就是先申請一塊區域,再插入相應資料
 //但可能并沒有插滿,會浪費一定的空間,這就是順序存儲局限性

 #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;

 }