zoukankan      html  css  js  c++  java
  • 微软算法面试题(2)

    设计包含min函数的栈。
    定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
    要求函数min、push以及pop的时间复杂度都是O(1)。

    理解:

    1.建立两个顺序栈A,B。

    A:依次push输入的节点;

    B:每次向push节点的同时,向B中pushA中的最小值。

    比如:

    A     B

    2     2

    4     2

    6     2

    1     1   

    3     1

    5     1

    /*
     * micro3.h
     *
     *  Created on: 2011-3-13
     *      Author: zq
     */
    
    #ifndef MICRO3_H_
    #define MICRO3_H_
    class SqStack{
    public:
    	int *base;
    	int *top;
    	//int length;
    	int stacksize;
    	SqStack(int *b=0,int *t=0,int l=0,int size=50):
    		base(b),top(t),stacksize(size){
    		base = new int[stacksize];
    		top = base;
    	}
    	~SqStack(){
    		delete []base;
    	}
    	int Push(int data);
    	int Pop();
    };
    
    #endif /* MICRO3_H_ */
    
    
    
    /*
     * micro3.cpp
     *
     *  Created on: 2011-3-13
     *      Author: zq
     */
    #include <iostream>
    #include "micro3.h"
    using namespace std;
    
    int SqStack::Push(const int newdata){
    	//if(top-base >= stacksize)
    	*++top = newdata;
    	//++length;
    	return 0;
    }
    
    int SqStack::Pop(){
    	if (top == base) return NULL;
    	int data = *top--;
    	//--length;
    	return data;
    }
    
    int main(){
    	SqStack S,minS;
    	int data;
    	cout << "输入数据: " <<endl;
    	cin >> data;
    	while(data != 9999){
    		S.Push(data);
    		if (minS.top == NULL ||*minS.top > data)
    			minS.Push(data);
    		else minS.Push(*minS.top);
    		cin >> data;
    	}
    	//cout << "S.length: " <<S.length << endl;
    	int length = S.top-S.base;
    	cout << "S.length: " <<length << endl;
    
    	for (int i = 1;i <= length;i++){
    		cout << "显示第"<< i <<"次出栈数据"<< S.Pop() << endl;
    		cout << "显示第"<< i <<"次出栈前栈中最小值: " << minS.Pop() << endl;
    	}
    
    	return 0;
    }
    
    
    

  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/phoenixzq/p/1986930.html
Copyright © 2011-2022 走看看