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. 修改歌名为“无价之姐”的歌曲歌手信息
找到歌名为"无价之姐"的歌曲的位置
修改对应位置上的歌手名
删除顺序表中的数据
释放在堆上申请的空间