顺序栈

因为c++中已经有了#include了,一般的数据类型已经可以满足了,但是有时候会用栈来存储自定义的结构体,这个就不行了,所以,需要自己写一个栈,并实现一些基本操作

分析:


顺序栈结构体:

typedef struct stack{

    struct Node *n[100];

    int top;

    int base;

}Stack;

初始化栈:

Stack s;

void Init_stack(){

    s.top=0;

    s.base=0;

}

进栈:

void push_stack(Node *&p){ //进栈

    s.n[++s.top]=p;

}

出栈:

Node* pop_stack(){ //出栈

    return s.n[s.top--];

}

栈的大小:

int get_size(){

    return s.top;

}

判断栈是否为空:

int empty_stack(){ //判断栈是否为空

    if(s.base==s.top){

        return 1;

    }else{

        return 0;

    }

}

得到栈顶元素:

Node* get_top(){ //得到栈顶元素

    return s.n[s.top];

}

完整代码:

#include

using namespace std;

typedef struct Node{

    int data;

    struct Node *next;

};

typedef struct stack{

    struct Node *n[100];

    int top;

    int base;

}Stack;

Stack s;

void Init_stack(){

    s.top=0;

    s.base=0;

}

void push_stack(Node *&p){ //进栈

    s.n[++s.top]=p;

}

Node* pop_stack(){  //出栈

    return s.n[s.top--];

}

int empty_stack(){  //判断栈是否为空

    if(s.base==s.top){

        return 1;

    }else{

        return 0;

    }

}

Node* get_top(){  //得到栈顶元素

    return s.n[s.top];

}

int get_size(){

    return s.top;

}

void Init_Node(Node *&p){

    Node *l=p;

    l->next=NULL;//定义头结点

}

void create_Node(Node *&p){

    Node *s,*l=p;

    int m;

    while(1){

        cin>>m;

        if(m==-1){

            break;

        }

        s=new Node;

        s->data=m;

        l->next=s;

        l=s;

    }

    l->next=NULL;

}

int main()

{

    Node *p=new Node;

    //初始化测试链表

    Init_Node(p);

    cout<<"创建测试链表,输入-1结束:"<

    //创建测试链表

    create_Node(p);

    cout<<"初始化顺序栈"<

    //初始化顺序栈

    Init_stack();

    Node *p1=p->next;

    cout<<"测试数据进入顺序栈"<

    while(p1!=NULL){

        cout<data<<" ";

        //测试链表中的数据进顺序栈

        push_stack(p1);

        p1=p1->next;

    }

    cout<

    cout<<"得到栈顶元素:"<data<

    cout<<"栈的长度:"<

    cout<<"出栈:";

    while(!empty_stack()){

        Node *s=pop_stack();

        cout<data<<" ";

    }

    cout<

    cout<<"栈的长度:"<

    return 0;

}

测试结果:

你可能感兴趣的:(顺序栈)