栈
栈是一种受限的线性表,栈的逻辑结构任然是一对一的关系。
为啥栈是一种受限的线性表了??
因为栈只能在一端进行插入和删除,先进后出
栈的存储结构
1,顺序存储结构
2,链式存储结构
1,顺序存储
顺序存储:就是开辟一块空间来存放数据
代码实现
添加链接描述
链栈
存储空间包括两个部分:数据域+指针域
代码实现
添加链接描述
栈和递归
以汉罗塔为例
就是三个柱子将一个柱子上从小到大的盘子放到另一个柱子上
我们要一步一步来借助第三个柱子,来移动盘子
汉罗塔的代码实现
添加链接描述
队列
队列:是一种先进先出的线性表,他只允许在一端进行插入,另一端进行删除
队列的存储
1,顺序表示
用一维数组来存储
空队的标志:a.front == a.rear;
缺点是如果队头的下标没有指向头元素,而对尾下标等于尾元素了,然后就会出现假溢出
解决方法:循环队列
队空:front == rear
队满(rear + 1) % M == front;
我们假设下标为0的位置没有元素,所以如果有新的元素就把他放到这个位置假设尾指针已经指向最后一个元素了所以(rear + 1) % MAX == 0;
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct SqQueue{
int *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue &s)//初始化
{
s.base = (int *)malloc(sizeof(int) *MAX);
if(!s.base)
{
return 0;
}
s.front = 0;
s.rear = 0;
return 1;
}
int EnQueue(</