Ch03 List,Stacks,and Queues课件
合集下载
CHAP3栈和队列(1)PPT课件

} SqStack;
16
2.顺序栈的基本操作 -----初始化栈(1)-----
void InitStack (SqStack &S){
// 构造一个空的顺序栈 S
S.base=new
SElemType[STACK_INIT_SIZE];
if(!S.base) exit(OVERFLOW);
S.top = S.base; //设置栈底和栈顶指针
6
主要操作:入栈与出栈
top
E
D
C
top
B
top base
A
base
A base
A进栈
B C D E 进栈
栈的特点 后进先出LIFO
E D C B A
E D C 出栈
7
思考:假设有A,B,C三个元素进S栈的顺序是 A,B,C,写出所有可能的出栈序列。
ABC ACB
A BB C
BAC BCA CAB CBA
设数组大小为M top=0,栈空,此时出栈,则下溢(underflow) top=M,栈满,此时入栈,则上溢(overflow)
15
1. 顺序栈的存储结构
//----- 栈的顺序存储表示 ----#define STACK_INIT_SIZE 100;
typedef struct { SElemType *base; //栈底指针 SElemType *top; // 栈顶指针 int stacksize; //当前已分配的栈空间
InitStack(&S) DestroyStack(&S)
StackLength(S) StackEmpty(S)
GetTop(S, &e) ClearStack(&S)
16
2.顺序栈的基本操作 -----初始化栈(1)-----
void InitStack (SqStack &S){
// 构造一个空的顺序栈 S
S.base=new
SElemType[STACK_INIT_SIZE];
if(!S.base) exit(OVERFLOW);
S.top = S.base; //设置栈底和栈顶指针
6
主要操作:入栈与出栈
top
E
D
C
top
B
top base
A
base
A base
A进栈
B C D E 进栈
栈的特点 后进先出LIFO
E D C B A
E D C 出栈
7
思考:假设有A,B,C三个元素进S栈的顺序是 A,B,C,写出所有可能的出栈序列。
ABC ACB
A BB C
BAC BCA CAB CBA
设数组大小为M top=0,栈空,此时出栈,则下溢(underflow) top=M,栈满,此时入栈,则上溢(overflow)
15
1. 顺序栈的存储结构
//----- 栈的顺序存储表示 ----#define STACK_INIT_SIZE 100;
typedef struct { SElemType *base; //栈底指针 SElemType *top; // 栈顶指针 int stacksize; //当前已分配的栈空间
InitStack(&S) DestroyStack(&S)
StackLength(S) StackEmpty(S)
GetTop(S, &e) ClearStack(&S)
数据结构 第3章 栈和队列PPT课件

else
{
s.top++;
s.stack[s.top]=x;
}
}
******上课时请保持课堂的安静,谢谢大家!!!
30.10.2020
× 第11页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ] 首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
(3)退栈
void pop(seqstack &s)
30.10.2020
× 第9页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ] 首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
2、栈的五种运算
(1)初始化栈
void inistack(seqstack &s)
{
s.top=0;}源自******上课时请保持课堂的安静,谢谢大家!!!
×
首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
主要内容 栈
队列
这两种结构都是特殊的线性表
******上课时请保持课堂的安静,谢谢大家!!!
30.10.2020
第2页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ]
×
首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
Operation:
Void inistack(&s) //将栈S置为一个空栈(不含任何元素)
Void Push(&s,x) //将元素X插入到栈S中,也称为 “入栈”、 “插 入”、 “压入”
Void Pop(&s) //删除栈S中的栈顶元素,也称为”退栈”、 “删 除”、 “弹出”
第3章栈和队列素材PPT课件

{
if (top == NULL) return 1;
else return 0;
}
3) Lpush(slink *ptop, datatype x ) //进栈
{
slink p = (slink)malloc(sizeof(snode)) ; //生成进栈p节点
p->data = x;
p->next = *ptop; *ptop = p; //p节点作为新的栈顶链入
X出栈
栈顶top 栈底bottom
X
an-1
…
a1 a0
.
C语言函数调用和返回 是如何正确实现的?
2
栈的定义及其基本操作
栈的特点: ✓ 后进先出(Last In First Out,LIFO)
若元素进栈顺序为a0,a1,…,an-1,则出栈顺序是an-1,an-2,…, a0,即后进栈的元素先出栈,故栈可称作“后进先出” 的线性表。 ✓ 栈顶是唯一的出入口
Push(&S, e) 初始条件:栈S存在且未满。 操作结果:插入数据元素e,使之成为新栈顶元素。
Pop(&S) 初始条件:栈S存在且非空。 操作结果:删除S的栈顶元素并返回其值。
GetTop(S) 初始条件:栈S存在且非空。 操作结果:返回栈顶元素的值。
...... } ADT Stack;
.
5
3.1 栈
S->top
S = (sqlink)malloc(sizeof(sqstack));
则S指向一个顺序栈,如右图所示。
1
栈顶元素an-1写作:S->data [S->top] 栈空时S->top == -1
0
数据结构3栈和队列PPT教学课件

