当前位置: 首页 > news >正文

深圳网站建设新闻在线html5制作网站

深圳网站建设新闻,在线html5制作网站,装饰设计收费标准2020,威海建设网站http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一#xff1a; 我们设定s1是入栈的#xff0c;s2是出栈的。 入队列#xff0c;直接压到s1即可 出队列#xff0c;先把s1中的元素倒入到s2中#xff0c;弹出s2中的栈顶元素#x…http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一 我们设定s1是入栈的s2是出栈的。 入队列直接压到s1即可 出队列先把s1中的元素倒入到s2中弹出s2中的栈顶元素再把s2的剩余元素全部倒回s1中。 缺点 每次只要出栈一个元素就要将元素倒来倒去麻烦 思路2 入队列时 如果s1为空把s2中所有的元素倒出压到s1中。否则直接压入s1    出队列时 如果s2不为空把s2中的栈顶元素直接弹出。否则把s1的所有元素全部弹出压入s2中再弹出s2的栈顶元素 思路1无条件地每次都要将元素倒来倒去思路2出队时较思路1简单 思路3 我们设定s1是入栈的s2是出栈的 入队列直接压入元素至s1即可 出队列如果s2不为空把s2中的栈顶元素直接弹出。否则把s1的所有元素全部弹出压入s2中再弹出s2的栈顶元素 相比于方法2入队直接压入即可~ 那么我们可以看出思路三最简单我们下面看下代码。 代码实现 1我们直接调用库里的stack来实现。一般调用库里的就行了 [cpp] view plain copy #define _CRT_SECURE_NO_WARNINGS 1   #includeiostream   using namespace std;   //两个栈实现一个队列   #includestack      templateclass T   class Queue   {   public:       void appendTail(const T x)       {           s1.push(x);       }          void deleteHead()       {             if (s2.empty())             {                 while (!s1.empty())                 {                     s2.push(s1.top());                     s1.pop();                 }                 cout  s2.top()    ;                 s2.pop();             }             else             {                  cout  s2.top()    ;                  s2.pop();                       }        }   private:       stackT s1;       stackT s2;          };         void Test()   {       Queueint q;       q.appendTail(1);       q.appendTail(2);       q.appendTail(3);       q.appendTail(4);       q.deleteHead();       q.deleteHead();       q.deleteHead();       q.deleteHead();   }      int main()   {       Test();       system(pause);       return 0;   }   2自己实现栈实现。 [cpp] view plain copy #define _CRT_SECURE_NO_WARNINGS 1   #includeiostream   using namespace std;      #includeassert.h      //直接实现Stack也可以用适配器实现栈或者用库。   //将Stack基本功能实现如下   templateclass T      class Stack   {   public:       Stack()           :_array(NULL)           , _size(0)           , _capacity(0)       {}          StackT(const StackT s)           : _array(new T[s._capacity])       {           swap(_array, s._array);           swap(_size, s._size);           swap(_capacity, s._capacity);       }          StackT operator(const StackT s)       {           if (s ! this)           {               swap(_array, s._array);               swap(_size, s._size);               swap(_capacity, s._capacity);           }           return *this;       }          ~Stack()       {           if (_array)           {               delete[] _array;               _array  NULL;           }       }          void _CheckCapacity()       {           if (_size  0)           {               _capacity  3;               _array  new T[_capacity];           }           if (_size  _capacity)           {               _capacity * 2;               T* tmp  new T[_capacity];               for (int index  0; index  _size; index)               {                   tmp[index]  _array[index];               }               delete[] _array;               _array  tmp;           }       }          void Push(const T x)       {           _CheckCapacity();           _array[_size]  x;       }          void Pop()       {           if (_size  0)           {               return;           }           --_size;       }          size_t Size()       {           return _size;       }          bool Empty()       {           return Size()  0;       }          T Top()       {           assert(_size  0);           return _array[_size - 1];       }      private:       T* _array;       size_t _size;       size_t _capacity;   };         templateclass T   class Queue   {   public:       void InQueue(const T x)       {           s1.Push(x);       }          void OutQueue()       {           //栈s2为空则将栈s1的元素全部倒入s2中再弹出最上面的那个元素           if (s2.Empty())           {               while (!s1.Empty())               {                   s2.Push(s1.Top());                   s1.Pop();               }               s2.Pop();           }              //栈s2不为空直接弹出元素           else           {               s2.Pop();           }       }                 void Print()    //打印队列元素分四种情况。       {           if (s1.Empty()  s2.Empty())           {               cout  The Queue is Empty!;           }              else if (!s1.Empty()  s2.Empty())           {               while (!s1.Empty())               {                   s2.Push(s1.Top());                   s1.Pop();               }                  while (!s2.Empty())               {                   cout  s2.Top()    ;                   s2.Pop();               }           }              else if (s1.Empty()  !s2.Empty())           {               while (!s2.Empty())               {                   cout  s2.Top()    ;                   s2.Pop();               }           }              else           {               while (!s2.Empty())               {                   cout  s2.Top()    ;                   s2.Pop();               }                  while (!s1.Empty())               {                   s2.Push(s1.Top());                   s1.Pop();               }                  while (!s2.Empty())               {                   cout  s2.Top()    ;                   s2.Pop();               }           }           cout  endl;       }      private:       StackT s1;    //入队       StackT s2;    //出队   };            //测试两个栈实现一个队列   void Test1()   {       Queueint q1;       q1.InQueue(1);       q1.InQueue(2);       q1.InQueue(3);       q1.InQueue(4);       /*q1.Print();*/          q1.OutQueue();       /*q1.Print();*/       q1.InQueue(5);       q1.InQueue(6);       q1.InQueue(7);          q1.Print();   }            int main()   {       Test1();       system(pause);       return 0;   }   (1个细节) 注意再将元素倒入另一个栈时代码并不是先pop,再push。因为这样push后元素就找不到了。因此要先访问到栈顶元素top,再push,而后pop。 本文出自 “Han Jings Blog” 博客请务必保留此出处http://10740184.blog.51cto.com/10730184/1763006
http://wiki.neutronadmin.com/news/37267/

