数据为顺序存储关系构成的表为顺序表,下面所有讲解针对逻辑结构为线性的顺序表。
数据元素的表示:
#define MAXSIZE 100
typedef int data_t;
typedef struct {
data_t data[MAXSIZE];
int last;
}seqlist_t;
使用typedef定义这种结构体类型(seqlist_t),seqlist_t表示为顺序表类型结构。
1.创建顺序表
seqlist_t *create_seqlsit(void)
{
seqlist_t *L=NULL;
L = (seqlist_t *)malloc(sizeof(seqlist_t));
if(L == NULL)
{
puts("no memory");
return NULL;
}
L->last = -1;
return L;
}
2.删除顺序表
void clear_seqlsit(seqlist_t *L)
{
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return ;
}
free(L);
L = NULL;
return ;
}
值得注意的是,我们不仅要free释放这个空间,还要讲指针L=NULL 置空。避免指针指向一个错误的空间(野指针)。
3.清空表
只需要将位置变量 last 复位就可以了
void set_empty_seqlist(seqlist_t *L)
{
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return;
}
L->last = -1;
return ;
}
4.查看当前数据个数
就是查看位置变量的大小而已
int get_length_seqlist(seqlist_t *L)
{
if(L ==NULL)
{
puts("seqlist_t *L is NULL");
return -1;
}
return (L->last+1);
}
5.输出表内容至终端
void show_seqlist(seqlist_t *L)
{
int i=0;
if(L == NULL)
{
puts("seqlist_t *L is NULL");
return;
}
for(i=0;i<=L->last;i++)
printf("L->data[%d] = %d\n",i,L->data[i]);
return;
}
6.插入一个数据项
int insert_seqlist(seqlist_t *L,data_t x,int pos)
{
int i=0;
if((is_full_seqlist(L))||(pos<0)||(pos>L->last+1))
{
puts("input argv is invalid");
return -1;
}
for(i=L->last;i>=pos;i--)
L->data[i+1] = L->data[i];
L->data[pos] = x;
L->last++;
return 0;
}
7.删除一个数据项
int delete_seqlist(seqlist_t *L,int pos)
{
int i=0;
if((pos<0)||(pos>L->last))
{
puts("input pos is invalid");
return -1;
}
for(i=pos;i<get_length_seqlist(L);i++)
L->data[i] = L->data[i+1];
L->last--;
return 0;
}
8.修改一个数据项
int change_seqlist(seqlist_t *L,data_t x,int pos)
{
if((pos<0)||(pos>L->last))
{
puts("input pos is invalid");
return -1;
}
L->data[pos] = x;
return 0;
}
9.查询一个数据项
int search_seqlist(seqlist_t *L,data_t x)
{
int i=0;
for(i=0;i<=L->last;i++)
{
if(L->data[i] == x)
return i;
}
return -1;
}
10.主函数使用演示
int i=0;
seqlist_t *L=NULL;
L=create_seqlsit();
for(i=0;i<=4;i++)
insert_seqlist(L,i,0);
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("===========================================");
puts("search data = 3");
printf("data = 3 pos is %d\n",search_seqlist(L,3));
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("===========================================");
puts("delete data=3");
delete_seqlist(L,search_seqlist(L,3));
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("===========================================");
puts("change data[2] =99");
change_seqlist(L,99,2);
printf("seqlist L length is %d\n",get_length_seqlist(L));
show_seqlist(L);
puts("===========================================");
clear_seqlsit(L);