c++中栈与队列的实现

  1. 栈:具有先进后出的特点,且只能在一端进行插入与删除的操作,栈的实现如下所示
  2. struct truetype
  3. {
  4. bool get()
  5. {
  6. return true;
  7. }
  8. };
  9. struct falsetype
  10. {
  11. bool get()
  12. {
  13. return false;
  14. }
  15. };
  16. template<class T>
  17. struct typetraits
  18. {
  19. typedef falsetype  isnpodtype;
  20. };
  21. template <>
  22. struct typetraits<int>
  23. {
  24. typedef truetype  ispodtype;
  25. };
  26. template<class T>
  27. class stack
  28. {
  29. protected:
  30. T *_a;
  31. size_t _top;
  32. size_t _capacity;
  33. public:
  34. stack()
  35. : _top(0)
  36. , _capacity(3)
  37. {
  38. _a = new T[_capacity];
  39. }
  40. ~stack()
  41. {
  42. if (_a)
  43. delete[] _a;
  44. }
  45. void  checkcapacity()
  46. {
  47. if (_top == _capacity)
  48. {
  49. _capacity = 2 * _capacity;
  50. T *tem = new T[_capacity];
  51. if ((typetraits<T>::ispodtype()).get())
  52. {
  53. memcpy(tem, _a, sizeof(T)*_capacity);
  54. delete[]_a;
  55. _a = tem;
  56. }
  57. else
  58. {
  59. int i = 0;
  60. for (i = 0; i < _top; i++)
  61. {
  62. tem[i] = _a[i];
  63. }
  64. delete[]_a;
  65. _a = tem;
  66. }
  67. }
  68. }
  69. void push(const T&x)
  70. {
  71. checkcapacity();
  72. _a[_top] = x;
  73. _top++;
  74. }
  75. void pop()
  76. {
  77. _top--;
  78. }
  79. bool Empty()
  80. {
  81. return _top == 0;
  82. }
  83. T &Top()
  84. {
  85. if (_top > 0)
  86. {
  87. size_t ret = _top;
  88. _top--;
  89. return _a[ret - 1];
  90. }
  91. }
  92. };
  93. int main()
  94. {
  95. stack<int> s1;
  96. s1.push(1);
  97. s1.push(2);
  98. s1.push(3);
  99. s1.push(4);
  100. while (!s1.Empty())
  101. {
  102. cout << s1.Top() << " ";
  103. }
  104. getchar();
  105. return 0;
  106. }

2.队列:具有队头插入,队尾删除的特点,具有一个头指针和一个尾指针

template <class T>

struct Node

{

T _data;

Node <T> *_next;

Node(const T &data=0)

{

_data = data;

_next = NULL;

}

};

template <class T>

class Queue

{

protected:

Node<T> *_head;

Node <T>*_tail;

public:

Queue()

:_head(NULL)

, _tail(NULL)

{}

~Queue()

{

Node<T> *ret = NULL;

if (_head == NULL)

return;

if (_head == _tail)

{

delete _head;

_head = NULL;

_tail = _head;

}

else

{

while (_head)

{

pop();

}

}

}

void push(const T&x)

{

Node<T> *newNode = new Node<T>(x);

if (_tail == NULL)

{

_tail = newNode;

_head = _tail;

}

else

{

_tail->_next = newNode;

_tail = newNode;

}

}

void pop()

{

Node<T>*ret = NULL;

if (_head == NULL)

return;

if (_head == _tail)

{

delete _head;

_head = NULL;

_tail = _head;

}

else

{

ret = _head;

_head = _head->_next;

delete ret;

}

}

T &Front()

{

Node <T>*ret = _head;

_head = _head->_next;

return ret->_data;

}

T &Back()

{

Node <T>*ret = _tail;

_tail = _head->_tail;

return _tail->_data;

}

bool Empty()

{

return _head == _tail;

}

void show()

{

while (_head)

{

cout << _head->_data << " ";

_head = _head->_next;

}

}

};

int main()

