栈的实现--(C++)

来源:互联网 发布:mysql nullif 编辑:程序博客网 时间:2024/05/29 12:45

代码如下

#include<iostream>#include<stdlib.h>#include<string.h>using namespace std;#define MAXLEN 50struct 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]);}
原创粉丝点击