简单的入队出队(输入输出)
#include<stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Boolean;
typedef int QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;//对头指针
QueuePtr rear;//队尾指针
}LinkQueue;
//构造一个空队列Q
Status InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit (OVERFLOW);
Q.front->next=NULL;
return OK;
}
//插入元素e为Q的新的队尾元素
Status EnQueue(LinkQueue &Q,QElemType e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
//若队列不空,则删除Q的对头元素,用e返回其值
Status DeQueue(LinkQueue &Q,QElemType e){
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return e;
}
//DIS函数输出队列Q中的元素
void DIS(LinkQueue &Q){
QueuePtr p;
*p;
p=Q.front->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
QElemType e;
LinkQueue Q;
int n;
InitQueue(Q);
printf("入队\n");
printf("输入要入队的元素个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&e);
EnQueue(Q,e);
}
printf("已入队\n");
DIS(Q);
printf("被删除的队头元素是:%d\n",DeQueue(Q,e));
DIS(Q);
printf("已出队\n");
return 0;
}