【劍指offer】包含min函式的棧
轉載請註明出處:http://blog.csdn.net/ns_code/article/details/26064213
劍指offer上的第21題,之前在Cracking the Coding interview上做過,思路參考這裡,這次寫了測試函式,在九度OJ上測試通過。
- 題目描述:
定義棧的資料結構,請在該型別中實現一個能夠得到棧最小元素的min函式。
- 輸入:
輸入可能包含多個測試樣例,輸入以EOF結束。
對於每個測試案例,輸入的第一行為一個整數n(1<=n<=1000000), n代表將要輸入的操作的步驟數。
接下來有n行,每行開始有一個字母Ci。
Ci=’s’時,接下有一個數字k,代表將k壓入棧。
Ci=’o’時,彈出棧頂元素。
- 輸出:
對應每個測試案例中的每個操作,
若棧不為空,輸出相應的棧中最小元素。否則,輸出NULL。
- 樣例輸入:
7 s 3 s 4 s 2 s 1 o o s 0
- 樣例輸出:
3 3 2 1 2 3 0
AC程式碼:
/*
本程式採用陣列模擬棧
*/
typedef int ElemType;
#define MAX 100000 //棧的深度
#include<stdio.h>
#include<stdbool.h>
int top = -1;
/*
在棧頂索引指標為top時,向棧A中壓入資料data
*/
bool push(int *A,ElemType data)
{
if(top>=MAX-1 || top<-1)
return false;
A[++top] = data;
return true;
}
/*
在棧頂索引指標為top時,出棧
*/
bool pop()
{
if(top<0)
return false;
top--;
return true;
}
/*
棧頂當前索引指標為top,Min陣列最大深度也為MAX,
且Min的有效元素數與棧A中的元素個數相同,
它的對應位置用來儲存棧A對應位置到棧底這一部分元素中的最小值
*/
void minAll(int *A,int *Min)
{
if(top>MAX-1)
return ;
Min[0] = A[0];
int i;
for(i=1;i<=top;i++)
{
if(Min[i-1] > A[i])
Min[i] = A[i];
else
Min[i] = Min[i-1];
}
}
/*
返回棧頂為top時棧中元素的最小值
*/
int min(int *Min)
{
return Min[top];
}
int main()
{
int n;
int A[MAX];
int Min[MAX];
while(scanf("%d",&n) != EOF)
{
int i;
for(i=0;i<n;i++)
{
char ci;
while(getchar() != '\n')
continue;
scanf("%c",&ci);
if(ci == 's')
{
ElemType k;
scanf("%d",&k);
push(A,k);
}
if(ci == 'o')
{
pop();
}
minAll(A,Min);
if(top<0)
printf("NULL\n");
else
printf("%d\n",min(Min));
}
}
return 0;
}
/**************************************************************
Problem: 1522
User: mmc_maodun
Language: C
Result: Accepted
Time:60 ms
Memory:1624 kb
****************************************************************/
相關文章
- 劍指offer——包含min函式的棧函式
- 【劍指offer】13.包含min函式的棧函式
- 包含min函式的棧(劍指offer)---C語言函式C語言
- 力扣 - 劍指 Offer 30. 包含min函式的棧力扣函式
- (十四)劍指offer之棧的壓入彈出序列及包含min函式的棧函式
- 包含min函式的棧函式
- 設計包含min函式的棧函式
- JZ-020-包含 min 函式的棧函式
- 《劍指 Offer》棧實現佇列佇列
- [每日一題] 第二十七題:包含min函式的棧每日一題函式
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- 【劍指offer】字串的排列字串
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)演算法函式時間複雜度
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 劍指offer——正規表示式匹配C++C++
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】左旋轉字串字串
- 劍指Offer題解合集
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 【劍指offer】樹的子結構
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 【劍指offer】字串轉整數字串
- 劍指offer刷題記錄
- 《劍指offer》:[54]表示數值的字串字串
- 【劍指offer】陣列中的逆序對陣列
- 【劍指offer】替換字串中的空格字串
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指offer——重建二叉樹二叉樹
- 【劍指offer】二叉樹深度二叉樹
- 【劍指offer】員工年齡排序排序