今天,我们一起用C++写一个顺序栈,具体如下:
SeqStack.h具体内容如下:
template<typename Type> class SeqStack{
public:
SeqStack(int sz) :m_ntop(-1), m_nMaxSize(sz){
m_pelements = new Type[sz];
if (m_pelements == NULL){
cout << "Application Error!" << endl;
exit(1);
}
}
~SeqStack(){
delete[] m_pelements;
}
public:
void Push(const Type item); //push data
Type Pop(); //pop data
Type GetTop() const; //get data
void Print(); //print the stack
void MakeEmpty(){ //make the stack empty
m_ntop = -1;
}
bool IsEmpty() const{
return m_ntop == -1;
}
bool IsFull() const{
return m_ntop == m_nMaxSize - 1;
}
private:
int m_ntop;
Type *m_pelements;
int m_nMaxSize;
};
template<typename Type> void SeqStack<Type>::Push(const Type item){
if (IsFull()){
cout << "The stack is full!" << endl;
return;
}
m_pelements[++m_ntop] = item;
}
template<typename Type> Type SeqStack<Type>::Pop(){
if (IsEmpty()){
cout << "There is no element!" << endl;
//exit(1);
}
return m_pelements[m_ntop--];
}
template<typename Type> Type SeqStack<Type>::GetTop() const{
if (IsEmpty()){
cout << "There is no element!" << endl;
//exit(1);
}
return m_pelements[m_ntop];
}
template<typename Type> void SeqStack<Type>::Print(){
cout << "bottom";
for (int i = 0; i <= m_ntop; i++){
cout << "--->" << m_pelements[i];
}
cout << "--->top" << endl << endl << endl;
}
main.cpp具体内容如下:
#include<iostream>
#include <stdlib.h>
using namespace std;
#include "SeqStack.h"
int main(){
SeqStack<int> stack(10);
int init[10] = { 1, 2, 6, 9, 0, 3, 8, 7, 5, 4 };
for (int i = 0; i < 10; i++)
{
stack.Push(init[i]);
}
stack.Print();
stack.Push(88);
cout << stack.Pop() << endl;
stack.Print();
stack.MakeEmpty();
stack.Print();
stack.Pop();
system("pause");
return 0;
}
运行效果如图1所示:
图1 运行效果