課程實驗,多有不足
#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);
}