【数据结构】栈结构操作示例

#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

#define MAXLEN 100
using namespace std;

typedef struct{
    char name[10];
    int age;
}DATA;

typedef struct stack{
    DATA data[MAXLEN+1];
    int top;
}StackType;

StackType * STInit(){
    StackType * p;
    if(p=(StackType*)malloc(sizeof(StackType))){
        p->top=0;
        return p;
    }
    return NULL;
}

int STIsEmpty(StackType* s){
    int t;
    t=(s->top==0);
    return t;
}

int STIsFull(StackType * s ){
    int t;
    t=(s->top==MAXLEN);
    return t;    
}

void STClear(StackType * s){
    s->top=0;
} 

void STFree(StackType * s){
    if(s){
        free(s);
    }
}

int PushST(StackType *s , DATA data){
    if((s->top+1)>MAXLEN){
        cout<<"栈溢出!\n";
        return 0;
    }
    s->data[++s->top]=data;
    return 1;
}

DATA PopST(StackType * s){
    if(s->top==0){
        cout<<"栈为空!\n";
        exit(0); 
    }
    return (s->data[s->top--]);
}

DATA PeekST(StackType * s){
    if(s->top==0){
        cout<<"栈为空!\n";
        exit(0);
    }
    return (s->data[s->top]);
}

int main(){
    StackType * stack;
    DATA data1, data;
    
    stack=STInit();
    cout<<"入栈操作:\n";
    cout<<"输入姓名 年龄进行操作:\n";
    do{
        cin>>data.name>>data.age;
        if(strcmp(data.name,"0")==0){
            break;
        }
        else{
            PushST(stack, data);
        }
    }while(1);
    
    do{
        cout<<"出栈操作:按任意键进行出栈操作:\n";
        getchar();
        data1=PopST(stack);
        cout<<"出栈的数据是"<<data1.name<<" "<<data1.age<<endl; 
    }while(1);
    
    STFree(stack);
    
    return 0;
} 
 

  

posted @ 2015-11-30 19:54  Dragonir  阅读(248)  评论(0编辑  收藏  举报