课程实验,多有不足
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int QueueElementType;
typedef struct Node
{
QueueElementType data; /*数据域*/
struct Node *next; /*指针域*/
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
/*初始化操作。*/
int InitQueue(LinkQueue *Q)
{
/* 将Q初始化为一个空的链队列 */
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL)
{
Q->rear=Q->front;
Q->front->next=NULL;
return(TRUE);
}
else return(FALSE); /* 溢出!*/
}
/*入队操作。*/
int EnterQueue(LinkQueue *Q,QueueElementType x)
{
/* 将数据元素x插入到队列Q中 */
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return(TRUE);
}
else return(FALSE);
//请完成本函数的功能
}
/*出队操作。*/
int DeleteQueue(LinkQueue *Q,QueueElementType *x)
{
/* 将队列Q的队头元素出队,并存放到x所指的存储空间中 */
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FALSE);
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
*x=p->data;
free(p);
return(TRUE);
//请完成本函数的功能
}
int GetHead(LinkQueue *Q, QueueElementType *x)
{
/*提取队列的队头元素,用x返回其值*/
if(Q->front==NULL)
return(FALSE);
else
{
*x=Q->front->data;
return(TRUE);
}
//请完成本函数的功能*/
}
int DestroyLinkQueue(LinkQueue *Q)
{//销毁一个队列
QueueElementType e;
while(Q->front!=Q->rear)
DeleteQueue(Q,&e);
free(Q->front);
Q->front=Q->rear=NULL;
return OK;
}
int LinkQueueLength(LinkQueue *Q)
{//队列的长度
int i=0;
LinkQueueNode * p=Q->front;
while(p!=Q->rear){
++i;
p=p->next;
}
return i;
}
int DisplayLinkQueue(LinkQueue *Q)
{//显示队列中所有元素
LinkQueueNode * p;
int i=0;
p=Q->front->next;
if(p==NULL) printf("队列为空!\n");//队列为空
else{
while(p){ //否则显示队列中所有元素
printf("[%d:%d]",++i,p->data);
p=p->next;
}
printf("\n");
}
return OK;
}
void main(){
LinkQueue LQ;
QueueElementType e;
int flag=1,ch,len;
int temp;
printf("本程序实现链式结构队列的操作。\n");
printf("可以进行入队列、出队列等操作。\n");
InitQueue(&LQ); //初始化队列
while(flag){
printf("请选择:\n");
printf("1.显示队列所有元素\n");
printf("2.入队列\n");
printf("3.出队列\n");
printf("4.求队列的长度\n");
printf("5.退出程序\n");
scanf("%d",&ch);
switch(ch){
case 1:DisplayLinkQueue(&LQ); //显示队列中所有元素
break;
case 2:printf("请输入要人队的元素(一个整数):");
scanf("%d",&e); //输入要入队列的字符
EnterQueue(&LQ,e);//入队列
DisplayLinkQueue(&LQ);
break;
case 3:temp=DeleteQueue(&LQ,&e); //出队列
if(temp==TRUE){
printf("出队一个元素:%d\n",e);
DisplayLinkQueue(&LQ);
}
else printf("队列为空!\n");
break;
case 4:len=LinkQueueLength(&LQ);
printf("队列的长度为:%d\n",len);
break;
default:flag=0;
printf("程序运行结束,按任意键退出!\n");
getcher();
}
}
DestroyLinkQueue(&LQ);
}