第三章_栈和队列作业答案.ppt_第1页
第三章_栈和队列作业答案.ppt_第2页
第三章_栈和队列作业答案.ppt_第3页
第三章_栈和队列作业答案.ppt_第4页
第三章_栈和队列作业答案.ppt_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 栈和队列,作业评讲,3.4 3.6 3.7写作业本上交,3.1 链栈中为何不设置头结点 3.2 循环队列的优点是什么? 如何判别它的空和满? 3.3 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢? 3.4 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈) 3.5 设计算法判断一个算术表达式的圆括号是否正确配对。 (提示: 对表达式进行扫描,凡遇到(就进栈,遇)就退掉栈顶的(,表达式被扫描完毕,栈应为空。,3.6 试将下列递归过程

2、改写为非递归过程 void test (int 3.7 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法.,3.1 链栈中为何不设置头结点? 链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。,3.2 循环队列的优点是什么? 如何判别它的空和满? 循环队列的优点是:它可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分的利用。 判别循环队列的空或满不能以头尾指针是否相等来确定,一般是通过以下几种

3、方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间。每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。,3.3 设长度为n的链队用单循环链表表示,若设头指针,则入队、出队操作的时间为何? 若只设尾指针呢? 当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。 若只设尾指针,则出、入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。,3.4 回文是指正读反读均相同

4、的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈),Typedef struct selemtype *base; selemtype *top; int stacksize; sqstack; Status huiwen(sqstack S, char *ch) int m,i,j; S.base=(selemtype *)malloc(STACK_INIT_SIZE*sizeof(selemtype); if (!S.base) exit(OVERFLOW); S.top=s.base; S.sta

5、cksize=STACK_INIT_SIZE; m=strlen(ch); for(i=0;im/2;i+) *s.top=chi; s.top+; if (m%2!=0) j=m/2+1; else j=m/2; for(;jm;j+) s.top=s.top-1; if (chj!=*s.top) break; if (i= =m) return OK; else return ERROR; ,提示: 对表达式进行扫描,凡遇到(就进栈,遇)就退掉栈顶的(,表达式被扫描完毕,栈应为空。根据提示,可以设计算法如下:#include #include stack.hint PairBracket

6、( char *S)/检查表达式中括号是否配对int i;SeqStack T; /定义一个栈InitStack ( / 由栈空否返回正确配对与否,3.5 设计算法判断一个算术表达式的圆括号是否正确配对,3.6 试将下列递归过程改写为非递归过程,void test1(int ,3.7 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法.,typedef struct queuenode Datatype data; struct queuenode *next;QueueNode;/以上是结点类型的定义 typed

7、ef struct queuenode *rear;LinkQueue;/只设一个指向队尾元素的指针 status InitQueue( LinkQueue *Q) Q-rear=(QueueNode *) malloc (sizeof(QueueNode); if (!Q-rear) exit(OVERFLOW); Q-rear-next = Q-rear; int EmptyQueue( LinkQueue *Q) if (Q-rear= =Q-rear-next) return 1; else return 0; void EnQueue( LinkQueue *Q, Datatype x) QueueNode *p; p=(QueueNode *) malloc (sizeof(QueueNode); if(!p) exit(OVERFLOW); p-data=x; p-next=NULL; p-next=Q-rear-next; Q-rear-next=p; Q-rear=p; Datatype DeQueue( LinkQueue *Q) Datatype x; QueueNode *p; if (Q-rear= =Q-rear-next) E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论