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
版权声明:本文为博主原创文章,未经博主允许不得转载。

从两端生长的双向栈-C语言版

#include #define MaxStackSize 100 typedef int DataType; int len,x; #include"SeqStack.h" int main() ...
  • huangqiang1363
  • huangqiang1363
  • 2014年11月04日 14:28
  • 1799

大话数据结构七:两栈共享存储空间(双向栈)

1. 为什么要使用双向栈? 通过上一篇博客特殊的线性表(栈),可以知道栈的顺序存储性能相对较高,因为它不存在插入和删除时移动元素的问题,但是它有一点缺陷:要实现确定数组存储容量的大小,万一不够,需要...
  • zdp072
  • zdp072
  • 2013年10月10日 01:06
  • 2906

基于数组实现双向栈 c++

在数组的首尾分别建立栈来构成双向栈: 代码如下: //双向栈的实现 #include #include #define MAXSIZE 100 using namespace std...
  • liuchangqing123
  • liuchangqing123
  • 2011年09月19日 20:35
  • 1369

算法导论 顺序双向栈——两个栈共享同一存储空间

双向栈——两个栈共享同一存储空间1. 什么是双向栈? 算法导论原题: 10.1-2 Explain how to implement two stacks in one array A...
  • sinat_24229853
  • sinat_24229853
  • 2015年09月15日 17:57
  • 1297

IDEA Mybatis Plugin 3.21

IDEA Mybatis Plugin 3.21
  • m1043
  • m1043
  • 2017年11月13日 10:37
  • 803

情感分类模型介绍CNN、RNN、LSTM、栈式双向LSTM

情感分类模型介绍CNN、RNN、LSTM、栈式双向LSTM 1、文本卷积神经网络(CNN) 卷积神经网络经常用来处理具有类似网格拓扑结构(grid-like topology)的数据。例如...
  • ch1209498273
  • ch1209498273
  • 2017年11月05日 10:15
  • 412

用双向链表实现一个栈和队列

双向链表实现堆栈 双向链表实现队列
  • duan19920101
  • duan19920101
  • 2016年06月15日 23:43
  • 1373

快速排序中的堆栈深度

7-4 快速排序中的堆栈深度    7.1节中的QUICKSORT算法包含有两个对自身递归调用。在调用PARTITION后,左边的子数组和右边的子数组分别被递归排序。QUICKSORT中第二次递归调用...
  • zhanglei8893
  • zhanglei8893
  • 2011年03月10日 11:19
  • 4295

3.21

函数声明方式在Javascript定义一个函数一般有如下三种方式: 1,函数关键字(function)语句: function fnMethodName(x){alert(x);} (最常用的方法...
  • github_37037281
  • github_37037281
  • 2017年03月21日 09:29
  • 81

使用font swesome图标

使用font swesome图标
  • qq_25225441
  • qq_25225441
  • 2017年11月16日 15:15
  • 116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.21(双向栈)
举报原因:
原因补充:

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