前言
线性表(Liner List)
线性表:是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n = 0时,线性表是一个空表。
特点:一对一,除第一个唯一前驱,除最后一个有唯一后继.
a1–>a2–>a3–>a4
数据结构三要素:逻辑结构,存储结构,运算.
线性表是一种逻辑结构,有两种存储结构:顺序表和链表.
基本操作
- 创建,销毁
- 增加元素
- 删除元素
- 按位查找
- 按值查找
常用操作
- 判断表空
- 求表长
- 打印表
整个项目的构建
编程软件采用vscode,采用cmake管理多文件,不需要手动编译.
关于具体vscode的讲解.建议查看b站视频.
https://www.bilibili.com/video/BV13K411M78v?p=2&spm_id_from=pageDriver
顺序表(静态分配)
静态分配,元素为结构体的顺序表
定义
我们取元素为结构体,写一个复杂一点点的,注意比较结构体相同的时候,不能用==.
#define MAXSIZE 10
//这里的写法也可以typedef struct Student{} Student;一个意思
typedef struct{
int number; //序号
string name; //姓名
}Student;
//定义一个静态,元素为字符的顺序表,最大元素10
typedef struct
{
int length; //当前表长
Student data[MAXSIZE] ; //数据
}Seqlist;
初始化
典型错误
//初始化
void initList(Seqlist & l){
l.length=0;
}
- 由于内存中的脏数据,假如不初始化,强行访问可能产生意想不到的效果.
我们强制打印一下,明显不是我们想要的结果
void test(){
Seqlist l;
initList(l);
//insertListByOrder(l,1,'a');
//printList(l);
for(int i=0;i<10;i++){
cout << "第" <<i <<"个" <<endl;
cout << "名字是:"<<l.data[i].name << endl;
cout << "序号是:" <<l.data[i].number << endl;
}
}