3.21(双向栈)

因为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
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/superna666/article/details/52369786
上一篇3.12(反转单结点)
下一篇斐波那契
想对作者说点什么? 我来说一句

数据结构试验之双向栈实现

2009年10月12日 4KB 下载

数据结构 双向栈 代码

2012年11月28日 2KB 下载

双向栈的基本操作和实现

2011年05月08日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