数据结构(C语言版)规范代码之队列

来源:互联网 发布:淘宝直播平台 编辑:程序博客网 时间:2024/06/04 18:14

//队列实验题
#include<iostream>
#include<malloc.h>
using namespace std;
#define Status int
#define QElemType char
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef struct QNode
{
 QElemType data;
 struct QNode *next;
 
}QNode,*QueuePtr;
typedef struct
{
 QueuePtr front;
 QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue &Q);//初始化
Status QueueEmpty(LinkQueue Q);//判断是否为空
Status DestroyQueue(LinkQueue &Q);//销毁队列
Status EnQueue(LinkQueue &Q,QElemType e);//进入一个元素
Status DeQueue(LinkQueue &Q,QElemType &e);//出一个元素
Status PrintQueue(LinkQueue Q);//输出所有元素
Status QueueLength(LinkQueue Q);//获取队列长度
void main()
{
 LinkQueue Q;//定义一个队列
 InitQueue(Q);//初始化一下
 //判断是否为空
 if(QueueEmpty(Q))
  cout<<"The queue is Empty"<<endl;
 //abc进入了
 EnQueue(Q,'a');
 EnQueue(Q,'b');
 EnQueue(Q,'c');
 cout<<"a,b,c enter the queue"<<endl;
 QElemType s='\0';
 //队头出来了,存进了s中
 DeQueue(Q,s);
 cout<<"\'"<<s<<"\'come out of the queue"<<endl;
 //def进入了
 EnQueue(Q,'d');
 EnQueue(Q,'e');
 EnQueue(Q,'f');
 cout<<"d,e,f enter the queue"<<endl;
 //输出队列里面的元素
 PrintQueue(Q);
}
Status InitQueue(LinkQueue &Q)//初始化
{
 //构造一个空的队列Q
 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
 if(!Q.front) exit(OVERFLOW);
 Q.front->next=NULL;
 return OK;
}

Status DestroyQueue(LinkQueue &Q)//释放所有空间
{
 //销毁队列Q
 while(Q.front)
 {
  Q.rear=Q.front->next;
  free(Q.front);
  Q.front=Q.rear;
 }
 return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)
{
 //插入元素e为Q的新的队尾元素
 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;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{
 //若队列不为空,则删除队列的队头元素,用e返回其值,并返回ok
 //否则返回ERROR
 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 OK;
}
Status QueueEmpty(LinkQueue Q)
{
 if(Q.front==Q.rear)
  return TRUE;
 return FALSE;
}
Status PrintQueue(LinkQueue Q)
{
 QueuePtr p;
 if(Q.front==Q.rear)//如果为空那么返回错误
  return ERROR;
 p=Q.front;//先放置在头结点
 while(p!=Q.rear)
 {
  p=p->next;
  cout<<p->data;
 }
 return OK;
}
Status QueueLength(LinkQueue Q)
{
 QueuePtr p;
 if(Q.front==Q.rear)//如果为空那么返回0
  return 0;
 p=Q.front;//先放置在头结点
 int Len=0;
 while(p!=Q.rear)
 {
  p=p->next;
  Len++;
 }
 return Len;
}