stack.h

来自「用bcg库编写的java IDE 源码」· C头文件 代码 · 共 89 行

H
89
字号
// Stack.h: interface for the Stack class.
//
//////////////////////////////////////////////////////////////////////


#ifndef STACKT
#define STACKT

#define STACK_CAPACITY 100

template<typename StackElement>
class Stack  
{
public:
	Stack();
    virtual ~Stack();
	bool empty()const;
	void push(const StackElement& value);
	void top(StackElement&);
	void pop(StackElement&);
	void growStack();
private:
	StackElement* stkArray;//[STACK_CAPACITY];
	int stkTop;
	int stk_nSize;
};

template <typename StackElement>
Stack<StackElement>::Stack()
{
  stkTop    = -1;
  stk_nSize = 50;
  stkArray  = new StackElement[stk_nSize];
}

template <typename StackElement>
Stack<StackElement>::~Stack()
{
 delete []stkArray;
}

template <typename StackElement>
inline bool Stack<StackElement>::empty() const{return (stkTop == -1);}

template <typename StackElement>
void Stack<StackElement>::push(const StackElement& value)
{
	if(stkTop</*STACK_CAPACITY -1*/stk_nSize-1)
	{
	  ++stkTop;
	  stkArray[stkTop] = value;
	}
	else
	{
      growStack();
	  ++stkTop;
	  stkArray[stkTop] =value;
	}
}

template <typename StackElement>
void Stack<StackElement>::growStack()
{
  StackElement* pOldStk = stkArray;
  stkArray = new StackElement[2*stk_nSize];
  for(int nIndex =0; nIndex<stk_nSize;++nIndex)
	 stkArray[nIndex] = pOldStk[nIndex];
  delete []pOldStk;
  stk_nSize = stk_nSize*2;
}


template <typename StackElement>
void Stack<StackElement>::top(StackElement& seTop)
{
   if(stkTop >= 0)
		seTop = stkArray[stkTop];
}

template <typename StackElement>
void Stack<StackElement>::pop(StackElement& seItem)
{
    top(seItem);
	if(stkTop >= 0)
		--stkTop;
}

#endif 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?