习题三 - 副本.docxVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设有一个栈,元素进栈的次序为a, b, c。问经过栈操作后可以得到哪些输出序列? cba; abc; acb;bac; bca; 循环队列的优点是什么?如何判断它的空和满? 优点:可以克服顺序队列的“假上溢”现象,能够使存储队列的向量空间得到充分利用。 判断循环队列的空或满不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满。三是设置一计数器记录队列中元素的总数,不仅可判别空或满,还可以得到队列中元素的个数 设有一个静态顺序队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么? 队列为空:front=rear。队满:rear=MAX -1或front=rear (队首指针front ,一个队尾指针rear) 设有一个静态循环队列,向量大小为MAX,判断队列为空的条件是什么?队列满的条件是什么? 循环队列为空:front=rear 。 循环队列满:(rear+1)%MAX=front。 (队首指针front ,一个队尾指针rear) 利用栈的基本操作,写一个返回栈S中结点个数的算法intStackSize(SeqStack S) ,并说明S为何不作为指针参数的算法? intStackSize (SeqStack S) {//计算栈中结点个数  int n=0;   if(!EmptyStack(S))    {     Pop(S);     n++;    }   return n; } 上述算法的目的只要得到S栈的结点个数就可以了。并不能改变栈的结构。所以S不用指针做参数,以避免对原来的栈中元素进行任何改变。系统会把原来的栈按值传递给形参,函数只对形参进行操作,最后返回元素个数。 一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。试为此双向栈设计初始化InitStack(S) ,入栈Push(S,i,x),出栈Pop(S,i,x)算法,其中i为0或1 ,用以表示栈号。 解:双向栈其实和单向栈原理相同,只是在一个向量空间内,好比是两个头对头的栈放在一起,中间的空间可以充分利用。双向栈的算法设计如下:   //双向栈的栈结构类型与以前定义略有不同   #define StackSize 100 // 假定分配了100个元素的向量空间   #define char Datatype   typedefstruct{   DatatypeData[StackSize]   int top0; //需设两个指针   int top1;   }DblStack   voidInitStack( DblStack *S )   { //初始化双向栈   S-top0 = -1;   S-top1 = StackSize; //这里的top2也指出了向量空间,但由于是作为栈底,因此不会出错 } intEmptyStack( DblStack *S, int i )   { //判栈空(栈号 i)     return (i == 0 S-top0 == -1|| i == 1 S-top1== StackSize) ;   } intFullStack( DblStack *S)   { //判栈满    return (S-top0 == S-top1-1);   } void Push(DblStack *S, int i, DataType x)   { //进栈(栈号i)    if (FullStack( S ))     Error(Stack overflow);//上溢、退出运行    if ( i == 0) S-Data[ ++ S-top0]= x; //栈0入栈    if ( i == 1) S-Data[ -- S-top1]= x; // 栈1入栈   } DataType Pop(DblStack *S, int i)   { //出栈(栈号i)    if (EmptyStack ( S,i) )     Error(Stack underflow);//下溢退出    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,

文档评论(0)

qbjzmxj5904 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档