数据结构之堆栈的C++语言实现补充

[复制链接]
706|0
 楼主| 韩山童 发表于 2017-1-5 19:19 | 显示全部楼层 |阅读模式
上一篇帖子已经详细说明了栈的实现了,这个帖子不再加以说明了。不同之处主要在于将new和delete用malloc和free替换了,同时用动态数组作为栈的存储结构。以下是代码。有错误的地方请批评指正,蟹蟹!
  1. #ifndef STACKARR_H_INCLUDED
  2. #define STACKARR_H_INCLUDED

  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;

  6. /*堆栈的类定义*/
  7. template <typename T>
  8. class Stack
  9. {
  10. private:
  11.     T* mHead;
  12.     int mTop;
  13.     int mSize;
  14. public:
  15.     Stack(int sz);
  16.     virtual ~Stack();

  17.     void push(T e);     //入栈操作
  18.     void pop(T& e);      //出栈操作
  19.     bool isEmpty();     //判断栈空
  20.     bool isFull();      //判断栈满
  21.     int getSize();      //返回栈中总元素
  22.     void print();    //打印栈中的元素 但不出栈
  23. };

  24. template <typename T>
  25. void Stack<T>::print()
  26. {
  27.    for (int i=mTop; i >= 0; --i)
  28.     printf("%d ",mHead[i]);
  29. }

  30. //构造函数 创建头指针
  31. template <typename T>
  32. Stack<T>::Stack(int sz)
  33. {
  34.     mHead = (T*)malloc(sz * sizeof(T));
  35.     mTop = -1;
  36.     mSize = sz;
  37. }

  38. /*析构函数:释放栈所占的堆内存*/
  39. template <typename T>
  40. Stack<T>::~Stack()
  41. {
  42.    free(mHead);
  43.    mHead = NULL;
  44. }

  45. //入栈
  46. template <typename T>
  47. void Stack<T>::push(T e)
  48. {
  49.     if (mSize-1 == mTop)
  50.     {
  51.          printf("栈已经满!\n");
  52.          return;
  53.     }
  54.     mHead[++mTop] = e;
  55. }

  56. //出栈
  57. template <typename T>
  58. void Stack<T>::pop(T& e)
  59. {
  60.     if(isEmpty())
  61.     {
  62.         printf("栈已空!!!\n");
  63.         return;
  64.     }
  65.     e = mHead[mTop--];
  66. }

  67. //判断栈空
  68. template <typename T>
  69. bool Stack<T>::isEmpty()
  70. {
  71.     return -1 == mTop ? true : false;
  72. }

  73. //判断栈满
  74. template <typename T>
  75. bool Stack<T>::isFull()
  76. {
  77.     return (mTop +1) == mSize ? true : false;
  78. }

  79. //获取栈中总元素个数
  80. template <typename T>
  81. int Stack<T>::getSize()
  82. {
  83.     return mTop+1;
  84. }
  85. #endif // STACKARR_H_INCLUDED
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

43

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部