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

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

下面来看具体代码实现

#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);
}

下面是测试函数
这里写图片描述


如有错误请指出,谢谢

猜你喜欢

转载自blog.csdn.net/mignatian/article/details/80203606