栈(stack)队列(queue).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文档。上传文档
查看更多
栈(stack)队列(queue)

栈 ( Stack ) 队列 ( Queue ) ; 3.1栈(stack) 3.1.1栈的定义和操作 1.定义和术语 ▲ 栈----限定在表尾作插入、删除操作的线性表。 (a1,a2, ,...,an) ←插入元素(进栈) ↑ ↑ ↘删除元素(出栈) 表头 表尾 (栈底) (栈顶) ;▲ 进栈----插入一个元素到栈中。或:入栈、推入、压入、push。 ▲ 出栈----从栈删除一个元素。或:退栈、上托、弹出、pop。 ▲ 栈顶----表中允许插入、删除元素的一端(表尾)。 ▲ 栈顶元素----处在栈顶位置的元素。 ▲ 栈底----表中不允许插入、删除元素的一端。 ▲ 空栈----不含元素的栈。;▲ 栈的元素的进出原则: “后进先出”,“Last In First Out”。 ▲ 栈的别名: “后进先出”表、“LIFO”表、反转存储器、地窖。;2.模拟铁路调度站 讨论:假设A,B,C三节车厢依次进入调度站中,请问有多少种不同输出?;(1)输入A,B,C,产生输出A,B,C的过程:;(2)输入A,B,C,产生输出C,B,A的过程:;(3)输入A,B,C,产生输出B,C,A的过程:; 当A,B,C依次进栈,C出栈后,由于栈顶元素是B,栈底 元素是A,而A不能先于B出栈,所以不能在输出序列中, 使A 成为C的直接后继, 即不可能由输入A,B,C产生输出C,A,B。 一般地,输入序列(...,ai,...,aj,...,ak,...)到 栈中,不能得到输出序列(...,ak,...,ai,...,aj,...)。; 讨论: 如果依次进栈的元素有A,B,C,D四个, ,又可以得到多少种输出? 如果有n个输入元素呢? (1) A,B,C,D (7) B,A,C,D (13) C,A,B,D (19) D,B,C,A (2) A,B,D,C (8) B,A,D,C (14) C,A,D,B (20) D,B,A,C (3) A,C,B,D (9) B,C,A,D (15) C,B,A,D (21) D,C,B,A (4) A,C,D,B (10) B,C,D,A (16) C,B,D,A (22) D,C,A,B (5) A,D,B,C (11) B,D,A,C (17) C,D,A,B (23) D,A,B,C (6) A,D,C,B (12) B,D,C,A (18) C,D,B,A (24) D,A,C,B 共5+5+3+1=14种 ;3.1.2 栈的存储表示和操作实现 ;2.顺序栈的描述,进栈、出栈算法 a) 栈的初始化 typedef struct //定义结构体 { char stack[max]; int top; }qstype; ? void initiateqs(qstype *s) //初始化 { s-top=-1; } ? ; b) 进栈算法 int push(qstype *s,int x) //进栈 { if(s-top=max-1) //栈满则结束 return(0); else { s-top++; //将x进栈 s-stack[s-top]=x; return(1); } };c) 出栈算法 int pop(qstype *s) //出栈 { if(s-top0) //栈空 return(0); else { s-top--; //出栈 return(s-stack[s-top+1]); } } ;3.链式栈----使用不带表头结点的单链表 (1)结点和指针的定义 struct node { ElemType data; //data为抽象元素类型 struct node *next; //next为指针类型 } *top=NULL; //初始化,置top为空栈 (2)非空链式栈的一般形式;(3)链式栈的进栈算法://压入元素e到top为顶指针的链式栈 struct node *push_link(struct node *top,Elemtype e) { struct node *p; int leng=sizeof(struct node); //确定新结点空间的大小 p=(struct node *)malloc(leng);//生成新

文档评论(0)

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

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

1亿VIP精品文档

相关文档