# 编程之美读书笔记-队列中取最大值操作问题

1. EnQueue(v):将v加入队列中
2. DeQueue():使队列中的队首元素删除并返回此元素
3. MaxElement:返回队列中的最大元素

#include<iostream>
using namespace std;
#define MAXN 1000

class MyStack
{
private:
int stackTop;
int maxStackItemIndex;
//最大元素的位置
int stackItem[MAXN];
//如果i位置的元素不是当前栈中最大的，这个值就为-1
public:
MyStack()
{
stackTop = -1;
maxStackItemIndex = -1;
}
bool isEmpty()
{
return stackTop == -1;
}
bool isFull()
{
return stackTop == MAXN - 1;
}
void push(int x)
{
if (this->isFull())
{
cout << "the stack is full now." << endl;
return;
}
else
{
stackItem[++stackTop] = x;
if (x > Max())
{
maxStackItemIndex = stackTop;
}
else
}
}
int pop()
{
int ret;
if (this->isEmpty())
{
cout << "the stack is empty now." << endl;
return INT_MIN;
}
else
{
ret = stackItem[stackTop];
if (stackTop == maxStackItemIndex)
{
}
stackTop--;
}
return ret;
}
int Max()
{
if (maxStackItemIndex >= 0) return stackItem[maxStackItemIndex];
else return INT_MIN;
}
};

int main()
{
MyStack mystack;
mystack.push(3);
mystack.push(4);
mystack.push(8);
mystack.push(1);
mystack.pop();
mystack.push(7);
cout << mystack.Max() << endl;
return 0;
}

#include<iostream>
using namespace std;
#define MAXN 1000

class MyStack
{
private:
int stackTop;
int maxStackItemIndex;
//最大元素的位置
int stackItem[MAXN];
//如果i位置的元素不是当前栈中最大的，这个值就为-1
public:
MyStack()
{
stackTop = -1;
maxStackItemIndex = -1;
}
bool isEmpty()
{
return stackTop == -1;
}
bool isFull()
{
return stackTop == MAXN - 1;
}
void push(int x)
{
if (this->isFull())
{
cout << "the stack is full now." << endl;
return;
}
else
{
stackItem[++stackTop] = x;
if (x > Max())
{
maxStackItemIndex = stackTop;
}
else
}
}
int pop()
{
int ret;
if (this->isEmpty())
{
cout << "the stack is empty now." << endl;
return INT_MIN;
}
else
{
ret = stackItem[stackTop];
if (stackTop == maxStackItemIndex)
{
}
stackTop--;
}
return ret;
}
int Max()
{
if (maxStackItemIndex >= 0) return stackItem[maxStackItemIndex];
else return INT_MIN;
}
};

class MyQueue
{
private:
MyStack mystackA,mystackB;
public:
int MaxValue(int x, int y)
{
if (x > y) return x;
else return y;
}
int Max()
{
return MaxValue(mystackA.Max(), mystackB.Max());
}
void EnQueue(int v)
{
mystackB.push(v);
}
int DeQueue()
{
if (mystackA.isEmpty())
{
while (!mystackB.isEmpty()) mystackA.push(mystackB.pop());
}
return mystackA.pop();
}
};

int main()
{
MyQueue myqueue;
myqueue.EnQueue(8);
myqueue.EnQueue(3);
myqueue.EnQueue(4);
myqueue.EnQueue(1);
myqueue.DeQueue();
myqueue.EnQueue(7);
cout << myqueue.Max() << endl;
return 0;
}

• 本文已收录于以下专栏：

## 编程之美—队列中取最大值操作问题

• zhonghua18517
• 2014年06月06日 09:56
• 501

## 编程之美-队列中取最大值操作问题

【试题描述】 方法一：时间复杂度O(N) 方法二： 方法三： 这样队列的类定义如下：...
• GarfieldEr007
• 2015年11月10日 17:18
• 433

## 编程之美——队列中取最大值操作问题

• chenglinhust
• 2012年12月15日 10:39
• 598

## 读书笔记之编程之美 - 3.7 队列中取最大值操作问题

• erorr
• 2010年09月10日 21:29
• 1433

## 编程之美3.7队列中取最大值操作

/* 编程之美3.7队列中取最大值操作 采用STL中的已有stack 方法：用的文中的方法3：保存栈中最大值可以简单实现 */ #include #include using namespace st...
• DHL1234567
• 2014年08月31日 22:30
• 471

## 编程之美之队列中取最大值操作

• fangjian1204
• 2014年08月20日 18:21
• 1165

## 编程之美系列之栈和队列2—在O（1）的时间内得到队列的最大或者最小值

• kay_zhyu
• 2013年04月30日 15:00
• 2830

## 编程之美--3.7 队列中取最大值操作问题

• 2014年08月06日 00:01
• 570

## [编程之美] PSet3.7 队列中取最大值操作问题

• u010013164
• 2014年08月18日 19:54
• 851

## 编程之美：第三章 结构之法 3.7队列中取最大值操作问题

/* 队列中取最大值操作问题: 假设有这样一个拥有3个操作的队列 1EnQueue(v):将v加入到队列中 2DeQueue():使队列中的队首元素删除并返回此元素 3MaxElement:返回队列中...
• qingyuanluofeng
• 2015年08月03日 00:53
• 332

举报原因： 您举报文章：编程之美读书笔记-队列中取最大值操作问题 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)