从原理上看,栈要比普通队列更简单一些。
栈的头文件内容如下:
class Stack
{
public:
Stack();
Stack(int capacity);
~Stack();
bool IsEmpty();
bool IsFull();
void ClearStack();
int Length(); //栈的元素个数
bool Push(int element);
bool Pop(int &ele);
void StackTraverse();
private:
int *m_pStack;
int m_iTop; //栈顶标记
int m_iCapacity;
};
栈的源文件内容如下:
#include <iostream>
#include "Stack.h"
using namespace std;
Stack::Stack()
{
cout <<"Stack::Stack()" << endl;
}
Stack::Stack(int capacity)
{
m_iCapacity = capacity;
m_pStack = new int[m_iCapacity];
m_iTop = 0;
}
Stack::~Stack()
{
delete []m_pStack;
m_pStack = NULL;
}
bool Stack::IsEmpty()
{
return m_iTop == 0 ? true : false;
}
bool Stack::IsFull()
{
return m_iTop == m_iCapacity ? true : false;
}
void Stack::ClearStack()
{
m_iTop = 0;
}
int Stack::Length()
{
return m_iTop;
}
bool Stack::Push(int element)
{
if (!IsFull()){
m_pStack[m_iTop++] = element;
return true;
}
return false;
}
bool Stack::Pop(int &ele)
{
if (!IsEmpty()){
m_iTop--;
ele = m_pStack[m_iTop];
return true;
}
return false;
}
void Stack::StackTraverse()
{
if (!IsEmpty()){
for (int i = 0; i < m_iTop; i++){
cout << m_pStack[i] << endl;
}
}else{
cout << "Stack is empty!" << endl;
}
}
测试程序如下:
#include <iostream>
#include "Stack.h"
using namespace std;
int main(void)
{
Stack s(4);
s.Push(5);
s.Push(7);
s.Push(2);
s.Push(4);
s.StackTraverse();
int ele = 0;
s.Pop(ele);
cout << ele << endl;
s.StackTraverse();
system("pause");
return 0;
}