关闭

3.21(双向栈)

38人阅读 评论(0) 收藏 举报
分类:
因为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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7397次
    • 积分:931
    • 等级:
    • 排名:千里之外
    • 原创:90篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条