- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 *3.3 栈和递归的实现 3.4 队列 3.1 栈(stack) 3.1.1栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表, 表尾—栈顶,插入、删除端 (Top) 表头—栈底, 不含元素的空表称空栈 特点:先进后出(FILO) 或后进先出(LIFO) 如:假设栈S=(a1,a2,a3,…an),则a1称为栈底元素,an为栈顶元素。栈中元素按a1,a2,a3,…an的次序进栈,退栈的第一个元素应为栈顶元素。 顺序栈示意图 实现过程: *S.top++=e; return OK; } 栈使用的完整C程序实例 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define OVERFLOW -1 #define ERROR 0 typedef struct{ int *base; int *top; int stacksize; }sqstack; void push(sqstack *s,int e) { if(s-top-s-base=s-stacksize){ s-base=(int*)realloc(s-base,(s- stacksize+STACKINCREMENT)*sizeof(int)); if (!s-base)exit(OVERFLOW); s-top=s-base+s-stacksize; s-stacksize+=STACKINCREMENT; } *(s-top++)=e; } main() { sqstack s; int n,m,e; initstack(s); clrscr(); scanf(%d %d,n,m); while(n){ push(s,n%m); n=n/m; } while(!(s.top==s.base)) { pop(s,e); printf(%d,e); } } 问题提出: 在迷宫中寻找通路以到达出口。 求解思想:回溯法是一种不断试探且及时纠正错误的有哪些信誉好的足球投注网站方法。下面的求解过程采用回溯法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达新点,否则试探下一方向 ; 若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的通路都探索到,或找到一条通路,或无路可走又返回到入口点。 在求解过程中,为了保证在到达某一点后不能向前继续行走(无路)时,能正确返回前一点以便继续从下一个方向向前试探,则需要用一个栈保存所能够到达的每一点的下标及从该点前进的方向。 迷宫求解的算法思想: 设定当前位置的初值为入口位置; do { 若当前位置可通, 则{ 将当前位置插入栈顶; 若该位置是出口位置、则结束; 否则切换当前位置的东邻方块为新的当前位置; } 否则 若栈不空且栈顶位置尚有其它方向未经探索, 则设定新的当前位置为顺时针方向旋转找到的栈顶位置的下一相邻块; 若栈不空但栈顶位置的四周均不可通, 则{ 删去栈顶位置; 若栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至空栈; } }while (栈不空); 需要解决的四个问题: 1.表示迷宫的数据结构: 设迷宫为m行n列,利用maze[m][n]来表示一个迷宫,maze[i][j]=0或1; 其中:0表示通路,1表示不通,当从某点向下试探时,中间点有4个方向可以试探,(见图3.4)而四个角点有2个方向,其它边缘点有3个方向,为使问题简单化我们用maze[m+2][n+2]来表示迷宫,而迷宫的四周的值全部为1。这样做使问题简单了,每个点的试探方向全部为4,不用再判断当前点的试探方向有几个,同时与迷宫周围是墙壁这一实际问题相一致。 入口坐标为(1,1),出口坐标为(m,n)。 迷宫的定义如下: #define m 8 /* 迷宫的
文档评论(0)