顺序栈的双端储存

顺序栈的双端储存

1.双端栈

在栈的共享技术中最常用的是两个栈的共享技术即双端栈:主要利用了栈“栈底位置不变,而栈顶位置动态变化”的特性。首先为两个栈申请一个共享的一维数组空间data[MaxSize],将两个栈的栈底分别放在一维数组的两端,分别是0M-1,让两个栈各自向中间延伸 。

2.初始化双端栈

2.1数据结构

typedef struct {
    ElemType data[MaxSize];
    ElemType top[2];
}DqStack;

2.2定义空栈

void InitStack(DqStack& S) 
{
    S.top[0] = -1;
    S.top[1] = MaxSize;
}

3进栈

3.1算法思想

  1. 判断栈是否满 栈为满的条件为两端的top相差为1

  2. 栈满则无法入栈,不满则可以入栈

  3. 利用判别器i 判断要插入的数据是哪一端

  4. 如果i为0则入 栈顶为S.top[0]的一端,为1则入 栈顶为S.top[1]的一端

3.2算法设计

int Push(DqStack& S, ElemType e, int i) 
{
    if (S.top[0] + 1 == S.top[1]) 
    {
        return false;
    }
    switch (i)
    {
        case 0 :
            S.data[++S.top[0]] = e;
            break;
        case 1:
            S.data[--S.top[1]] = e;
            break;
        default:
            return false;
    }
    return true;
}

4出栈

4.1算法思想

  1. 利用判别器i 判断要出栈的是哪一端

  2. i为0 则出栈的是S.top[0]一端,为1 则出栈的是S.top[1]一端

  3. 判断要出栈的哪一端 是否为空 为空则不能出栈

4.2算法设计

int Pop(DqStack& S, int i) 
{
    switch(i)
    {
    case 0:
        if (S.top[0] == -1) 
        {
            return false;
        }
        S.top[0]--;
        break;
    case 1:
        if (S.top[1] == MaxSize) 
        {
            return  false;
        }
        S.top[1]++;
        break;
    default:
        return false;
    }
    return true;
}
 
posted @ 2022-10-04 09:28  骆宾王  阅读(84)  评论(0)    收藏  举报