课程实验,多有不足
#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); }