3.21(双向栈)

原创 2016年08月30日 15:32:00
因为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
版权声明:本文为博主原创文章,未经博主允许不得转载。

算法设计题3.21-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

算法设计题3.21-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版。

数据结构C语言之双向栈

  • 2010年11月19日 20:49
  • 6KB
  • 下载

matlab中安装libsvm3.21和使用

matlab中安装libsvm3.21和使用安装和测试环境:win7 64位,matlab2014b,vs2013。生成matlab中使用的文件 在libsvm官方网站下载安装包 解压该文件,在mat...

双向栈的操作

  • 2014年11月14日 00:39
  • 2KB
  • 下载

libsvm最新源代码(版本3.21)理解解析(二)

一、回顾         上节,我们介绍到了SMO的总体过程,本节对SMO的三个难点结合代码进行详细分析。 二、SMO算法         (1)设置拉格朗日乘子α=(α[1]...α[i]...α[...

数据结构 双向栈 代码

  • 2012年11月28日 17:21
  • 2KB
  • 下载

双向栈的基本操作和实现

  • 2011年05月08日 11:50
  • 2KB
  • 下载

C++ primer(第五版) 练习 3.21 个人code

 C++ primer(第五版) 练习 3.21 题目:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.21(双向栈)
举报原因:
原因补充:

(最多只允许输入30个字)