相关文章:

  • 北京网站建设cnevo织梦网站被黑
  • 网站站点创建成功是什么意思电商网站改版方案
  • 苏州的网站建设公司怎么在建设银行网站购买国债
  • 2024免费网站推广大全做网站 使用权 所有权
  • 企业网站兰州建设费用专业建站公司提供详细的功能描述及报价
  • 做网站好的品牌网站360全景图怎么做
  • 快捷的网站建设软件广告策划书不包括什么内容
  • 东山县建设银行网站应用商店app下载安装
  • 合肥网站建设yjhlw短链接生成接口
  • 手机界面设计网站it外包兼职
  • 网站地图对seowordpress防盗链接
  • 国内外优秀设计网站做网站用别人的源码可以吗
  • 广东城乡建设厅网站2022企业所得税优惠政策
  • 网站建设的目标用户是全国房地产最新消息
  • 微信网站推广公司网站设计规划
  • 电子商务旅游网站建设论文营销型网站建设的目的
  • wordpress 站点主页手机网站维护费
  • 公司网站字体网站托管平台
  • 重庆网站建设技术支持餐饮品牌策划设计公司
  • 深圳工程造价建设信息网站如何制作淘宝详情页图片
  • 网站建设标题全球十大软件公司排名
  • 专业的网站建设电话买一个网页需要多少钱
  • 网站建设人员春招计划沈阳哪里可以做网站营销
  • 企业门户网站开发代码新网站做seo 的效果
  • 做网站建设的公司是什么类型南和网站建设公司太原网站建设
  • 哈尔滨网站制作软件龙岩市城乡规划建设局网站
  • 十大搜索引擎神器企业整站seo
  • 绿色健康网站模板德州建设网站有
  • 手机网站主机做的网站怎么放到域名
  • 殡仪馆做网站的好处郑州网站建设招商