顺序存储表

环境:gcc

目的:顺序存储表练习

功能如下:

1.创建一个空顺序存储表

2.判断表空

3.判断表满

4.求表长

5.插入一个元素

6.删除一个元素

7.修改一个元素

8.查找一个元素

9.遍历顺序存储表


顺序存储表结构如下:

 

/*************************************************************************

> File Name: seqlist.c

> Author: wanghao

> Mail: 1162877912@qq.com

> Created Time: Tue May  8 19:44:53 PDT 2018

************************************************************************/

 

#include <stdio.h>

#include <stdlib.h>

 

#define MAXSIZE 10

 

typedef int data_t;

 

typedef struct node

{

       data_tdata[MAXSIZE];

       intlength;

}NODE;

 

/*Create a empty sequntial storage list*/

NODE *create_empty_list(void);


/*Jude sequntial storage list is empty*/

int judge_list_empty(NODE *list);


/*Jude sequntial storage list is full*/

int judge_list_full(NODE *list);


/*Seek the lenght of list*/

int seek_list_length(NODE *list);


/*Insert a data into list*/

int insert_list_data(NODE *list, data_tdata);


/*Delete a data from list*/

int delete_list_data(NODE *list, int location);


/*Modify a data in list*/

int modify_list_data(NODE *list, int location, data_t data);


/*Find a data in list*/

int find_list_data(NODE *list, data_tdata);  


/*Traverse a data from list*/

int traverse_list_data(NODE *list);


/*Free list mem*/

int free_list(NODE *list);

 

int main(int argc, const char *argv[])

{

       int i;

       NODE *phead = NULL;

 

       /*The following code is used to test*/

       phead = create_empty_list();

 

       for(i= 11; i < 55; i += 2)

       {

              insert_list_data(phead,i);    

              printf("The length of list is %d\n",seek_list_length(phead));

       }

 

       traverse_list_data(phead);

       for(i= 0; i < 5; i++)

       {

              delete_list_data(phead,phead->length);

              printf("The length of list is %d\n",seek_list_length(phead));

       }

       traverse_list_data(phead);

 

       find_list_data(phead,98);

       modify_list_data(phead,phead->length+1, 99);

       modify_list_data(phead,phead->length, 99);

       modify_list_data(phead,phead->length-1, 98);

       modify_list_data(phead,phead->length-2, 97);

       traverse_list_data(phead);

       find_list_data(phead,98);

       free_list(phead);

 

       return0;

}

 

NODE *create_empty_list(void)

{

       NODE *p = NULL;

 

       p= (NODE *)malloc(sizeof(NODE));

       if(p == NULL)

       {

              printf("Malloclist mem fail!\n");

              exit(-1);

       }

  /*missing p->length = 0, add later*/
p->length = 0;

       returnp;

}

 

/*Jude sequntial storage list is empty*/

int judge_list_empty(NODE *list)

{

       if(list== NULL)

       {

              printf("Thelist is not exist!\n");

              return-1;

       }

 

       if(list->length== 0)

       {

              printf("Thelist is empty!\n");

              return 0;

       }

 

       return 1;

}

 

/*Jude sequntial storage list is full*/

int judge_list_full(NODE *list)

{

       if(list == NULL)

       {

              printf("Thelist is not exist!\n");

              return-1;

       }

 

       if(list->length == MAXSIZE)

       {

              printf("Thelist is full!\n");

              return 0;

       }

 

       return 1;

}

 

/*Seek the lenght of list*/

int seek_list_length(NODE *list)

{

       if(list== NULL)

       {

              printf("Thelist is not exist!\n");

              return-1;

       }

 

       return list->length;

}

 

/*Insert a data into list*/

int insert_list_data(NODE *list, data_tdata)

{

       int list_info;

 

       list_info = judge_list_full(list);

       if(list_info != 1)

       {

              printf("Insert list dasta wrong!\n");

              return-1;

       }

       list->data[list->length]= data;

       list->length++;

 

       return1;

}

 

/*Delete a data from list*/

int delete_list_data(NODE *list, intlocation)

{

       inti, list_info;

 

       list_info = judge_list_empty(list);

       if(list_info != 1)

       {

              printf("Deletelist data wrong!\n");

              return-1;

       }

/*missing the location = list-> length, add later*/
if(location < 0 || location >= list->length)

       {

              printf("Thedata location is wrong!");

              return0;

       }

 

/*missing the fact that the data in location is corresponds to a[location-1]*/
for(i = location-1; i < list->length; i++)

       {

              list->data[i]= list->data[i+1];

       }

       list->length--;

 

       return1;

}

 

/*Modify a data in list*/

int modify_list_data(NODE *list, intlocation, data_t data)

{

       intlist_info;

 

       list_info= judge_list_empty(list);

       if(list_info!= 1)

       {

              printf("Modifylist data wrong!\n");

              return-1;

       }

       if(location< 0 || location >= list->length)

       {

              printf("Thedata location is wrong!\n");

              return0;

       }

 

       list->data[location]= data;

 

       return1;

}

 

/*Find a data in list*/

int find_list_data(NODE *list, data_t data)

{

       inti, find_flag, list_info;

 

       list_info= judge_list_empty(list);

       if(list_info!= 1)

       {

              printf("Modifylist data wrong!\n");

              return-1;

       }

 

       find_flag= 0;

       for(i= 0; i < list->length; i++)

       {

              if(list->data[i] == data)

              {

                     printf("Finddata in location %d\n",i+1);

                     find_flag= 1;

              }

       }

 

       if(find_flag == 0)

       {

              printf("Notfind data!\n");

       }

       return1;

}

 

/*Traverse a data from list*/

int traverse_list_data(NODE *list)

{

       inti, list_info;

 

       list_info= judge_list_empty(list);

       if(list_info!= 1)

       {

              printf("Modifylist data wrong!\n");

              return-1;

       }

 

       printf("Traverselist data as follow!\n");

       for(i= 0; i < list->length; i++)

       {

              printf("%d",list->data[i]);

       }

       printf("\n");

 

       return1;

}

 

/*Free list mem*/

int free_list(NODE *list)

{

       if(list== NULL)

       {

              printf("Thelist is exist!\n");

              return-1;

       }

 

       free(list);

       list= NULL;

 

       return1;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值