用两个栈实现一个队列

打印 上一主题 下一主题

主题 964|帖子 964|积分 2892

用两个栈实现一个队列



  • 栈的特性:后进先出,只能在一端进栈和出栈
  • 队列的特性:先进先出,只能在一端进行入队,在另一端出队
  1. //队列:先进先出  栈:后进先出  利用栈s1和s2实现队列,可以选择把栈s1作为入队缓存,把栈s2作为出队缓存
  2. /*  1.s1未满 s2未满  可以入栈
  3.     2.s1已满 s2空  可以入栈
  4.     3.s1已满 s2未满或者满  不可以入栈
  5. */
  6. //入队
  7. bool enQueue(s1,s2,int x)
  8. {
  9.     int temp=0;
  10.     if(s1->Top+1>=s1->maxSize)//如果s1栈已满
  11.     {
  12.         //说明栈s1已满,此时分为两种情况(栈s2空 or 栈s2不空)
  13.                 if ( isEmpty(s2) )//栈s2为空时
  14.         {
  15.             while(!isEmpty(s1))
  16.             {
  17.                 pop(s1,&temp);//s1中元素出栈
  18.                 push(s2,temp);//s2中元素进栈
  19.             }
  20.             push(s1,x);
  21.         }
  22.         else//s2不为空时
  23.         {
  24.             return false;
  25.         }
  26.     }
  27.     else//s1没满
  28.     {
  29.         push(s1,x);//新加入的元素直接进栈
  30.     }
  31.     return true;
  32. }
  33. //判断队列是否为空
  34. int isQueueEmpty(s1,s2)
  35. {
  36.     //return (s1->Top=s1->Bottom&&s2->Top=s2->Bottom)?true:false;
  37.     if (isEmpty(s1) && isEmpty(s2))
  38.         {
  39.                 return 1;
  40.         }
  41.         else
  42.                 return 0;
  43. }
  44. //出队
  45. bool enQueue(s1,s2,&x)
  46. {
  47.     //判断队列是否空,如果为空就无法出队
  48.     if(isQueueEmpty(s1,s2))
  49.     {
  50.         return false;
  51.     }
  52.     //此时有两种情况,s2不为空时 和s2为空时
  53.     if(!isEmpty(s2))
  54.     {
  55.         pop(s2,&x);//x直接出栈
  56.     }
  57.     else
  58.         {
  59.                 //说明栈s2为空,此时需要把栈s1的元素依次出栈到s2中
  60.                 while( ! isEmpty(s1) )
  61.                 {
  62.                         pop(s1,&temp); //把出栈元素暂时存储在temp中
  63.                         push(s2,temp); //把变量temp中的元素入栈到s2
  64.                 }
  65.                 pop(s2,&x);
  66.         }
  67.     return true;
  68. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表