#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
const int max_size = 1000;
typedef struct node
{
struct node *next;
int data;
}Node;
typedef struct
{
Node *front;
Node *rear;
//int data[max_size];
//int front;
//int rear;
}queue;
void Initqueue( queue *&qu)//指针的传参引用
{
qu = (queue *)malloc(sizeof(queue));
qu->front = NULL;
qu->rear = NULL;
//qu.rear = qu.front = 0;
}//构造一个空对列
int Enqueue( queue *&qu, int x)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = x;
p->next = NULL;
if(qu->rear == NULL) //原对为空对
{
qu->front = p;
qu->rear = p;
}
else
{
qu->rear->next = p;
qu->rear = p;
}
return 1;
/*
if((qu.rear + 1) % max_size == qu.front)//判断队列是否已满
{
printf("/n/t/t队列已满");
return 0;
}
else
{
qu.rear = (qu.rear + 1) % max_size;
qu.data[qu.rear] = x;
return 1;
}
*/
}//入队
int Dequeue(queue *&qu, int &x)
{
Node *p;
if(qu->front == NULL)
{
printf("/n/t/t此队列为空队列");
return 0;
}
else
{
x = qu->front->data;
p = qu->front;
if(qu->front == qu->rear) //只有一个结点的情况
{
qu->front =NULL;
qu->rear = NULL;
}
else
{
qu->front = qu->front->next;
}
}
free(p);
return 1;
/*
if(qu.front == qu.rear)//判断是否为空队列
{
printf("/n/t/t此队列为空队列");
return 0;
}
else
{
qu.front = (qu.front + 1) % max_size;
x = qu.data[qu.front];
return 1;
}
*/
}//出队
/*
int Emtptyqueue(queue qu)
{
if(qu.front == qu.rear)
{
printf("/n/t/t此队列为空队列");
return 0;
}
else
{
printf("/n/t/t此队列为非空队列");
return 1;
}
}//判断队列是否为空
*/
int display(queue *qu)
{
Node *p;
p = qu->front;
if(qu->front == NULL)
{
printf("/n/t/t此队列为空队列");
return 0;
}
else
{
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
return 1;
/*
int i;
i = qu.front;
if(qu.front == qu.rear)
{
printf("/n/t/t此队列为空队列");
return 0;
}
else
{
printf("/n/t/t");
while(1)
{
i = (i + 1) % max_size;
printf("%d ", qu.data[i]);
if(i == qu.rear)
break;
}
}
return 1;
*/
} //显示队列
int main()
{
queue *q;
int n;
printf("/n/t/t*****************************************");
printf("/n/t/t*********** 1 构造一个空对列 *******");
printf("/n/t/t*********** 2 入队 *******");
printf("/n/t/t*********** 3 出对 *******");
printf("/n/t/t*********** 4 显示队列 *******");
printf("/n/t/t*****************************************");
Initqueue(q);
while(1)
{
printf("/n/t/t输入你要选择的操作 n = ");
scanf("%d", &n);
if( n == 1)
{
Initqueue(q);
}
else if(n == 2)
{
int x;
printf("/n/t/t输入你要插入队列的元素x = ");
scanf("%d", &x);
Enqueue(q, x);
}
else if(n == 3)
{
int x;
Dequeue(q, x);
printf("/n/t/t显示出对的元素 x = %d", x);
printf("/n/t/t显示队列 :");
display(q);
}
else if(n == 4)
{
printf("/n/t/t显示队列 : ");
display(q);
}
else
{
printf("/n/t/t没有你要选择的操作");
}
}
}