{

Queue<int> q;

q.push(1);

q.push(2);

q.push(3);

q.push(4);

q.pop();

q.show();

getchar();

return 0;

}

时间: 2024-10-06 06:33:15

c++中栈与队列的实现的相关文章

C++中 栈和队列的使用方法

C++中 栈和队列已经被封装好,我们使用时只需要按照如下步骤调用即可. 1.包含相关的头文件 包含栈头文件: #include<stack> 包含队列头文件: #include<queue> 2.作相关定义 定义栈如下: stack<int> stk; 定义队列如下: queue<int> q; 3.使用相关操作 栈提供了如下的操作: s.empty() 如果栈为空返回true,否则返回falses.size() 返回栈中元素的个数s.pop() 删除栈顶元

STL中栈和队列的使用方法

 STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素个数 top() 返回优先队列对顶元素 在默认的优先队列中,优先级高的先出队.在默认的int型中先出队的为较大的数. 使用方法: 头文件: #include <queue> 声明方式: 1.普通方法: priority_queue<int>q; //通过操作,按照元素从大到小的顺

(hdu step 8.1.1)ACboy needs your help again!(STL中栈和队列的基本使用)

题目: ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 73 Accepted Submission(s): 57   Problem Description ACboy was kidnapped!! he miss his mother very much and is very

python中栈和队列简单学习

栈#模拟栈结构#栈有先后顺序的.后进的先取出,先进的最后取出stack=[] #压栈(向栈里存数据)stack.append("a")print(stack)stack.append("b")print(stack) #出栈(在栈里取数据)res1=stack.pop()print("res1=",res1)print(stack)res2 =stack.pop()print("res2=",res2)print(stack)

内存数据中栈与队列的区别

关于栈和队列随想

1 在算法中栈和队列的地位 在算法中,栈和队列就是一个缓存,缓存那些对自己还有用的元素,还不用扔掉的元素. 比如对图的深度优先搜索,搜到某一层时,还只是访问了该元素的一个邻接节点时,是不能随便扔出栈的,因为可能它还有其它的邻接节点,首先它自己肯定是已经被访问了的,但是如果把它扔了,它的其它邻接节点也就被扔了,所以,只有当它的所有的邻接节点也被访问了的时候才可以把它扔掉. 2 对图进行遍历的时候,如何标记栈中的元素已经被访问的邻接节点和未被访问的邻接节点 图中的每个节点都是有一个label的,并且

javascript中的栈、队列。

                       javascript中的栈.队列 栈方法     栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push()  接受参数并将其放置数组尾,并返回修改后的数组长度. pop()  移除数组尾的最后一项,并返回移除项的值. 事例: var colors = new Array();var count = colors.push("red","green"); count = colors.push(&

小猪的数据结构辅助教程——3.1 栈与队列中的顺序栈

小猪的数据结构辅助教程--3.1 栈与队列中的顺序栈 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点 1.栈与队列的介绍,栈顶,栈底,入栈,出栈的概念 2.熟悉顺序栈的特点以及存储结构 3.掌握顺序栈的基本操作的实现逻辑 4.掌握顺序栈的经典例子:进制变换的实现逻辑 1.栈与队列的概念: 嗯,本节要进行讲解的就是栈 + 顺序结构 = 顺序栈! 可能大家对栈的概念还是很模糊,我们找个常见的东西来拟物化~ 不知道大家喜欢吃零食不--"桶装薯片"就可以用来演示栈! 生产的时

浅析栈与队列在java中的基本应用

一.前提 摘自java程序设计教程(华盛顿大学/斯坦福大学著,陈志等译)-机械工业出版社 1.1栈/队列基础 像线性表一样,栈与队列中存储一组有序的值.这类数据结构至少需要支持下面几种操作: 将值放入数据结构中(添加操作): 将值从数据结构中取出(删除操作): 检查数据结构中是否还有值(判断数据结构是否为空). 栈与队列很相似:都是以某种特定的顺序存储元素序列.栈是一种先进先出/LIFO(LAST IN FIRST OUT)的结构,也就是最后保存到结构中的元素会最先被访问.队列则是一种先进先出/