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

175人阅读 评论(0)

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

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：167030次
• 积分：2457
• 等级：
• 排名：第15086名
• 原创：87篇
• 转载：111篇
• 译文：20篇
• 评论：29条
博客专栏
 漏洞分析 文章：0篇 阅读：0
评论排行
最新评论