数据为顺序存储关系构成的表为顺序表,下面所有讲解针对逻辑结构为线性的顺序表。


数据元素的表示:

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