3.21(双向栈)

来源:互联网 发布:哔哩哔哩mac版10.9 编辑:程序博客网 时间:2024/05/20 22:38
因为top0和top1都指向最后一个元素的下一个位置,所以最好不要把数组占满,如存储6个数,最好开一个7个位置的数组。
#include <iostream>#include <stdlib.h>using namespace std;typedef struct stack{    int* base;    int top[2];    int size;}qstack,*pstack;void init(pstack s,int size){    s->base=(int*)malloc(size*sizeof(int));    s->top[0]=0;//数组头    s->top[1]=size-1;//数组尾    s->size=size;}void push(pstack s,int i,int num){    if(s->top[0]==s->top[1])//如果是满栈        return ;    else if(i==0)//如果从左边进入    {        s->base[s->top[0]]=num;        s->top[0]=s->top[0]+1;    }    else if(i==1)//如果从右边进入    {        s->base[s->top[1]]=num;        s->top[1]=s->top[1]-1;    }}void pop(pstack s,int i,int &num_){    if(s->base[s->top[0]]==0 && i==0)//如果左边是空栈        return ;    else if(s->base[s->top[1]]==1 && i==1)//如果右边是空栈        return ;    else if(i==0)    {        s->top[0]--;        num_=s->base[s->top[0]];    }    else if(i==1)    {        s->top[1]++;        num_=s->base[s->top[1]];    }}void  traverse(pstack s,int i){    pstack q=s;    if(i==0)    {        q->top[0]--;//因为指向的是最后一个元素的下一个位置,所以需要先减一;        while(q->top[0]>=0)        {            cout<<q->base[q->top[0]];            q->top[0]--;        }    }    if(i==1)    {        q->top[1]++;        while(q->top[1]<=(q->size-1))        {            cout<<q->base[q->top[1]];            q->top[1]++;        }    }}int main(){    qstack s;    init(&s,7);    push(&s,0,1);    push(&s,0,2);    push(&s,0,3);    push(&s,1,3);    push(&s,1,2);    push(&s,1,1);    traverse(&s,1);    }
http://blog.csdn.net/mixuema/article/details/49228541
0 0
原创粉丝点击