//链栈的基本操作
#include <iostream>
using namespace std;
//定义节点
typedef struct Node{
int data;
Node *next;
}node,*pNode;
//定义栈
typedef struct{
pNode top;
pNode bottom;
}Stack;
bool initStack(Stack &Q);//初始化栈
bool creatstack(Stack &Q);//建栈
bool isEmpty(Stack &Q);//判断栈是否为空
bool pushstack(Stack &Q,int e);//压栈
bool popstack1(Stack &Q);//出栈
int popstack2(Stack &Q);//出栈,并返回栈顶元素
void traverstack(Stack &Q);//遍历栈
int main(){
Stack m;
bool a = initStack(m);
if(a)
cout << "初始化栈成功" << endl;
a = creatstack(m);
if(a)
cout << "建栈成功" << endl;
cout << "请输入要压入栈的元素值" << endl;
int n;
cin >> n;
a = pushstack(m,n);
if(a)
cout << "压栈成功" << endl;
traverstack(m);
a = popstack1(m);
if(a)
cout << "出栈成功" << endl;
traverstack(m);
int q = popstack2(m);
cout << "出栈成功,栈顶元素是" << q << endl;
traverstack(m);
return 0;
}
//初始化栈
bool initStack(Stack &Q){
pNode p = new Node;
if(p==NULL){
cout << "动态内存分配失败" << endl;
exit(-1);
}
Q.top = p;
Q.bottom = p;
p->next = NULL;
return true;
}
//建栈
bool creatstack(Stack &Q){
int i = 0;
cout << "请输入要输入的元素值个数" << endl;
cin >> i;
cout << "请输入要输入的元素值" << endl;
for(int j=0;j<i;j++){
int n;
cin >> n;
pushstack(Q,n);
}
return true;
}
//判断栈是否为空
bool isEmpty(Stack &Q){
if(Q.top == Q.bottom)
return true;
return false;
}
//压栈
bool pushstack(Stack &Q,int e){
pNode p = new Node;
if(p == NULL){
cout << "动态内存分配失败" << endl;
exit(-1);
}
p->data = e;
p->next = Q.top;
Q.top = p;
return true;
}
//出栈
bool popstack1(Stack &Q){
if(isEmpty(Q))
cout << "栈为空,无元素可出栈" << endl;
pNode p = Q.top->next;
Q.top = p;
return true;
}
//出栈,并返回栈顶元素
int popstack2(Stack &Q){
int e = 0;
if(isEmpty(Q))
cout << "栈为空,无元素可出栈" << endl;
pNode p = Q.top->next;
e = Q.top->data;
Q.top = p;
return e;
}
//遍历栈
void traverstack(Stack &Q){
pNode p = Q.top;
cout << "此时栈中的元素是" << endl;
while(p!=Q.bottom){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
04-06
240