一章栈和队列教学文稿.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文档。上传文档
查看更多
第三章 栈和队列;3.1.1 栈的定义及基本运算;3.1.1 栈的定义及基本运算;3.1.1 栈的定义及基本运算;3.1.1 栈的定义及基本运算;3.1.1 栈的定义及基本运算;栈的基本运算 InitStack(S): 初始化栈S StackEmpty(): 判断栈是否为空 Push(e): 将元素e放入栈顶 Pop(e): 移走栈顶的元素,同时由e带回该元素的值 Gettop(): 获取栈顶的元素,但不从栈中移走;3.1.2 栈的存储结构和实现;3.1.2 栈的存储结构和实现;3.1.2 栈的存储结构和实现;? 顺序栈 设S是SqStack类型的指针变量。base是栈底指针。Top是栈顶指针。 – 栈不存在条件S.base=NULL – 栈空条件S.top=S.base – 插入栈顶元素,栈顶指针S.top=S.top+1 – 删除栈顶元素,栈顶指针S.top=S.top-1 – 栈满条件S.top-S.base=S.stacksize;3.1.2 栈的存储结构和实现;(2)判断栈空 int StackEmpty(SqStack *S) { return(S.base==S.top); } (3)判断栈满 int StackFull(SqStack *S) { return(S.top-S.base=S.stacksize); };3.1.2 栈的存储结构和实现;(5) 出栈 void Pop(SqStack *S, SElemType e) { if(S.top==s.base) return UNDERFLOW; // 栈空 S.top--; e=*S.top; return; } ;3.1.2 栈的存储结构和实现;3.1.2 栈的存储结构和实现;? 链栈的基本操作 – 置空栈 void InitStack(linkStack p) { p=NULL; } – 判断栈空 int StackEmpty(linkstack p) { return p==NULL; };? 链栈的基本操作 – 进栈 void Push(linkstack p, SElemType e) { stacknode *q; q=(stacknode*)malloc(sizeof(stacknode)); q–data=e; q–next=p; p=q; //设置栈顶指针 };? 链栈的基本操作 – 退栈 SElemType Pop(linkstack p) { SElemType x; //临时变量,保存栈顶元素 linkstack q=p; if(p==NULL) error(“stack underflow.”); p=p–next; //调整栈顶指针 x=q–data; free(q); //删除栈顶元素 return x; };? 链栈的基本操作 – 取栈顶元素 SElemType GetTop(linkstack p) { if(p==NULL) error(“stack is empty.”); return p–data; };3.2 栈的应用举例;void conversion( ) { InitStack(S); //构造空栈 scanf (“%d”,n); while(n){ Push(S,n%2); n=n/2; } while(! StackEmpty(S)){ Pop(S,e); printf(“%d”,e); } };3.2.2 括号匹配 设一个表达式中可以包含三种括号:“(”和“)”、“[”和“]”、“{”和“}”,并且这三种括号可以按照任意的次序嵌套使用,考查表达式中的括号是否匹配。例如: ...[...{...[...}...]...]...[...]...(...)...)... 例: a=b+(c-d)*(e-f)); while (m(a[8]+t) {m=m+1; t=t-1;} 实现方法--利用栈进行表达式中的括号匹配 自左至右扫描表达式,若遇左括号,则将左括号入栈,若遇右括号,则将其与栈顶的左括号进行匹配,若配对,则栈顶的左括号出栈,否则出现括号不匹配错误。 思考:匹配的充要条件?;3.2.3 迷宫问题 寻找一条从入口到出口的通路。;栈;栈;迷宫问题 迷宫的表示 const int N=8; struct PosType{ int x, y; }; char maze[N][N]; //位置上的标识,是否可通过 迷宫初始化 用二层嵌套循环对迷宫赋值 迷宫求解(见教材算法) 输出栈中的路径;Sta

文档评论(0)

186****7785 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档