习题三 - 副本

习题三 - 副本

ID:38291046

大小:96.86 KB

页数:4页

时间:2019-06-07

习题三 - 副本_第1页
习题三 - 副本_第2页
习题三 - 副本_第3页
习题三 - 副本_第4页
资源描述:

《习题三 - 副本》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1设有一个栈,元素进栈的次序为a,b,c。问经过栈操作后可以得到哪些输出序列?cba;abc;acb;bac;bca;2循环队列的优点是什么?如何判断它的空和满?优点:可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分利用。判断循环队列的空或满不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满。三是设置一计数器记录队列中元素的总数,不仅可判别空或满,还可以得到队列中元素的个数3设有一个静态顺序队列,向量

2、大小为MAX,判断队列为空的条件是什么?队列满的条件是什么?队列为空:front=rear。队满:rear=MAX-1或front=rear(队首指针front,一个队尾指针rear)4设有一个静态循环队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么?循环队列为空:front=rear。循环队列满:(rear+1)%MAX=front。(队首指针front,一个队尾指针rear)5利用栈的基本操作,写一个返回栈S中结点个数的算法intStackSize(SeqStackS),并说明S为何不作为指针参数的算法?int

3、StackSize(SeqStackS){//计算栈中结点个数 intn=0;  if(!EmptyStack(&S))   {    Pop(&S);    n++;   }  returnn;}上述算法的目的只要得到S栈的结点个数就可以了。并不能改变栈的结构。所以S不用指针做参数,以避免对原来的栈中元素进行任何改变。系统会把原来的栈按值传递给形参,函数只对形参进行操作,最后返回元素个数。6一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。试为此双向栈设计初始化InitStack(S),入栈Push(S,

4、i,x),出栈Pop(S,i,x)算法,其中i为0或1,用以表示栈号。解:双向栈其实和单向栈原理相同,只是在一个向量空间内,好比是两个头对头的栈放在一起,中间的空间可以充分利用。双向栈的算法设计如下:  //双向栈的栈结构类型与以前定义略有不同  #defineStackSize100//假定分配了100个元素的向量空间  #definecharDatatype  typedefstruct{  DatatypeData[StackSize]   inttop0;//需设两个指针  inttop1;  }DblStack  voidI

5、nitStack(DblStack*S)  {//初始化双向栈  S->top0=-1;  S->top1=StackSize;//这里的top2也指出了向量空间,但由于是作为栈底,因此不会出错}intEmptyStack(DblStack*S,inti)  {//判栈空(栈号i)    return(i==0&&S->top0==-1

6、

7、i==1&&S->top1==StackSize);  }intFullStack(DblStack*S)  {//判栈满   return(S->top0==S-top1-1);  }voidPu

8、sh(DblStack*S,inti,DataTypex)  {//进栈(栈号i)   if(FullStack(S))    Error("Stackoverflow");//上溢、退出运行   if(i==0)S->Data[++S->top0]=x;//栈0入栈   if(i==1)S->Data[--S->top1]=x;//栈1入栈  }DataTypePop(DblStack*S,inti)  {//出栈(栈号i)   if(EmptyStack(S,i))    Error("Stackunderflow");//下溢退

9、出   if(i==0)    return(S->Data[S->top0--]);//返回栈顶元素,指针值减1   if(i==1)    return(S->Data[S->top1++]);//因为这个栈是以另一端为底的,所以指针值加1。  }7设Q[0,6]是一个静态顺序队列,初始状态为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。a,b,c,d入队a,b,c出队i,j,k,l,m入队d,i出队n,o,p,q,r入队8假设Q[0,5]是一个循环队列,初始状态

10、为front=rear=0,请画出做完下列操作后队列的头尾指针的状态变化情况,若不能入对,请指出其元素,并说明理由。d,e,b,g,h入队d,e出队i,j,k,l,m入队b出队n,o,p,q,r入队

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。