Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1061512
  • 博文数量: 264
  • 博客积分: 6005
  • 博客等级: 大校
  • 技术积分: 2798
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 20:15
文章分类

全部博文(264)

文章存档

2011年(42)

2010年(213)

2009年(4)

2008年(2)

2007年(3)

分类: C/C++

2011-05-25 22:00:27

什么也不说,直看代码。嵌入式编写字符串表达式时要用到,数据结构中有着题。
  1. #ifndef __STACK_H_
  2. #define __STACK_H_

  3. //#ifdef __cplusplus
  4. //extern "C" {
  5. //#endif

  6. template <class T>
  7. class Stack;
  8. template <class T>
  9. class Node
  10. {
  11. public:
  12.     Node (){}
  13.     Node (T d);
  14.     friend class Stack<T>;

  15. private:
  16.     T m_data;
  17.     Node *pNextNode;
  18. };

  19. template <class T>
  20. class Stack
  21. {
  22. public:
  23.     Stack();
  24.     ~Stack();

  25. public:
  26.     bool IsEmpty();
  27.     bool Push(const T e);
  28.     bool Pop(T &e);
  29.     bool GetTop(T &e);
  30.     bool Peek(T &e);
  31.     int Size();
  32. private:
  33.     Node<T> *m_pTopNode;
  34.     int m_nNodeCount;
  35. };


  36. //#ifdef __cplusplus
  37. //}
  38. //#endif
  39. #endif

  1. #include "Stack.h"
  2. #include <stdlib.h>

  3. template <class T>
  4. Node<T>::Node( T d )
  5. {
  6.     m_data = d;
  7.     pNextNode = NULL;
  8. }


  9. template <class T>
  10. Stack<T>::Stack() : m_pTopNode(NULL),m_nNodeCount(0)
  11. {
  12. }

  13. template <class T>
  14. Stack<T>::~Stack()
  15. {
  16.     while (IsEmpty())
  17.     {
  18.         Node<T> *pTempNode = m_pTopNode;
  19.         m_pTopNode = m_pTopNode->pNextNode;
  20.         delete (pTempNode);
  21.         pTempNode = NULL;
  22.     }
  23.     m_nNodeCount = 0;
  24.     m_pTopNode = NULL;
  25. }

  26. template <class T>
  27. bool Stack<T>::IsEmpty()
  28. {
  29.     return (m_pTopNode == NULL);
  30. }

  31. template <class T>
  32. bool Stack<T>::Push(const T e )
  33. {
  34.     Node<T> *pNewNode = new Node<T>(e);
  35.     if (NULL == pNewNode)     {
  36.         return false;
  37.     }

  38.     if(! IsEmpty()) {
  39.         pNewNode->pNextNode = m_pTopNode;
  40.     }
  41.     m_pTopNode = pNewNode;
  42.     m_nNodeCount ++;

  43.     return true;
  44. }

  45. template <class T>
  46. bool Stack<T>::Pop( T &e )
  47. {
  48.     if(IsEmpty()) {
  49.         return false;
  50.     }

  51.     e = m_pTopNode->m_data;
  52.     Node<T> *pNode = m_pTopNode;
  53.     m_pTopNode = m_pTopNode->pNextNode;
  54.     delete (pNode);
  55.     m_nNodeCount --;

  56.     return true;
  57. }

  58. template <class T>
  59. bool Stack<T>::GetTop( T &e )
  60. {
  61.     if(IsEmpty()) {
  62.         return false;
  63.     }
  64.     e = m_pTopNode->m_data;
  65.     return true;
  66. }

  67. template <class T>
  68. bool Stack<T>::Peek(T &e)
  69. {
  70.     return GetTop(e);
  71. }

  72. template <class T>
  73. int Stack<T>::Size()
  74. {
  75.     return m_nNodeCount;
  76. }






阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~