栈和队列的详细讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
注意: t是 int型简单变量 ,指向栈顶元素在栈中的位置(序号) push_seq(pastack,x) PSeqStack pastack; datatype x; { if (pastack-t==MAXNUM-1) print(“overflow”); else { pastack-t++; pastack-s[pastack-t]=x;} } /* push_seq */ pop_seq(pastack) PSeqStack pastack; { if (pastack-t==-1 ) print(“underflow”); else pastack-t--; } /* pop_seq */ 例3.3 数制转换 void CONVERSION(int X ){ If (X/8!=0) conversion(X/8); Printf(“%d”,X%8);} 4.5 队列的实现 队列的应用 --医院门诊部病人管理系统 工作过程:当一病人进入门诊室时,负责挂号的义务人员就根据观察和简短询问发给他一个从0(病危)到4(一般)变化的优先数,让他到相应优先数队列中去排队等待 。当一医生空闲时,就根据优先数和等待时间,通知某候诊病人就诊。 原则:优先级高的先考虑,同一优先级中,则先来先考虑。 队列的应用 --医院门诊部病人管理系统 组织数据的方式--数据结构 队列的应用 --医院门诊部病人管理系统 队列的应用 --医院门诊部病人管理系统 队列的应用 --医院门诊部病人管理系统 7 6 5 4 3 2 1 0 f r k1 k2 k3 f r r f k6 k5 队列空 队列数组越界 顺序队列 4.5.1 顺序队列 假上溢:当前队列并不满,但不能入队。 每次出队时向前移一位置。 大量移动元素 循环队列 原因: 被删除元素的空间没有再被使用 解决: 采用循环队列克服“假上溢” 。 。 。 sq-r sq-f MAXNUM-1 0 1 指针移动方向 入队:if (sq-r+1=MAXNUM) sq-r=0; else sq-r++; 利用模运算 sq-r=(sq-r+1)%MAXNUM 出队: sq-f=(sq-f+1)%MAXNUM 采用循环队列克服“假上溢” 4.5.1 顺序队列 某一元素出队后,若头指针已从后面追上尾指针, 则当前队列为空: sq-f=sq-r 某一元素入队后,若尾指针已从后面追上头指针, 则当前队列为满: sq-f=sq-r 因此,仅凭 sq-f=sq-r 是无法区别 队列空还是队列满。 判断队空和队满 4.5.1 顺序队列 解决办法 标志变量 测试尾指针在循环意义 下是否等于头指针 判别队列满的条件: (sq-r+1)%MAXNUM=sq-f 使 sq-f=sq-r 成为判断队列空的条件 4.5.1 顺序队列 元素个数是MAXNUM-1 sq.rear sq.front k1 k2 k7 k6 k5 k4 k3 sq.front sq.rear 图(a) 空队列 图(b) 队列满 图4.9 循环队列 4.5.1 顺序队列 在循环队列上实现五种基本运算: 1.置空队 2.判队空 3.取队头元素 4.入队 5.出队 1. 置空队 PSeqQueue createEmptyQueue_seq( void ) { PSeqQueue sq; sq = (PSeqQueue)malloc(sizeof(struct SeqQueue)); if (sq==NULL) printf(Out of space!! \n); else { sq-f = 0; sq-r = 0; } return (sq); }? 2. 判队空 int isEmptyQueue_seq( PSeqQueue sq ) { return (sq-f == sq-r); } ? 3. 取队头元素 DataType frontQueue_seq( PSeqQueue sq ) /* 对非空队列,求队列头部元素 */ { return (sq-q[sq-f]); } 4. 入队 void enQueue_seq( PSeqQueue sq, DataType x ) /* 在队列中插入一元素x */ {

文档评论(0)

飞扬的岁月 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档