栈的实现--(C++)

代码如下

#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]);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值