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

思想就是入队操作时,对最大值进行记录。一种方法直接创建队列,二种方法是利用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;
}

结果为:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值