本章讲述的是基本的数据结构,如栈、队列和链表。这些都是最最基本的数据结构,具体的就不再啰嗦。然后本章也没有什么需要特别注意的点,哦,有一个小节:指针和对象的实现,可以认真看一下,大概就是用其他的实现方式来代替指针和对象的实现,因为有些语言不支持指针和对象数据类型,那在实现这种链式的数据结构就无法表示,本节介绍的方法就是利用数组和数组下标来构造对象和指针,说白了,就是利用数组来表示链式对象。个人感觉意义不大,权当了解得了。

  结合一些常见的笔试面试题,我就用3个习题来总结这一章吧。

1、习题10.1-6:说明如何用两个栈实现一个队列,并分析相关队列操作的运行时间。

  两个栈实现一个队列和两个队列实现一个栈的思路都是一样的

算法思路:

1)StackA和StackB,StackA作为存储栈,StackB作为辅助栈;

2)入队列操作:假如StackA中有元素,则首先将StackA中元素出栈放入StackB中,再把入队列元素放入StackA,然后再把StackB中的元素出栈放入StackA中

3)出队列操作:以上操作保证先入队列的元素先出,所以,直接从StackA中出栈即可。

如下直观的图示:

算法导论第十章 栈队列和链表

代码如下:

 1 #include <iostream>
 2 #include <stack>
 3 #include <cstdlib>
 4 
 5 using namespace std;
 6 
 7 /************************************************************************/
 8 /*    两个栈实现队列
 9 /*    采用C++模板是实现
10 /************************************************************************/
11 template<class T>
12 class StackQueue
13 {
14 public:
15     StackQueue(){}
16     ~StackQueue(){}
17 
18     void Enqueue(const T& elem);
19     T    Dequeue();
20     bool Empty() const;
21 
22 private:
23     stack<T>    m_stackA;
24     stack<T>    m_stackB;
25 };
26 
27 template<class T>
28 void StackQueue<T>::Enqueue(const T& elem)
29 {
30     if (m_stackA.empty())
31         m_stackA.push(elem);
32     else {
33         while (!m_stackA.empty()) {
34             m_stackB.push(m_stackA.top());
35             m_stackA.pop();
36         }
37         m_stackA.push(elem);
38     }
39 
40     while(!m_stackB.empty()) {
41         m_stackA.push(m_stackB.top());
42         m_stackB.pop();
43     }
44 }
45 
46 template<class T>
47 T StackQueue<T>::Dequeue()
48 {
49     T retElem;
50     if (!m_stackA.empty()) {
51         retElem = m_stackA.top();
52         m_stackA.pop();
53     }
54     return retElem;
55 }
56 
57 template<class T>
58 bool StackQueue<T>::Empty() const
59 {
60     if (m_stackA.empty())
61         return true;
62     else
63         return false;
64 }
65 
66 // int main()
67 // {
68 //     StackQueue<int> SQ;
69 //     for (int i = 1; i <= 5; i ++) {
70 //         SQ.Enqueue(i);
71 //     }
72 // 
73 //     for (int i = 1; i <= 5; i ++) {
74 //         cout << SQ.Dequeue();
75 //     }
76 //     return 0;
77 // }
View Code

相关文章:

  • 2021-12-10
  • 2022-01-15
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
  • 2021-06-23
  • 2021-12-21
猜你喜欢
  • 2021-07-16
  • 2021-12-24
  • 2021-11-21
  • 2022-02-21
  • 2022-01-11
  • 2022-02-15
相关资源
相似解决方案