~AStack() { delete [] elements; } // Destructor
void clear() { top = 0; }
注意:这里top在第I个位置
2020/12/12
8
一些重要的条件
栈满:top==maxSize-1; 栈空:top==-1
2020/12/12
9
链式栈
{
private:
int MaxSize;
// 栈中最大元素个数
int top;
// 栈中实际元素个数
T *elements; // 存储栈元素的数组
public:
AStack(int sz =DefaultListSize) // Constructor
{ size = sz; top = 0; elements = new T[sz]; }
virtual void MakeEmpty() = 0; virtual int isEmpty() virtual int isFull()=0
};
2020/12/12
5
顺序栈
由于栈是运算受限的线性表,因此 线性表的存储结构对栈也适应。
栈的顺序存储结构简称为顺序栈, 它是运算受限的线性表。因此,可用 数组来实现顺序栈。因为栈底位置是 固定不变的,所以可以将栈底位置设 置在数组的两端的任何一个端点;栈 顶位置是随着进栈和退栈操作而变化 的,故需用一个整型变量top
时间上:顺序栈为O(1),链式栈为O(1) 空间上:顺序栈要一个固定的长度,当栈不够
满时,空间浪费;链式栈长度可变,但对于每 个元素需要一个链接域,产生结构性开销。 何时使用顺序栈? 当要实现多个栈时,可用一个数组存储两个栈, 且最好是一个栈增长时另一个栈缩短。
chap3 栈和队列.ppt

例如:写一函数求n!
float fac ( int n) {
float f; if(n<0) printf(“n<0,data error!\n”); else if(n= =0||n= =1) f=1; else f=fac(n-1)* n ; return f; }
以求4的阶乘为例:
fac(4)=4*fac(3)
Void mapcolor(int R[][],int n,int s[])
{
(7)
s[1]=1; // 1号区域染1色
I=2; J=1; // I为区域号,J为染色号
while ( I<=n)
(2)
{ while(( J<=4)&&(I<=n))
(6)
{ k=1; // k表示已经着色的区域号
while(( K<I)&&(s[K]R[I,K]!=J)) K=K+1; // 若不相邻,或若相邻且不重色,对下一个区域判断。
第三章 栈和队列
栈和队列是两种特殊的线性表,它们是运算时要 受到某些限制的线性表,故也称为限定性的数据 结构。
3.1 栈
3.1.1栈的定义
栈:限定只能在表的一端进行插入和删除的特殊的线性表
设栈s=(a1,a2,. . . ,ai,. . . ,an),
其中a1是栈底元素, an是栈顶元素。
进栈 出栈
0 a1
}
出栈算法:
int pop(int s[ ], int *ptop, int *py) {
int top;
栈s
top=*ptop;
if(top= =0)
通过指针变量py
带回出栈元素
《栈和队列》课件

栈与队列的区别
数据存储方式
栈是后进先出(Last In First Out, LIFO)的数据结构,新元素总是被添加到栈顶,移除 元素时也是从栈顶开始。而队列是先进先出(First In First Out, FIFO)的数据结构,新 元素被添加到队列的尾部,移除元素时从队列的头部开始。
操作方式
栈的主要操作有push(添加元素)和pop(移除元素),而队列的主要操作有enqueue (添加元素)和dequeue(移除元素)。
《栈和队列》ppt课件
目录
CONTENTS
• 栈的定义与特性 • 队列的定义与特性 • 栈与队列的区别与联系 • 栈和队列的实现方式 • 栈和队列的算法实现 • 总结与思考
01 栈的定义与特性
CHAPTER
栈的定义
栈是一种特殊的线性 数据结构,遵循后进 先出(LIFO)原则。
栈中的元素按照后进 先出的顺序排列,最 新加入的元素总是位 于栈顶。
02
如何实现一个队列,并 实现其基本操作( enqueue、dequeue、 front)?
03
栈和队列在应用上有哪 些区别?请举例说明。
04
请设计一个算法,使用 栈实现括号匹配的功能 ,并给出测试用例。
谢谢
THANKS
。
队列的应用场景
任务调度
在任务调度中,可以将任 务按照优先级放入队列中 ,按照先进先出的原则进 行调度。
网络通信
在网络通信中,可以将数 据包放入队列中,按照先 进先出的原则进行发送和 接收。
事件处理
在事件处理中,可以将事 件放入队列中,按照先进 先出的原则进行处理。
03 栈与队列的区别与联系
CHAPTER
应用场景
栈和队列PPT课件

p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return OK;
}
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
typedef struct
{ Selemtype *base; //在栈构造之前和销毁之后,base的值为NULL
Selemtype *top; //栈顶指针
int
stacksize; //当前已分配的存储空间,以元素为单位
} sqstack;
栈的基本操作:P46
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
x
x
y^ rear
y^ rear
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
❖构造空队列
status InitQueue(LinkQueue &Q) {
Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode));
若表达式未输入完,转1
例 计算 4+3*5
后缀表达式:435*+
top 3
top 4
4
top 5 3
7
top top
数据结构 第3章 栈和队列PPT课件

an
情况:
反序:
正序:其他
×
进入
栈
a1
底
******上课时请保持课堂的安静,谢谢大家!!!
30.10.2020
第5页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ]
×
首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
课堂作业: 1.把输入序列 1 2 3 经过栈的操作可能 的所有结果进行讨论
30.10.2020
× 第9页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ] 首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
2、栈的五种运算
(1)初始化栈
void inistack(seqstack &s)
{
s.top=0;
}
******上课时请保持课堂的安静,谢谢大家!!!
******上课时请保持课堂的安静,谢谢大家!!!
30.10.2020
第7页
数据结构 电子教案 — [ 湖北汽车工业学院 软件教研室 马春江 特别制作 ] 首页 尾页 上页 下页 范例 讨论 考题 帮助 关于 结束
3.1.3 栈的抽象数据类型描述
ADT Stack is
Data:
含 有 n 个 元 素 a1,a2,a3,…,an, 按 LIFO 规 则 存 放 , 每 个 元 素 的 类 型 都 为 elemtype。
Operation:
Void inistack(&s) //将栈S置为一个空栈(不含任何元素)
Void Push(&s,x) //将元素X插入到栈S中,也称为 “入栈”、 “插 入”、 “压入”