欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构之栈和队列面试题(1)最小栈的实现

程序员文章站 2024-03-22 14:00:40
...

我们对常见的一些栈和队列面试题进行了解
首先我们来看一下,实现一个最小栈,最小栈是什么?
就是不破坏栈的结构能保证每次出栈的元素都是当前栈内最小的元素,经过考虑,我们选择每次入栈两个元素,其中第二个元素就是当前最小的元素,这样就可以保证,在每一次出栈两个元素的时候,最小的元素都在栈顶。

下面来看具体代码实现

#include<stdio.h>
#include"seqstack.h"
#include"seqstack.c"

typedef struct minseqstack{
    seqstack stack;
}minseqstack;

打印函数
void minseqstack_print(minseqstack *s)
{
    if(s == NULL)
    {
        return;
    }
    size_t i = 0;
    for(;i<s->stack.size;i++)
    {
        printf("%c ",s->stack.data[i]);
    }
    printf("\n");

}

初始化函数

void minseqstack_init(minseqstack *s)
{
    if(s == NULL)
    {
        return;
    }
    seqstack_init(&s->stack);
    return;
}

入栈函数

void minseqstack_push(minseqstack *s,seqstacktype value)
{
    if(s == NULL)
    {
        return;
    }
    if(s->stack.size == 0)
    {
        seqstack_push(&s->stack,value);
        seqstack_push(&s->stack,value);
        return;
    }
    seqstacktype top;
    seqstacktype min;
    seqstack_gettop(&s->stack,&top);
    min = top < value? top : value;
    seqstack_push(&s->stack,value);
    seqstack_push(&s->stack,min);

}

出栈函数

void minseqstack_pop(minseqstack *s)
{
    if(s == NULL)
    {
        return;
    }
    if(s->stack.size == 0)
    {
        return;
    }
    seqstack_pop(&s->stack);
    seqstack_pop(&s->stack);
}

取栈顶元素

int minseqstack_gettop(minseqstack *s,seqstacktype *value)
{
    if(s == NULL || value == NULL)
    {
        return 0;
    }
    if(s->stack.size == 0)
    {
        return 0;
    }
    return seqstack_gettop(&seq->stack,value);
}

下面是测试函数
数据结构之栈和队列面试题(1)最小栈的实现


如有错误请指出,谢谢