博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题7:用两个栈实现队列
阅读量:5328 次
发布时间:2019-06-14

本文共 1960 字,大约阅读时间需要 6 分钟。

stack1负责如队列,stack2负责出队列,当stack2为空时,要将stack1的元素及时放入stack2

两个队列也可以实现一个栈,P61

写程序的时候出了两个问题:

if (stack2.empty())    {        while (!stack1.empty())        {            stack2.push(stack1.top());            stack1.pop();        }    }

不要写成while(!stack1.empty() && !stack2.empty()),这样的话只会放入stack1中的一个元素

另外模板函数前不要忘记加类型

template <typename T> void CQueue<T>::appendTail(const T& node)

template <typename T> T CQueue<T>::deleteHead()

完整程序:

1 #include 
2 using namespace std; 3 #include
4 5 template
class CQueue 6 { 7 public: 8 CQueue(void); 9 ~CQueue(void);10 11 // 在队列末尾添加一个结点12 void appendTail(const T& node);13 14 // 删除队列的头结点15 T deleteHead();16 17 private:18 stack
stack1;19 stack
stack2;20 };21 22 template
CQueue
::CQueue(void)23 {24 }25 26 template
CQueue
::~CQueue(void)27 {28 }29 30 template
void CQueue
::appendTail(const T& node)31 {32 stack1.push(node);33 }34 35 template
T CQueue
::deleteHead()36 {37 if (stack2.empty())38 {39 while (!stack1.empty())40 {41 stack2.push(stack1.top());42 stack1.pop();43 }44 }45 46 if (stack2.size() == 0)47 throw new exception("queue is empty");48 49 T head = stack2.top();50 stack2.pop();51 52 return head;53 54 }55 56 void Test(char actual, char expected)57 {58 if (actual == expected)59 printf("Test passed.\n");60 else61 printf("Test failed.\n");62 }63 64 int main()65 {66 CQueue
queue;67 68 queue.appendTail('a');69 queue.appendTail('b');70 queue.appendTail('c');71 72 char head = queue.deleteHead();73 Test(head, 'a');74 75 head = queue.deleteHead();76 Test(head, 'b');77 78 queue.appendTail('d');79 head = queue.deleteHead();80 Test(head, 'c');81 82 queue.appendTail('e');83 head = queue.deleteHead();84 Test(head, 'd');85 86 head = queue.deleteHead();87 Test(head, 'e');88 89 system("pause");90 return 0;91 }

 

转载于:https://www.cnblogs.com/raichen/p/5635906.html

你可能感兴趣的文章
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
1201 网页基础--JavaScript(DOM)
查看>>