线性表-顺序表(1)

1、基本知识

线性表有n个相同类型的数据元素组成的有限序列, 他是最基本、最常用的一种线性结构。 线性表有唯一的开始和结束,除了第一个元素和最后一个元素外, 每个元素都有直接前驱和后继。

在这里插入图片描述
表的特性:
1)非空表第一个元素没有前驱
2)非空表最后一个元素没有后继
3)非空表中间元素有唯一前驱和唯一后继

顺序表

定义顺序表
typedef struct seq_list
{
	data_t data[MAX_SIZE];  //存储数据
	int last;   //记录表中最后一个位置,还没有存储数据的位置
}seq_list_t;```

创建顺序表
seq_list_t *create_seq_list(void)
{
	//定义表,在堆区分配空间
	seq_list_t *s = NULL;
	s = (seq_list_t *)malloc(sizeof(seq_list_t));
	if(s == NULL){
		printf("create_seq_list malloc error\n");
		return NULL;
	}
	//表初始化,给last赋值
	s->last = 0;
	//把这空间的首地址给调用者
	return s;
}

向顺序表中添加数据

//添加数据,按照指定位置
int add_data(seq_list_t *l, data_t x, int pos)
{
	int i;
	//判断表是否为满
	if(l->last == MAX_SIZE){
		printf("seq_list if full\n");
		return -1;
	}
	//判断位置是否有效
	if(pos<0 || pos>l->last){
		printf("add_data pos is error\n");
		return -1;
	}
	//移位操作 - 将表中pos位置以及后面所有的元素向后移一个位置
	for(i=l->last-1; i>=pos; i--){
		l->data[i+1] = l->data[i];
	}
	//放要添加的元素放到指定的位置
	l->data[pos] = x;
	//改变last的值
	l->last++;
	return 0;
}

//删除数据 - 按照指定位置删除
	判断表是否为空 - last - 0
	判断位置是否有效 - 0 - last-1
	移位,将pos位置后面所有的元素向前移一位
	last-1
	
	打印顺序表中的所有数据
	遍历data数组
	
	查找顺序表中的数据
	1. 按照指定位置查找数据
	2. 查找歌名为“无价之姐”的歌曲的信息

	修改顺序表中的数据
	1. 修改指定位置的数据 - 修改指定位置的排行
		判断位置是否有效
		修改pos位置上的数据
	
	2. 修改歌名为“无价之姐”的歌曲歌手信息
		找到歌名为"无价之姐"的歌曲的位置
		修改对应位置上的歌手名

	删除顺序表中的数据
	释放在堆上申请的空间

猜你喜欢

转载自blog.csdn.net/bentao1997719/article/details/124924865