数据结构-PPT第三章-栈和队列概要.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-PPT第三章-栈和队列概要

第三章 栈和队列 3.1 栈(stack) 栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈。 顺序栈 顺序栈示意图 = 3.2 栈的应用 3.2.1 数制转换 void conversion( ) { initstack(S); scanf (“%d”,N); while(N){ push(S,N%8); N=N/8; } while(! Stackempty(s)){ pop(S,e); printf(“%d”,e); } }//conversion 栈使用的完整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);//n为输入数,m为基数 while(n){ push(s,n%m);n=n/m; } while(!(s.top==s.base)) { pop(s,e); printf(%d,e); } } 从演示过程可见用“穷举求解”的方法解迷宫的规则:   1.从入口进入迷宫之后,不管在迷宫的哪一个位置上,都是先往东走,如果走得通就继续往东走,如果在某个位置上往东走不通的话,就依次试探往南、往西和往北方向,从一个走得通的方向继续往前直到出口为止; 2.如果在某个位置上四个方向都走不通的话,就退回到前一个位置,换一个方向再试,如果这个位置已经没有方向可试了就再退一步,如果所有已经走过的位置的四个方向都试探过了,一直退到起始点都没有走通,那就说明这个迷宫根本没有通道; 3.所谓“走不通”不单是指遇到“障碍物挡路”,还有“已经走过的路不能重复走第二次”,它包括“曾经走过而没有走通的路”。 显然为了保证在任何位置上都能沿原路退回,需要用一个后进先出的结构即栈来保存从入口到当前位置的路径。并且在走出出口之后,栈中保存的正是一条从入口到出口的路径。 else { // 当前位置不能通过 if (!StackEmpty(S)) { Pop (S,e); while (e.di==4 !StackEmpty(S)) { MarkPrint (e.seat); Pop (S,e);} // 留下不能通过的标记,并退回一步} // while if (e.di4) { e.di++; Push ( S, e);// 换下一个方向探索 curpos = NextPos (curpos, e.di ); // 设定当前位置是该新方向上的相邻块 } // if } // if } // else } while ( !StackEmpty(S) ); return (FALSE); } // MazePa

文档评论(0)

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

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

1亿VIP精品文档

相关文档