顺序栈
//seqStack
#include <bits/stdc++.h>
using namepace std;
#define MAX 100
class Stk{
public:
Stk();
void Push(int val);
void Pop();
void Top();
bool Empty();
int Size();
~Stk();
private:
int a[MAX];
int top;
int size;
};
Stk::Stk(){
this->top = -1;
this->size = 0;
}
Stk::Push(int val){
if(top == MAX - 1) throw "overflow";
this->top ++;
this->a[top] = val;
}
Stk::Pop(){
if(this->Empty()) throw "lower overflow";
this->top--;
}
Stk::Top(){
if(this->Empty()) throw "empty";
return this->a[top];
}
Stk::Size(){
return this->size;
}
Stk::Empty(){
bool ret = false;
if(top == -1) ret = true;
return ret;
}
链表栈(类模板ADT)
#pragma once
#include <bits/stdc++.h>
using namespace std;
template<class T>
struct Node{
public:
T val;
struct Node<T>* next;
Node(T val,struct Node* next){
this->val = val;
this->next = next;
}
};
template <class T>
class Stk{
public:
Stk();
~Stk();
void Push(T val);
void Pop();
T Pop();
bool Empty();
int Size();
private:
Node<T>* top;
int size;
};
template<class T>
Stk::Stk(){
this->size = 0;
Node<T> top = NULL:
}
Stk::~Stk(){
while(!this->Empty()){
this->Pop();
}
}
void Stk::Push(T val){
node = new struct Node(val,this->top);
this->top = 0;
this->size++;
}
void Stk::Pop(){
if(this->Empty()) throw "lower overflow";
Node<T>* t = this->top;
top = top->next;
delete t;
}
bool Stk::Empty(){
bool ret = false;
if(top == NULL){
ret = true;
}
return ret;
}
T Stk::Top(){
if(this->Empty()) throw "lower overflow";
return this->top->val;
}