数据结构——顺序表
一.顺序表
1.1线性表:开辟出来一段连续的空间地址,一个数据单元只有一个数据前驱和数据后继 典性的就是数组。
#include<iostream>
using namespace std ;
int main ()
{
struct{
int a[MAx]//MAx表示线性表的大小
int length;//线性表的长度(表示现在存入了集合)
}
}
- 1.优点:可以用下标快速访问
- 2.缺点:增删改查比较复杂,一般用于快速访问的时候
1.2链式表:用指针指向储存的空间地址,空间地址不是连续的。
#include<iostream>
using namespace std ;
struct list{
int i;//用来存储数据
list *p;//指向下一个数据的地址
};
int main ()
{
}
- 1.优点:增删改查比线性表方便;
- 2.缺点:不可随机访问,必须从开头开始遍历,查找,所以查找的时间复杂度比较大
二.栈
2.1定义
- 限定只能在一端进行数据的增删数据结构;进行操作的一段称为“栈顶”
2.2特点
- 数据遵循先进后出,后进先出特点
#incldue<iostream>
using namespace std ;
struct list {
int a[MAX];//用数组来实现栈的定义 当然也可以用链表
int top;//用来指向栈顶
};
int main(){
}
三.队列
3.1定义
- 限定数据进只能在队尾进行 出只能在队头进行的数据结构
- 进的一头称为队尾 出的一头称为队头
3.2特点
-数据遵循先进先出 后进后出
#define MAXSIZE 100
typedef struct {
ElemType data[MAXSIZE];//用数组实现的
int front,rear;//front 指向队头 rear 指向队尾
} SqQueue;
3.3 循环队列
,front= =rear = = 0 可以作为队列的判空条件,但能否能用 rear = = MAXSIZE 作为队列已满的条件呢?显然是不行的,因为队尾指针可能已经到了最尾端,但是队头指针可能不在初始位置,而是在队列的中间,这时入队出现“上溢”,但这种溢出并不是真正的溢出,data数组中仍存在可以放置元素的位置,所以为“假溢出”。
因为在顺序表储存的队列中会出现假溢出的问题,所以我们在逻辑上 让队列的头和尾相连 形成一个环—我们称这个队列为循环队列