数据结构之栈的应用.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;第二章?数据结构与算法;2.3 栈和队列;2.3.1 栈 2.3.1.1栈的定义 栈:限定只能在表的一端进行插入和删除的特殊的线性表 设栈s=(a1,a2,. . . ,ai,. . . ,an), 其中a1是栈底元素, an是栈顶元素。 ;2.3.1 栈 2.3.1.1栈的定义 栈:限定只能在表的一端进行插入和删除的特殊的线性表 设栈s=(a1,a2,. . . ,ai,. . . ,an), 其中a1是栈底元素, an是栈顶元素。 栈顶(top):允许插入和删除的一端; 约定top始终指向新数据元素将存放的位置。 栈底(bottom):不允许插入和删除的一端。;栈中的运算:1.设置空栈 ; 2. 插入一个新的栈顶元素 3. 删除栈顶元素; 4. 读取栈顶元素 。 ;2.3.1.2栈的存储结构 顺序栈、链栈;· 进栈算法 #define statcksize 100 int push(int s[ ], int x, int *ptop);出栈算法: int pop(int s[ ], int *ptop, int *py); x;进栈算法 int lpush(Lstack s, int e) { p=(Lstack)malloc(sizeof(lnode)); p-data=e; p-next=s; s=p; return (1); } ;进栈算法 int lpush(Lstack s, int e) { p=(Lstack)malloc(sizeof(lnode)); p-data=e; p-next=s; s=p; return (1); } ;进栈算法 int lpush(Lstack s, int e) { p=(Lstack)malloc(sizeof(lnode)); p-data=e; p-next=s; s=p; return (1); } ;进栈算法 int lpush(Lstack s, int e) { p=(Lstack)malloc(sizeof(lnode)); p-data=e; p-next=s; s=p; return (1); } ;进栈算法 int lpush(Lstack s, int e) { p=(Lstack)malloc(sizeof(lnode)); p-data=e; p-next=s; s=p; return (1); } ;r; (2)?? ?递归算法: ;函数的递归调用;int f1(x) int x; { int y,z; ….. z=f2( y); …… return (2*z); };特点 是无终止的递归调用,因此,应该给定一个限制递归次数的条件。; float fac ( int n) { float f; if(n0) printf(“n0,data error!\n”); else if(n= =0||n= =1) f=1; else f=fac(n-1)* n ; return f; };以求4的阶乘为例:;利用栈实现递归调用;递归的执行情况分析 ;运算符: ** / * + - ( ) 界限符: ;;A*B + C/D;;输入:表达式符号序列;Push (OS, “;” , top2); t=0; //表示扫描下一个符号 while (t 2) { IF t==0 THEN read W;;4、 地图四染色问题 “四染色”定理是计算机科学中著名的定理之一。 使地图中相邻的国家或行政区域不重色,最少可用四种颜色对地图着色。 证明此定理的结论,利用栈采用回溯法对地图着色。 思想:对每个行政区编号:1-7 对颜色编号;a、b、c、d; 从第一号行政区开始逐一染色,每一个区域逐次用四种颜色进行试探,若所取颜色与周围不重,则用栈记下来该区域的色数,否则依次用下一色数进行试探。若出现a-d均与周围发生重色,则需退栈回溯,修改当前栈顶的色数。; 0;;Void mapcolor(int R[][],int n,int s[]) { s[1]=1; // 1号区域染1色 I=2; J=1; // I为区域号,J为染色号 while ( I=n) { while(( J=4)(I=n))

文档评论(0)

***** + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档