// 程序员面试100题之二 设计包含min函数的栈.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//#include <stack>//stack 允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有 任何其他方法可以存取 stack 的其他元素,换言之,stack 不允许随机访问。
#include <iostream>
#define N 100
using namespace std;
struct STK{
int stkData[N];// serve as stack
int stkMin[N];// stkMin top element represent the index of minnest element of stkData
void Pop();
void Push(int value);
int Min();
int size;//defaule as 0 can put here
STK()
{
size=0;
}
};
void STK::Push(int value)
{
stkData[size] = value;
if(size!=0)
{
int k = stkMin[size-1];
if(stkData[k]>value)//stack 允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有 任何其他方法可以存取 stack 的其他元素,换言之,stack 不允许随机访问。
stkMin[size]=size;//update the min
else
stkMin[size]=k;// remain as the same even added another element
}
else
stkMin[size]=0;
size++;
}
int STK::Min()
{
if(size>0)
return stkData[stkMin[size-1]];
else
return -1;
}
void STK::Pop()
{
if(size>0)
size--;
}
int _tmain(int argc, _TCHAR* argv[])
{
STK stk;
int n;
cout<<" input n "<<endl;
cin>>n;
cout<<" input n datas "<<endl;
int *arr = new int[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
stk.Push(arr[i]);
}
cout<<endl<<" find the min is "<<stk.Min()<<endl;
for(int i=0;i<n;i++)
{
stk.Pop();
cout<<endl<<" after one pop the min is "<<stk.Min()<<endl;
}
system("pause");
return 0;
}
程序员面试100题之二 设计含min函数的栈
最新推荐文章于 2020-07-30 11:37:32 发布