第02章 线性数据结构2-栈和队列.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 线性数据结构及其运算 2.1 线性表 2.2 栈和队列 2.3 数组 栈的定义 栈(stack)是限定在一端进行插入与删除的线性表 栈顶(top)是允许插入与删除的一端 栈底(bottom)是表中固定的一端,是栈顶的另一端 FILO(First In Last Out) 进栈 出栈 栈操作示例 有三个元素的进栈序列是1,2,3,举出此三个元素可能的出栈序列,并写出相应的进栈和出栈操作序列 (假设以I和O表示进栈和出栈操作)。 栈的顺序存储-顺序栈 用一维数组作为栈的存储空间S(1:m) top指针始终指向栈顶元素的当前位置 top=-1表示栈空 top=m-1表示栈满 建立顺序栈的C语言描述 #define MAXSIZE m /* m为栈中数据元素个数的最大可能值*/ int stack[MAXSIZE]; int top=-1; 进栈运算算法 退栈运算算法 读栈顶元素算法 链栈的插入运算(入栈) 申请一链栈结点,若无可用内存空间,则表示栈满,否则继续执行; 在top所指结点之前插入新结点,并将top指向新申请的结点。 链栈的删除运算(退栈) 若链栈为空,则输出栈溢出信息;否则继续执行; 删除top所指结点,并使top指向被删结点的后继结点。 队列的定义 队列(Queue)是指允许在一端进行插入,而在另一端进行删除的线性表 队尾:允许插入的一端;用尾指针rear指向队尾元素,即最后被插入的元素 队头:允许删除的一端;用头指针front指向队头元素的位置 FIFO结构的线性表 队列的顺序存储结构 入队和出队运算 循环队列 循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。 循环队列运算 队列为空:rear=front 入队:rear+1,如果rear=m,则rear=0 或rear=(rear+1)%m 出队:front+1,如果front=m,则front=0 或front=(front+1)%m 队满判定1:front=(rear+1)%m 队满判定2:front=rear?不能确定 单独设立一个标志: 循环队列运算 例1 设循环队列容量为70(序号为1~70),经过若干入队和出队后有: front=14,rear=21。 front=23,rear=12。 求这两种情况下,循环队列中各有多少个元素? 循环队列入队算法 判定循环队列是否已满,若满,则给出队列溢出出错信息; 队尾指针后移,将入队元素放入队尾指针所指的存储位置。 循环队列出队算法 判定循环队列是否为空,若空,则给出队列溢出(下溢)信息; 队头指针后移一个位置。 队列的链式存储结构 链队列的运算 链队列的入队算法 链队列的出队算法 第四次作业 P44:4,5,6 P44:10,11 * * (a)空栈 (b)元素A入栈 (c)栈满 (d)元素Y出栈 #define MAXSIZE m int stack[MAXSIZE]; int top=-1; void push(int x) {if(top==MAXSIZE-1) {printf(栈满溢出 \n); exit(1); } else {top++; stack[top]=x; } } 判断栈是否已满,若满则输出栈溢出信息,并停止执行;否则,继续执行; 栈顶指针top后移; 在栈顶指针所指当前位置插入元素x。 #define MAXSIZE m int stack[MAXSIZE]; int top;? int pop( ) {int x; if(top==-1) {printf(栈空溢出 \n); exit(1); } else {x=stack[top]; top--; } return x; } 判断栈是否为空栈,若为空则输出栈下溢信息,并停止执行;否则,继续执行; 弹出(删除)栈顶元素; 栈顶指针top下移。 #define MAXSIZE m int stack[MAXSIZE]; int top;? int pop( ) {int x; if(top==-1) {printf(栈空溢出 \n); exit(1); } else x=stack[top]; return x; } 判断栈是否为空栈,若为空则输出栈下溢信息,并停止执行;否则,继续执行; 读出栈顶元素。 栈的链式存储-链栈 链栈的C语言描述如下: struct snode{

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档