- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章栈和队列-tabspresso.ppt
3.1 栈
3.2 队列
第3章 栈和队列(两种特殊的线性表)
栈 ( Stack )
定义:是限定仅在表尾进行插入或删除操作的线性表。
允许插入和删除的一端
称为栈顶(top),另一端
称为栈底(bottom)。
特点:后进先出 (LIFO)
a1
top
bottom
an
.
.
.
.
进栈
出栈
与一般线性表的区别:
一般线性表 栈
逻辑结构:一对一 逻辑结构:一对一
存储结构:顺序表、链表 存储结构:顺序栈、链栈
运算规则:随机存取 运算规则:后进先出
顺序存取 (LIFO)
插入元素到栈顶(即表尾)的操作,称为入栈。
从栈顶(即表尾)删除最后一个元素的操作,称为出栈。
栈的顺序存储和实现
1、顺序栈:栈的顺序存储结构,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,指针top指向栈顶元素在顺序栈中的下一个位置。指针bottom指向栈底。
bottom
空栈
a 进栈
b 进栈
a
a
b
top
top
top
bottom
bottom
a
a
b
top
e 进栈
a
f 进栈溢出
a
e 出栈
top
a
b
c
d
e
b
c
d
e
b
d
c
top
bottom
bottom
bottom
a
a
入栈操作—— 例:用栈存放(A,B,C,D) (注意要遵循“后进先出” 原则)
A
A
C
B
A
B
A
核心语句:
top=L;
顺序栈中的Push函数
Status Push(ElemType x)
{ if (topM) 上溢;
else v[top++]=x;
}//top指向栈顶上方第一个空闲位置
Push (B);
Push (C);
Push (D);
低地址L
Push (A);
高地址M
B
C
D
入栈口诀:栈顶指针top先压后加(v[top++]=x)
出栈操作——例:从栈中取出‘B’ (注意要遵循“后进先出” 原则)
D
C
B
A
D
C
B
A
C
B
A
低地址L
高地址M
D
核心语句:
Pop ( );
Pop ( );
Printf( Pop ( ) );
顺序栈中的Pop函数
Status Pop( )
{ if (top= =L) 下溢;
else { y= v[- -top];
return(y);}
}
出栈口诀:栈顶指针top先减后弹(y=v[--top])
顺序栈的类型表示:
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef char StackData;
typedef struct { //顺序栈定义
StackData *base; //栈底指针
StackData *top; //栈顶指针
int stacksize;//当前已分配的全部存储空间
} SeqStack;
判栈空
int StackEmpty (SeqStack *S) {
if( S-top == S-base ) return 1 //判栈空,空则返回1
else return 0; //否则返回0
}
判栈满
int StackFull (SeqStack *S) {
if( S-top- S-base = S- StackSize ) return 1
//判栈满,满则返回1
else return 0; //否则返回0
}
顺序栈的基本运算:
初始化
void InitStack ( SeqStack *S) { //置空栈
S-base =( StackData *)malloc(STACK_INIT_SIZE * sizeof(StackData));if (!S-base) exit(OVERFLOW);
S-top = S-base ;
S-stacksize= STACK_INIT_SIZE ;
Return ok;
}
入栈
int Push (SeqStack *S, StackData x) {
//插入元素x为新的栈顶元素
if ( StackFull (S) ){
S-base =( StackData *)realloc(S-base ,
(S-stacksize+ STACKINCR
您可能关注的文档
- 第一节解压缩软件的使用.ppt
- 第一讲-C程序设计基础.ppt
- 第一讲-不再因为别人过得好而焦虑.ppt
- 第一讲VC++集成开发环境第一讲VC++集成开发环境第一讲VC++集成.ppt
- 第一部分数据表示、运算和运算器部件.doc
- 第七控件的数据绑定.ppt.ppt
- 第七章电池电动势及极化现象.ppt
- 第七章通讯功能与总线接口.ppt
- 第七节直译与意译有些词句的翻译方法很难归入其他翻译技巧,只有用.doc
- 第三单元课件信息数字化原理、过程与方法文件.ppt
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)