bupt coder

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

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;
}

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

2015-11-11 15:09:04

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

2015-11-10 17:18:48

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

2014-08-20 18:21:39

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

2012-12-15 10:39:55

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

2014-06-06 09:56:40

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

2016-08-09 16:36:04

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

2010-09-10 21:29:00

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

2012-05-24 21:57:08

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

2014-08-31 22:30:50

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

2014-03-13 13:02:22