没有合适的资源?快使用搜索试试~ 我知道了~
计算机软件基础:12第四章数据结构栈_队列.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 115 浏览量
2022-06-14
11:37:05
上传
评论
收藏 3.01MB DOC 举报
温馨提示
试读
13页
计算机软件基础:12第四章数据结构栈_队列.doc
资源推荐
资源详情
资源评论
《计算机软件基础》多媒体教程
第十二讲
第四章 数据结构
4.3 栈和队列
4.3.1 栈
※ 定义
⊙ 只能对始结点(又称始端)进行操作的线性表称为stack(栈,堆栈)。
⊙ 栈的始端称为栈顶,栈的终端称为栈底。
⊙ 栈的主要操作包括push(进栈)和push(出栈或者退栈),它们只涉及到栈顶结点。
⊙ 进栈操作是指在栈顶添加一个结点,使原来的栈顶结点成为栈顶的下一结点。
⊙ 出栈操作是从栈内取出栈顶结点,并使原来的栈顶下一结点成为栈顶结点。
由此可以看到,最先进栈的结点将最后出栈。
因此,栈又被称为先进后出表,记为FILO表(First In Last Out List)。
※ 栈的基本操作和存储空间测试
设计一个栈,要给予分配一定的空间,因此在进栈或退栈操作时应注意到栈空间的变
化情况。
如果在满栈(结点已经占满栈的容量)时执行进栈操作,称为上溢出(overflow)。
如果在空栈(栈内没有结点)时执行出栈操作,称为下溢出(underflow)。
通常根据栈顶指针的变化来判断是否发生上溢出和下溢出。在程序实现时,必须对上
溢出和下溢出的情况加以处理,否则将引起出错。
※ 栈的存储方式
按照栈的存储方式,可以分为顺序栈和链接栈。
用顺序存储方式实现的栈称为顺序栈,通常可以用数组来构造顺序栈。
用链接存储方式实现的栈称为链接栈,通常可以用链表来构造链接栈。
【例4-3.1】栈的应用示例:铁路车厢编组
下图中铁路的右侧是一个车厢的堆栈,规定从上边轨道进入堆栈的操作为P(push),从
堆栈退出进入下边轨道的操作为O(pop)。通过一系列的进栈和出栈操作,可以对火车车厢
进行重新编组。
例如 经 过 PPO 的 操 作 , 原 来按 {1, 2, 3} 编 组 的 车 厢 被牵 引 到 各 条 轨道 。 而 经 过
PPOPOO的操作,原来按{1, 2, 3}编组的车厢可以重新编组为{2, 1, 3}的序列。
待编组的火车车厢 经过PPO操作的车厢编组 编组后的火车车厢
4.3.2 顺序栈
※ 数据定义
#define M 1000
#define MAX M-1 /* 栈容量 */
#define MIN 0 /* 栈底指针值 */
short Stack[M]; /* 用数组存放栈 */
short Top = MIN-1; /* 栈顶指针,初始为空栈 */
※ 进栈函数
void push(short key) /* 结点值*/
{
if(Top>=MAX /* overflow */
|| Top<MIN-1) /* 非法指针值 */
error();
/* 结点进栈,指针加 1 */
Stack[++Top] = key;
}
※ 出栈函数
short pop(void)
{
if(Top<MIN /* underflow */
|| Top>MAX) /* 非法指针值 */
error();
/* 返回栈顶结点, 指针减 1 */
return(Stack[Top--]);
}
※ 调用方法示例
push(key);
※ 调用方法示例
key = pop( );
※ 顺序栈存储空间的讨论
上面在函数push和pop中,遇到上溢出(overflow)和下溢出(underflow)时,仅调用了一
个出错处理函数error。实际应用中应该能对溢出的情况加以具体处理。下溢出表示程序设
计有误,应该检查后加以修改。上溢出表示初始给定的空间太少了。为此,需要重新构造
栈。
应用中可能要在同一段存储空间使用一个或几个栈,可以采用同向双栈或者相向双栈。
⊙ 同向双栈
在同一个数组中同向存放 A 栈和 B 栈。
A 栈指针:TopA, A 栈栈底:MIN, A 栈容量:L-1。
B 栈指针:TopB, B 栈栈底:L, B 栈容量:MAX。
⊙同向双栈出栈的溢出下处理
出栈时需要测试是否发生下溢出(underflow)。问题:程序出错(误操作),须改正。
⊙ 同向双栈进栈的溢出处理
进栈时需要测试是否发生上溢出(overflow)。
若 A 栈和 B 栈没有同时满栈,可移动 B 栈,调整栈容量。
A 栈满,B 栈未满:B 栈向后移动。
B 栈满,A 栈未满:B 栈向前移动。
⊙ 相向双栈
使用 A 栈和 B 栈两个栈,在同一个数组中相向存放。
A 栈指针:TopA, A 栈栈底:MIN, A 栈容量:TopB-1。
B 栈指针:TopB, B 栈栈底:MAX, B 栈容量:TopA+1。
⊙ 相向双栈出栈的溢出处理
出栈时需要测试是否发生下溢出(underflow)。
空栈判据:TopA==MIN-1,TopB==MAX+1
问题:程序出错(误操作),须改正。
⊙ 相向双栈进栈的溢出处理
进栈时需要测试是否发生上溢出(overflow)。
满栈判据:TopA==TopB-1,或 TopB==TopA+1
处理:A 栈和 B 栈没有同时满栈时,能够自动调节,而不需要移动 A 栈或 B 栈。
4.3.3 链接栈
※ 数据定义
#define NODE struct node
NODE
{
short num;
NODE *next;
}; /* 用链表存放栈 */
NODE *Top=NULL; /* 栈指针,初始为空栈 */
※ 进栈函数
void push(short key) /* 结点值*/
{
NODE *node;
node=(NODE *)malloc(sizeof(NODE));
if(node == NULL)
error(); /* 满栈(overflow) */
/* 填入结点数据 */
node->num = key;
/* 插入结点 */
node->next = Top;
Top=node;
}
※ 出栈函数
short pop(void)
{
short key;
NODE *node;
if(Top==NULL)
error(); /* 空栈(underflow) */
key = Top->number;
node = Top; /* 删除结点 */
Top = node->next;
free(node); /* 释放结点*/
return(key);
}
※ 调用方法示例
push(key);
※ 调用方法示例
key = pop( );
剩余12页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3623
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于esp8266和dht11温湿度传感器制作的远程温湿度监控程序,温度、湿度通过mqtt协议方式上传OneNet平台
- 人染色体长度表(数据来自bilibili:基因学苑)
- 基于ASP.NET简易博客网站的设计与实现(源代码+论文).rar
- 在PyCharm中配置Python环境步骤
- 在PyCharm中配置Python环境步骤
- Lightroom-Premium-v9.2.2_build_710902200-Mod.apk
- 拾放机构3D 拾放机构3D
- Spring整合Mybatis+Spring事务快速入门(纯注解)
- 1990-2024年1月上证 深证指数日线行情
- html/css练习作业摇晃的桃子
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功