程序员面试100题之二 设计含min函数的栈

来源:互联网 发布:网上发布软件 编辑:程序博客网 时间:2024/05/16 18:31
// 程序员面试100题之二 设计包含min函数的栈.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//#include <stack>//stack 允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有 任何其他方法可以存取 stack 的其他元素,换言之,stack 不允许随机访问。#include <iostream>#define N 100using namespace std;struct  STK{int stkData[N];// serve as stackint stkMin[N];// stkMin top element represent the index of minnest element of stkDatavoid Pop();void Push(int value);int Min();int size;//defaule as 0 can put hereSTK(){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 minelsestkMin[size]=k;// remain as the same even added another element}elsestkMin[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;}