【100题】第二题
来源:互联网 发布:java程序设计 pdf 编辑:程序博客网 时间:2024/04/28 01:42
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
分析:既然要求“求最小”时间复杂度为O(1) ,所以一定要在top指针结构内记录最小量。就是在push 时将最小值
#include "stdio.h"
#include"malloc.h"
#define STACK_LEN 50
/*
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
*/
typedef struct
{
int val; // 存储值
int min;
} stack_item;
typedef struct
{
stack_item data[STACK_LEN]; //使用另一个数据结构
int top;
} stack;
void push(stack *stk, int val)//放入
{
//printf("%d",stk->top);
stk->data[++stk->top].val = val;
//printf("sssssss");
if (stk->top > 0)
{
if (val < stk->data[stk->top - 1].min)//如果当前push进的元素小于栈中最小元素
stk->data[stk->top].min = val; //把当前元素置为栈中最小元素
else //否则,不更新
stk->data[stk->top].min = stk->data[stk->top - 1].min; //新插入值后的 最小值与 插入之前最小值相同
}
else //栈 初始化 为空的情况
stk->data[stk->top].min = val;
}
int pop(stack *stk)
{
return stk->data[stk->top--].val;
}
int min(stack *stk)
{
return stk->data[stk->top].min;
}
int main()
{
int i;
int a[9]={10,7,3,3,8,5,2,6};
stack *stk;
stk=(stack*)malloc(sizeof(stack));//这里一定要
stk->top=-1;//这里需要添加
for(i=0;i<8;++i)
push(stk, a[i]);
printf("%d",min(stk));
return 0;
}
- 第二章第二题
- 第二章第二题
- 第二章第二题
- 【100题】第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- 第二题
- ant 构建文件路径
- Hadoop的一些经验
- 1.2.4 Palindromic Squares
- java 函数式编程 - 判断集合中是否存在满足某个条件的元素
- Android ListView 滚动加载数据
- 【100题】第二题
- 插件结构的实现之原理篇
- Overlapped I/O 在你的身后变戏法
- 越来越忙的日子
- 为谁打工
- 本机两个Android模拟器之间的网络通信
- 11个有用的移动网页开发App和HTML5框架
- js格式化日期
- Struts2把session、request这些web对象封装起来