环境:gcc
目的:顺序存储表练习
功能如下:
1.创建一个空顺序存储表
2.判断表空
3.判断表满
4.求表长
5.插入一个元素
6.删除一个元素
7.修改一个元素
8.查找一个元素
9.遍历顺序存储表
顺序存储表结构如下:
/*************************************************************************
> File Name: seqlist.c
> Author: wanghao
> Mail: [email protected]
> 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, intlocation);
/*Modify a data in list*/
int modify_list_data(NODE *list, intlocation, 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[])
{
inti;
NODE*phead = NULL;
/*Thefollowing code is used to test*/
phead= create_empty_list();
for(i= 11; i < 55; i += 2)
{
insert_list_data(phead,i);
printf("Thelength 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("Thelength 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");
return0;
}
return1;
}
/*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");
return0;
}
return1;
}
/*Seek the lenght of list*/
int seek_list_length(NODE *list)
{
if(list== NULL)
{
printf("Thelist is not exist!\n");
return-1;
}
returnlist->length;
}
/*Insert a data into list*/
int insert_list_data(NODE *list, data_tdata)
{
intlist_info;
list_info= judge_list_full(list);
if(list_info!= 1)
{
printf("Insertlist 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;
}