乐智雄吧 关注:2贴子:63
  • 8回复贴,共1
#ifndef MYSTACK_H
#define MYSTACK_H
class MyStack
{
public:
MyStack(int size);
~MyStack();
bool stackEmpty();
bool stackFull();
void clearStack();
int stackLength();
bool push(char elem);
bool pop(char &elem);
void stackTraverse(bool isFromButton);
private:
char *m_pBuffer;
int m_iSize;
int m_iTop;
};
#endif


IP属地:浙江1楼2016-09-13 15:00回复
    char 类型 对应单引号内容
    字符串对应 双引号内容


    IP属地:浙江3楼2016-09-13 15:22
    回复
      #include <iostream>
      #include "MyStack.h"
      using namespace std;
      MyStack::MyStack(int size)
      {
      m_iSize = size;
      m_pBuffer = new char[size];
      m_iTop = 0;
      }
      MyStack::~MyStack()
      {
      delete []m_pBuffer;
      }
      bool MyStack::stackEmpty()
      {
      if(0 == m_iTop)
      {
      return true;
      }
      return false;
      }
      bool MyStack::stackFull()
      {
      if(m_iTop == m_iSize)
      {
      return true;
      }
      return false;
      }
      void MyStack::clearStack()
      {
      m_iTop = 0;
      }
      int MyStack::stackLength()
      {
      return m_iTop;
      }
      bool MyStack::push(char elem)
      {
      if(stackFull())
      {
      return false;
      }
      m_pBuffer[m_iTop] = elem;
      m_iTop++;
      return true;
      }
      bool MyStack::pop(char &elem)
      {
      if(stackEmpty())
      {
      return false;
      }
      m_iTop--;
      elem = m_pBuffer[m_iTop];
      return true;
      }
      void MyStack::stackTraverse(bool isFromButton)
      {
      if(isFromButton)
      {
      for(int i = 0; i < m_iTop; i++)
      {
      cout << m_pBuffer[i] << ",";
      }
      }
      else
      {
      for(int i = m_iTop-1; i >=0; i--)
      {
      cout << m_pBuffer[i] << ",";
      }
      }
      }


      IP属地:浙江4楼2016-09-13 15:30
      回复
        #include <iostream>
        #include <stdlib.h>¡¡
        #include "MyStack.h"
        using namespace std;
        int main(void)
        {
        MyStack *pStack = new MyStack(5);
        pStack->push('u');//button
        pStack->push('e');
        pStack->push('v');
        pStack->push('o');
        pStack->push('l');//top
        pStack->stackTraverse(false);
        char elem = 0;
        pStack->pop(elem);
        cout << endl;
        cout << elem << endl;
        pStack->stackTraverse(true);
        // pStack->clearStack();
        cout << pStack->stackLength() << endl;
        if(pStack->stackEmpty())
        {
        cout << "stack is empty" << endl;
        }
        if(pStack->stackFull())
        {
        cout << "stack is full" << endl;
        }
        delete pStack;
        pStack = NULL;
        return 0;
        }


        IP属地:浙江5楼2016-09-13 15:30
        回复
          //栈模板
          #ifndef MYSTACK_H
          #define MYSTACK_H
          #include <iostream>
          using namespace std;
          template <typename T>
          class MyStack
          {
          public:
          MyStack(int size);
          ~MyStack();
          bool stackEmpty();
          bool stackFull();
          void clearStack();
          int stackLength();
          bool push(T elem);
          bool pop(T &elem);
          void stackTraverse(bool isFromButton);
          private:
          T *m_pBuffer;
          int m_iSize;
          int m_iTop;
          };
          template <typename T>
          MyStack<T>::MyStack(int size)
          {
          m_iSize = size;
          m_pBuffer = new T[size];
          m_iTop = 0;
          }
          template <typename T>
          MyStack<T>::~MyStack()
          {
          delete []m_pBuffer;
          }
          template <typename T>
          bool MyStack<T>::stackEmpty()
          {
          if(0 == m_iTop)
          {
          return true;
          }
          return false;
          }
          template <typename T>
          bool MyStack<T>::stackFull()
          {
          if(m_iTop == m_iSize)
          {
          return true;
          }
          return false;
          }
          template <typename T>
          void MyStack<T>::clearStack()
          {
          m_iTop = 0;
          }
          template <typename T>
          int MyStack<T>::stackLength()
          {
          return m_iTop;
          }
          template <typename T>
          bool MyStack<T>::push(T elem)
          {
          if(stackFull())
          {
          return false;
          }
          m_pBuffer[m_iTop] = elem;
          m_iTop++;
          return true;
          }
          template <typename T>
          bool MyStack<T>::pop(T &elem)
          {
          if(stackEmpty())
          {
          return false;
          }
          m_iTop--;
          elem = m_pBuffer[m_iTop];
          return true;
          }
          template <typename T>
          void MyStack<T>::stackTraverse(bool isFromButton)
          {
          if(isFromButton)
          {
          for(int i = 0; i < m_iTop; i++)
          {
          cout << m_pBuffer[i];
          // m_pBuffer[i].printCoordinate();
          }
          }
          else
          {
          for(int i = m_iTop-1; i >=0; i--)
          {
          cout << m_pBuffer[i];
          // m_pBuffer[i].printCoordinate();
          }
          }
          }
          #endif


          IP属地:浙江6楼2016-09-16 11:09
          回复
            #include <iostream>
            #include <stdlib.h>¡¡
            #include "MyStack.h"
            #include "Coordinate.h"
            using namespace std;
            int main(void)
            {
            MyStack<Coordinate> *pStack = new MyStack<Coordinate>(5);
            pStack->push(Coordinate(1,2));//button
            pStack->push(Coordinate(2,2));
            pStack->stackTraverse(true);
            // pStack->clearStack();
            cout << pStack->stackLength() << endl;
            if(pStack->stackEmpty())
            {
            cout << "stack is empty" << endl;
            }
            if(pStack->stackFull())
            {
            cout << "stack is full" << endl;
            }
            delete pStack;
            pStack = NULL;
            return 0;
            }


            IP属地:浙江7楼2016-09-16 11:09
            回复
              //实例十六进制转换
              #include <iostream>
              #include "stdlib.h"
              #include "MyStack.h"
              #include "Coordinate.h"
              using namespace std;
              #define BINARY 2
              #define OCTONARY8
              #define HEXADECIMAL16
              int main(void)
              {
              char num[] = "0123456789ABCDEF";
              MyStack<int> *pStack = new MyStack<int>(30);
              int N = 2016;
              int mod = 0;
              while(N)
              {
              mod = N % HEXADECIMAL;
              pStack->push(mod);
              N /= HEXADECIMAL;
              }
              //pStack->stackTraverse(false);
              //for(int i = pStack->stackLength()-1; i >= 0; i--)
              //{
              //num
              //}
              int elem = 0;
              while(!pStack->stackEmpty())
              {
              pStack->pop(elem);
              cout << num[elem];
              }
              delete pStack;
              pStack = NULL;
              }


              IP属地:浙江8楼2016-09-16 18:19
              回复
                //strlen(str)需要include
                #include <string.h>


                IP属地:浙江9楼2016-09-16 18:57
                回复
                  //小括号和中括号的匹配
                  #include <iostream>
                  #include <string.h>
                  #include "stdlib.h"
                  #include "MyStack.h"
                  #include "Coordinate.h"
                  using namespace std;
                  int main(void)
                  {
                  MyStack<char> *pStack = new MyStack<char>(30);
                  MyStack<char> *pNeedStack = new MyStack<char>(30);
                  char str[] = "[()]()[()[()]]";
                  char currentNeed = 0;
                  for(int i = 0; i < strlen(str); i++)
                  {
                  if(str[i] != currentNeed)
                  {
                  pStack->push(str[i]);
                  switch(str[i])
                  {
                  case '[':
                  pNeedStack->push(currentNeed);
                  currentNeed = ']';
                  break;
                  case '(':
                  pNeedStack->push(currentNeed);
                  currentNeed = ')';
                  break;
                  default:
                  cout << "paren-matching failure" <<endl;
                  return 0;
                  }
                  }
                  else
                  {
                  char elem;
                  pStack->pop(elem);
                  pNeedStack->pop(currentNeed);
                  }
                  }
                  if(pStack->stackEmpty())
                  {
                  cout << "paren-matching success" <<endl;
                  }
                  else
                  {
                  cout << "paren-matching failure" <<endl;
                  }
                  delete pStack;
                  pStack = NULL;
                  delete pNeedStack;
                  pNeedStack = NULL;
                  }


                  IP属地:浙江10楼2016-09-16 19:06
                  回复