思想就是入队操作时,对最大值进行记录。一种方法直接创建队列,二种方法是利用2个栈实现队列功能(详见前面的文章)。此处给出第一种方法代码:
// MaxQueue.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
typedef int type;
using namespace std;
//链栈结点
typedef struct stack
{
type data;
struct stack *next;
}stack,*pStack;
//链队队列结点
typedef struct queue
{
type data;
struct queue *next;
}queue,*pQueue;
//队
typedef struct lqueue
{
pQueue front;//队首指针
pQueue rear; //队尾指针
type Max;//最大值变量
}lqueue,*pLQueue;
//队列初始化
void InitQueue(pLQueue Q)
{
Q->front=(pQueue)malloc(sizeof(pQueue));
if(NULL==Q->front)
exit(-1);
Q->rear=(pQueue)malloc(sizeof(pQueue));
if(NULL==Q->rear)
exit(-1);
Q->front->next=NULL;
Q->rear->next=NULL;
Q->Max=0;
}
//进队
void EnterQueue(pLQueue Q,type data)
{
pQueue p=(pQueue)malloc(sizeof(pQueue));
if(NULL==p)
exit(-1);
p->data=data;
p->next=NULL;
if(NULL==Q->rear->next)//空队列
{
Q->front->next=p;
Q->rear->next=p;
}
else
{
Q->rear->next->next=p;
Q->rear->next=p;
}
if(data>Q->Max)
Q->Max=data;
}
//出队
pQueue DeleteQueue(pLQueue Q)
{
if(NULL==Q->rear->next)
exit(-1);
if(NULL==Q->front->next->next)//只有一个元素
{
Q->rear->next=NULL;
}
pQueue temp=Q->front->next;
Q->front->next=temp->next;
return temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
type a[6]={21,24,11,16,19,150};
lqueue Q;
InitQueue(&Q);
for(int i=0;i<6;i++)
EnterQueue(&Q,a[i]);
pLQueue L=&Q;
cout<<L->Max<<endl;
pQueue temp=DeleteQueue(&Q);
cout<<"出队元素为:"<<temp->data<<endl;
return 0;
}
结果为: