// 队列1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;//队头指针,指向队头元素的前一个位置
QueuePtr rear;//队尾指针
}LinkQueue;
int InitQueue(LinkQueue *Q)
{
//构造一个空队列
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if(!(*Q).front)
exit(-1);
(*Q).front->next=NULL;
return true;
}
int GetHead_Q(LinkQueue Q,int *e)
{
//若队列不为空,则用e返回Q的队头元素,并返回OK,否则返回ERROR;
QueuePtr p;
if(Q.front==Q.rear)
return false;
p=Q.front->next;
*e=p->data;
return true;
}
int EnQueue(LinkQueue *Q,int e)
{
//插入元素e为Q的新的队尾元素
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p)//存储分配失败
exit(-1);
p->data=e;
p->next=NULL;
(*Q).rear->next=p;
(*Q).rear=p;
return true;
}
int DeQueue(LinkQueue *Q,int *e)
{
//若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
QueuePtr p;
if((*Q).front==(*Q).rear)
return false;
p=(*Q).front->next;
*e=p->data;
(*Q).front->next=p->next;
if((*Q).rear==p)
(*Q).rear=(*Q).front;
free(p);
return true;
}
int main(int argc, char* argv[])
{
int num,ch[200];
int head,head1,head2;
LinkQueue Lin;
InitQueue(&Lin);
cout<<"请输入元素的个数"<<endl;
cin>>num;
cout<<"输入各个元素"<<endl;
for(int i=1;i<=num;i++)
{
cin>>ch[i];
EnQueue(&Lin,ch[i]);
}
GetHead_Q(Lin,&head);
cout<<"队头元素是 "<<head<<endl;
DeQueue(&Lin,&head1);
cout<<"删除掉的队头元素是 "<<head1<<endl;
GetHead_Q(Lin,&head2);
cout<<"新的队头元素是 "<<head2<<endl;
return 0;
}