美文网首页C语言数据结构
用一个数组实现两个堆栈

用一个数组实现两个堆栈

作者: tingshuo123 | 来源:发表于2017-06-28 19:12 被阅读33次

请用一个数组实现两个堆栈, 要求最大地利用数组空间, 使数组只要有空间入栈操作就可以成功。

思路:使这两个栈分别从数组的两头开始, 并向中间增长; 当两个栈的栈顶指针相遇(不是相等)时, 表示两个栈都满了。

IMG_20170628_183147.jpg

伪码实现:

#define MAXSIZE 10 //存储元素的最大个数
#define bool int
#define True 1
#define Flase 0

typedef struct {
    element_type data[MAXSIZE];
    int top1;
    int top2;
} stack;

stack s;    // 声明结构变量 s

// 两个栈为空的位置
s.top1 = -1;
s.top2 = MAXSIZE;

// 入栈
void push(stack *s, element_type item, int tag)
{
    if ((s->top2) - (s->top1) != 1){
        // 选择要操作的栈
        if (tag == 1){
            s->data[(s->top1)+1] = item;    // 向右填充
            s->top1++;
        } else {
            s->data[(s->top2)-1] = item;    // 向左填充
            s->top2--;
        }
    }
}

// 出栈
element_type pop(stack *s, int tag)
{
    element_type n = NULL;
    if (tag == 1){
        if (s->top1 != -1){
            n = s->data[(s->top1--)];
        }
    } else {
        if (s->top2 != MAXSIZE){
            n = s->data[(s->top2--)];
        }
    }
    return n;
}

// 判断两个堆栈是全否为空
bool is_empty(stack *s, int n)
{
    bool flag = False;
    if ((s->top1 == -1) && (s->top2 == n)){
        flag = True;
    }
    
    return flag;
}

// 判断是否满了
bool is_full(stack *s)
{
    bool flag = False;
    if (s->top2 - s->top1 == 1){
        flag = True;
    }
    
    return flag;
}

相关文章

  • 用一个数组实现两个堆栈

    请用一个数组实现两个堆栈, 要求最大地利用数组空间, 使数组只要有空间入栈操作就可以成功。 思路:使这两个栈分别从...

  • 在Python中实现两个堆栈的队列

    在Python中实现两个堆栈的队列。数据结构了解堆栈和队列。然后用两个堆栈实现一个队列。堆栈和队列都是列表。但它们...

  • 堆栈(C语言)

    堆栈(顺序存储)数组方式 一个有界数组存储两个堆栈 堆栈(链式存储) 中缀表达式如何转换为后缀表达式从头到尾读取中...

  • 【面试题】算法

    一、简单算法的实现 1.用两个堆栈实现队列 class Quene{ constructor(){ thi...

  • 堆栈(Stack)---数组实现

    【后缀表达式】运算符号位于两个运算数之后,如,abc+de/- [a+bc-d/e]求值策略:从左向右扫描,逐个处...

  • 用数组实现栈、队列

    用数组实现一个栈 用数组实现一个队列 用单链表实现给队列

  • C++中函数的调用方式

    编译器一般使用堆栈实现函数调用。 堆栈是存储器的一个区域,嵌入式开发环境有时需要程序员自己定义一个数组作为堆栈。W...

  • 两个堆栈实现队列及排序

    两个堆栈实现队列及排序

  • 【JavaScript实现数据结构系列】栈

    堆栈可以用链表和数组两种方式实现,这里分别给出这两种实现方式。代码如下: 测试: 栈的应用 例子:数值进制转换算法...

  • 数组

    原文JS中的数组提供了四个操作,以便让我们实现队列与堆栈!小理论:队列:先进先出堆栈:后进先出实现队列的方法:sh...

网友评论

    本文标题:用一个数组实现两个堆栈

    本文链接:https://www.haomeiwen.com/subject/przucxtx.html