今天,我们一起用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;
- }
- #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 运行效果