顺序栈实现代码:
#include <iostream>
using namespace std;
#define MAXSIZE 10
class SeqStack
{
public:
SeqStack(){top = -1;}
~SeqStack(){}
void push(int value);
int pop();
bool isEmpty(){return top==-1?true:false;}
private:
int stack[MAXSIZE];
int top;
};
void SeqStack::push(int value)
{
if(top == 9)
{
cout << "栈已满!\n";
return;
}
stack[++top] = value;
}
int SeqStack::pop()
{
if(isEmpty())
{
cout << "栈为空!\n";
return 0;
}
return stack[top--];
}
int main()
{
SeqStack ss;
for(int i = 0;i < 12; i++)
{
ss.push(i);
}
for(int i = 0; i < 12 && !ss.isEmpty(); i++)
{
cout << ss.pop() << " ";
}
cout << endl;
return 0;
}
运行结果:
栈已满!
栈已满!
9 8 7 6 5 4 3 2 1 0
链式栈实现代码:
#include <iostream>
#include <string>
using namespace std;
struct Node
{
int num;
string name;
Node * next;
};
class LinkStack
{
public:
LinkStack();
~LinkStack();
Node *createNode(int num,string name);
void push(Node *node);
Node* pop();
bool isEmpty();
void print();
private:
Node * top;
};
LinkStack::LinkStack()
{
top = new(Node);
top->num = 0;
top->name = "空栈";
top->next = NULL;
}
LinkStack::~LinkStack()
{
delete top;
}
Node * LinkStack::createNode(int num,string name)
{
Node * node = new(Node);
node->num = num;
node->name = name;
return node;
}
void LinkStack::push(Node * node)
{
node->next = top->next;
top->next = node;
}
Node* LinkStack::pop()
{
if(isEmpty())
{
return top;
}
Node *p = top->next;
top->next = top->next->next;
p->next = NULL;
return p;
}
bool LinkStack::isEmpty()
{
return NULL == top->next ? true : false;
}
void LinkStack::print()
{
if(isEmpty())
{
cout << "空栈!\n";
return ;
}
cout << "打印(按出栈顺序):\n";
Node * temp = top->next;
while(NULL != temp)
{
cout << "num:" << temp->num << "\tname:" << temp->name << endl;
temp = temp->next;
}
}
int main()
{
LinkStack ls;
Node *temp;
ls.push(ls.createNode(1,"张三"));
ls.push(ls.createNode(2,"李四"));
ls.push(ls.createNode(3,"王五"));
ls.push(ls.createNode(4,"赵六"));
ls.print();
for(int i = 0; i < 6 && !ls.isEmpty(); i++)
{
temp = ls.pop();
cout << "弹出:" << temp->num << temp->name << endl;
}
return 0;
}
打印结果:
打印(按出栈顺序):
num:4 name:赵六
num:3 name:王五
num:2 name:李四
num:1 name:张三
弹出:4赵六
弹出:3王五
弹出:2李四
弹出:1张三