zoukankan      html  css  js  c++  java
  • 设计包含min函数的栈

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

    设计包含min函数的栈.cpp : Defines the entry point for the console application.

    // 设计包含min函数的栈.cpp : Defines the entry point for the console application.
    //
    /*
    题目:
    	定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 
    */
    
    #include "stdafx.h"
    #include <iostream>
    #include "MinStack.h"
    
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	CMinStack stack;
    	cout << "进栈,栈中的值为:" << endl;
    	stack.push(24);
    	stack.push(21);
    	stack.push(25);
    	stack.push(28);
    	stack.push(10);
    	stack.push(5);
    	int minValue = 0;
    	cout << "栈中最小值为:" << endl;
    	stack.Min(minValue);
    	cout << "取出栈中的值:" << endl;
    	stack.pop(minValue);
    	stack.pop(minValue);
    	cout << "取出栈中值之后,最小值为:" << endl;
    	stack.Min(minValue);
    	system("pause");
    	return 0;
    }
    
    
    CMinStack::CMinStack(void)
    {
    	m_n_stackCount = 0; //初始化索引为0	
    }
    
    CMinStack::~CMinStack(void)
    {
    }
    
    //判断栈是否为NULL
    bool CMinStack::IsEmpty()
    {
    	return (m_n_stackCount <= 0);
    }
    
    //进栈,包括Value,MinValue的值
    bool CMinStack::push(int data)
    {
    	if(m_n_stackCount > MAX_STACK_SIZE)
    	{
    		//此时栈已经满了
    		return false;
    	}
    	StackElemnt ele; 
    	ele.Value = data;
    	if (IsEmpty())
    	{
    		//栈为NULL;
    		ele.MinVale = data;
    	}else
    	{
    		if (m_StackElement[m_n_stackCount-1].MinVale > data)
    		{
    			ele.MinVale = data;
    		}else
    		{
    			ele.MinVale = m_StackElement[m_n_stackCount-1].MinVale;
    		}
    	}
    	m_StackElement[m_n_stackCount] = ele;
    	cout << "Value:" << m_StackElement[m_n_stackCount].Value << " MinValue:" << m_StackElement[m_n_stackCount].MinVale << endl;
    	m_n_stackCount++;
    	return true;
    }
    bool CMinStack::pop(int &popdate)
    {
    	if (IsEmpty())
    	{
    		return false;
    	}
    	m_n_stackCount--;
    	popdate = m_StackElement[m_n_stackCount].Value;
    	cout << "第" << m_n_stackCount	 << "栈已被取出" << endl;
    	return true;
    }
    bool CMinStack::Min(int minData)
    {
    	if (IsEmpty())
    	{
    		return false;
    	}
    	minData = m_StackElement[m_n_stackCount-1].MinVale;
    	cout << minData << endl;
    	return true;
    }
    

     头文件:MinStack.h

    #pragma once
    #define MAX_STACK_SIZE 100
    //定义栈中所存在的元素
    typedef struct minStackElement
    {
    	int Value; //进栈的值
    	int MinVale; //目前栈中的最小值
    }StackElemnt;
    
    class CMinStack
    {
    public:
    	CMinStack(void);
    	~CMinStack(void);
    	bool IsEmpty();//判断栈是否为NULL
    	bool push(int data); //将元素data进栈
    	bool pop(int &popdate);//将元素出栈
    	bool Min(int minData);//获得栈中最小值
    private:
    	StackElemnt m_StackElement[MAX_STACK_SIZE]; //定义一个栈,他所能承载的容量为MAX_STACK_SIZE
    	int m_n_stackCount; //进栈索引
    };
    

     执行结果:

  • 相关阅读:
    redis面试题总结
    TP5隐藏index.php
    php四种文件加载语句
    【Redis缓存机制】1.Redis介绍和使用场景
    Linux cpufreq 机制了解 arm
    数码设备发展的核心:分离,互联网营销 狼人:
    豆瓣:“慢公司”,互联网营销 狼人:
    互联网周刊:互联网进化论,互联网营销 狼人:
    怀念中国雅虎:技术文化和惨淡命运,互联网营销 狼人:
    菜鸟玩GAE(Google App Engine)完全指南,互联网营销 狼人:
  • 原文地址:https://www.cnblogs.com/study-programmer/p/3408229.html
Copyright © 2011-2022 走看看