代码如下
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define MAXLEN 50
struct Data{
string name;
int age;
};
struct stack{
Data data[MAXLEN+1];
int top;
};
//函数声明
stack* stack_init();
int stack_isEmpty(stack *s);
Data* peekStack(stack *s);
Data* popStack(stack *s);
int pushStack(stack *s,Data data);
int stack_isFull(stack *s);
void stack_clear(stack *s);
void stack_free(stack *s);
int main()
{
stack *stack;
Data data,*p_data;
stack=stack_init();
cout<<"--入栈--"<<endl;
while(1){
cout<<"请输入姓名:";
cin>>data.name;
cout<<"请输入年龄:";
cin>>data.age;
if(data.age == 0)
break;
else
pushStack(stack,data);
}
cout<<"输出栈顶元素:";
p_data = peekStack(stack);
cout<<"name:"<<p_data->name<<" age:"<<p_data->age<<endl;
cout<<"所有元素出栈!!!!"<<endl;
while(1){
if(stack->top == 0)
break;
p_data=popStack(stack);
cout<<"name:"<<p_data->name<<" age:"<<p_data->age<<endl;
}
if(stack_isEmpty){
cout<<"栈已空!"<<endl;
}
}
//初始化栈
stack* stack_init()
{
stack *p;
if(p = new stack){
p->top = 0;
return p;
}
return NULL;
}
//判断栈是否为空
int stack_isEmpty(stack *s)
{
return int(s->top == 0);
}
//判断是否满栈
int stack_isFull(stack *s)
{
return int(s->top == MAXLEN);
}
//清空栈
void stack_clear(stack *s)
{
s->top = 0;
}
//释放空间
void stack_free(stack *s)
{
delete s;
}
//入栈
int pushStack(stack *s,Data data)
{
if((s->top+1)>MAXLEN){
cout<<"栈溢出!!"<<endl;
return 0;
}
s->data[++s->top]=data;
return 1;
}
//出栈
Data* popStack(stack *s)
{
if(s->top == 0){
cout<<"亲!栈已经空了!"<<endl;
exit(0);
}
return &(s->data[s->top--]);
}
//查询栈顶元素
Data* peekStack(stack *s)
{
if(s->top == 0){
cout<<"栈空了——"<<endl;
exit(0);
}
return &(s->data[s->top]);
}