描述
ENG
实现一个栈, 支持以下操作:
push(val) 将 val 压入栈
pop() 将栈顶元素弹出, 并返回这个弹出的元素
min() 返回栈中元素的最小值
要求 O(1) 开销.
输入:
push(1)
min()
push(2)
min()
push(3)
min()
输出:
1
1
1
#include <stdio.h>
#include <stdlib.h>
struct linklist{
int val;
struct linklist *next;
};
struct linklist *head;
void push(int val)
{
struct linklist *tmp = (struct linklist *)malloc(sizeof(struct linklist));
tmp->val = val;
tmp->next = head->next;
head->next = tmp;
if (head->val > val)
head->val = val;
}
int min()
{
return head->val;
}
int pop()
{
struct linklist *ptr;
int val;
//stack is empty
if (head->next == NULL)
return -1;
ptr = head->next;
head->next = ptr->next;
val = ptr->val;
free(ptr);
return val;
}
int main()
{
head = (struct linklist *)malloc(sizeof(struct linklist));
head->val = 0xFFFF;
head->next = NULL;
push(1);
printf("%d\n", min());
push(2);
printf("%d\n", min());
push(3);
printf("%d\n", min());
printf("%d, %d\n", pop(), min());
printf("%d, %d\n", pop(), min());
printf("%d, %d\n", pop(), min());
free(head);
return 0;
}