编程实现链队列的初始化、入队和出队操作。
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#define OK 1
#define OVERFLOW 2
#define ERROR -1
using namespace std;
typedef int QElemType;
typedef int Status ;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q){
Q.front = (QueuePtr)malloc(sizeof(QNode));
Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front)exit(OVERFLOW);
Q.front = Q.rear;
return OK;
}
Status InitStack(LinkQueue &Q){
QueuePtr p;
int e;
cout << "请输入元素,以-2 结束" << endl;
while(scanf("%d",&e) && e != -2){
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
p=Q.front->next;
while(p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
return OK;
}
void Test()
{
cout << "所有操作如下:" << endl;
cout << "(1)采用链式存储实现队列的初始化操作" << endl;
cout << "(2)采用链式存储实现队列的入队操作" << endl;
cout << "(3)采用链式存储实现队列的出队操作" << endl;
cout << "(-1)退出" << endl;
cout << "请选择:";
}
Status DeQueue(LinkQueue &Q){
QueuePtr p;
if(Q.front==Q.rear)
{
printf("队列为空!!!!!!!!\n");
return ERROR;
}
p = Q.front->next;
cout << p->data << endl;
Q.front -> next = p -> next;
if(Q.rear == p)Q.rear = Q.front;
free(p);
return OK;
}
Status EnQueue(LinkQueue &Q){
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
cout << "请输入要入队的元素:" << endl;
cin >> p->data;
Q.rear -> next = p;
p -> next = NULL;
Q.rear = p;
return OK;
}
int main()
{
LinkQueue q;
InitQueue(q);
int m;
do {
Test();
cin >> m;
switch(m){
case 1:
InitStack(q);
break;
case 2:
EnQueue(q);
break;
case 3:
DeQueue(q);
break;
}
}while(m!=-1);
return 0;
}