栈和队列
1.概念:
- 链表、栈和队列都是一种线性结构(一对一)
- 栈和队列是一种特殊的表状结构
- 栈只允许在栈顶位置入栈和出栈元素
- 链表可以在任意位置插入和删除元素
- 栈和队列只允许在指定位置插入和删除元素
2.栈:
1.概念:
1.先进后出,后进先出
2.栈顶:允许入栈和出栈的一端称为栈顶
3.栈底:不允许入栈和出栈的一端称为栈底
4.入栈(压栈):将元素放入栈顶位置
5.出栈(弹栈):将栈顶元素取出
6.栈针:记录栈顶位置的标记
2.分类:
1.顺序栈:
1.增栈:栈的方向自低向高增长
2.减栈:栈的方向自高向低增长
3.空栈:栈针指向要入栈的位置
4.满栈:栈针指向栈顶元素的位置
5.常见的顺序栈:
1.空增栈
2.空减栈
3.满增栈
4.满减栈

2.:
1.类型定义:
#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__
typedef int datatype; //存放数据的类型
typedef struct node
{
datatype tmpdata; //存放数据
struct node *pnext; //存放下一个节点的指针
}linknode;
#endif
2.顺序栈的创建:
申请存放标签的空间
申请存放数据的空间
3.顺序栈的销毁:
销毁存放数据的空间
销毁存放标签的空间
4.是否为空栈:
栈针为0即为空栈
5.是否为满栈
栈针与tlen相同即为满栈
6.压栈
将元素放入栈顶位置
栈针位置++
7.出栈
栈针位置--
将栈顶元素出栈
3.链式栈
3.队列
1.概念:
先进先出,后进后出
队头:出队的一端
队尾:入队的一端
入队:将元素放入队列末尾
出队:将元素从队头中取出
2.分类:
1.循环队列
1.类型定义

2.循环队列创建
3.循环队列销毁
4.判断循环队列是否为空
5.判断循环队列是否为满
为避免循环队列空与满的条件冲突,牺牲一个存放数据的空间,将tail+1==head作为判断队满的条件
循环队列如果head或者tail下标超过tlen范围,需要对tlen取余,保障head和tail的值在队列下标范围内变化
6.入队
7.出队
2.链式队列
1017

被折叠的 条评论
为什么被折叠?



