数据结构第3章 栈、队列和数组.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 栈、队列和数组 栈和队列都是特殊的线性表,数组是线性表的变化形式,它们都是软件设计中常用的数据结构。 主要内容 栈的定义 栈是只能在表尾插入和删除的线性表。 练习 一个栈的入栈序列是ABCDE,则其输出序列不可能是( ) A,EDCBA B,DECBA C,DCEAB D,ABCDE 栈的运算 初始化栈:InitStack(S) 取栈顶元素:GetTop(S,x) 入栈:Push(S,x) 出栈:Pop (S) 顺序栈---存储结构 以顺序存储方式存储的栈叫做顺序栈。 顺序栈---存储结构 类型说明: 顺序栈---运算(初始化) 初始化栈: void InitStack(SqStack S) { S.base=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); if(!S.base) exit(-1); S.top=S.base; S.stacksize=MAXSIZE; } 顺序栈---运算(取栈顶元素) 取栈顶元素: SElemType GetTop(SqStack S) { if(S.top==S.base) exit(-1); else return *(S.top-1); } 顺序栈---运算(入栈) 入栈: void Push (SqStack S, SElemType x) { if (S.top-S.base=S.stacksize) error(“溢出”); else *S.top++=x; } 顺序栈---运算(出栈) 链栈 用动态方式来存储栈可节省空间 采用链表存储的栈为链栈 栈的应用---数的进制转换 设计算法将十进制数转换为八进制形式。 栈的应用---表达式计算 编写程序以实现对任意输入的表达式的计算。例如表达式为12+5*(2+3)*6/2-4 基本思想: 设置操作数栈(初始为空),运算符栈(初始以#为栈底元素) 依次读入表达式中每个字符,若是操作数则进OPND栈,若是运算符则与OPTR栈的栈顶元素比较优先权 若栈顶运算符当前运算符,则入栈 若栈顶运算符=当前运算符,则栈顶运算符出栈 若栈顶运算符当前运算符,则出栈并将运算结果入栈 主要内容 队列的定义 队列是只能在一端插入、另一端删除的线性表。 队列的运算 初始化队列:init_queue(Q) 判断队列是否为空:queue_empty(Q) 取队头元素:queue_front(Q,x) 入队:enqueue(Q,x) 出队:outqueue(Q,x) 判断队列是否为满:queue_full(Q) 顺序队列---存储结构 以顺序方式存储的队列叫做顺序队列。 循环队列 顺序队列会产生“假溢出” 将数组元素data[0]看做是data[maxsize-1]的下一个储存位置,就形成了循环队列 循环队列---运算(1) 初始化队列: void init_queue(seqqueue *Q) { Q-front=0; Q-rear=0;} 循环队列---运算(2) 取队头元素: elementtype queue_front(seqqueue Q,elementtype *x) { if (queue_empty(Q) )error(“队空”); else *x=Q.data[(Q.front+1)% maxsize]); } 链队列---存储结构 头指针始终指向表头,尾指针始终指向表尾; 采用带头节点的链表形式。 链队列---运算(1) 初始化队列: void init_queue(linkqueue *Q) { Q-front=(node *)malloc(sizeof(node)); Q-rear=Q-front; Q-front-next=NULL; } 链队列---运算(2) 入队: void Enqueue(linkqueue * Q, elementtype x) { node *P=(node *)malloc(sizeof(node)); P-data=x; P-next=NULL; Q-rear-next=P; Q-rear=P; } 队列的应用---杨辉三角 设计算法,用队列计算并打印杨辉三角的前8行的内容,即输出结果如下: 主要内容 数组的定义 一维数组时有限个具有相同类型的变量组成的序列。若其中每个变量本身是一维数组,则构成二维数组。 数组的运算 对数组的运算,通常有如下两个: 给定一组下标,存取相应的数组元素

文档评论(0)

wxc6688 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档