#include<stdio.h>
#include<stdlib.h>
#define OVERLOW -2
#define ERROR 0
#define OK 1
typedef int Status;
typedef float QElemType;
typedef struct QLNode{
QElemType data;
struct QLNode *next;
}QLNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//创建空队列
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QLNode));
if(!Q.front)
{
exit(OVERLOW);
}
Q.front = NULL;
return OK;
}
//销毁队列
Status DestoryQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear = Q.front->next;
free(Q.rear);
Q.front = Q.rear;
}
return OK;
}
//插入元素e为Q的新的队尾元素
Status EnQueue(LinkQueue &Q, QElemType e)
{
QueuePtr p;
printf("请输入e的值\n");
scanf("%f", &e);
p = (QueuePtr)malloc(sizeof(QLNode));
if(!p)
{
exit(OVERLOW);
}
p->data = e;
p->next =NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
//删除Q的对头元素,用e带回
Status DeQueue(LinkQueue &Q, QElemType &e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QLNode));
if(!p)
{
exit(OVERLOW);
}
if(Q.front == Q.rear)
{
return ERROR;
}
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (p == Q.rear) //当删除最后一个元素时,尾指针可能没有指向
{
Q.rear = Q.front;
}
free(p);
return OK;
}
//清空队列
Status ClearQueue(LinkQueue &Q)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QLNode));
if(!p)
{
exit(OVERLOW);
}
while(!Q.rear)
{
p = Q.front->next;
Q.front->next = p->next;
free(p);
}
Q.rear = Q.front;
return OK;
}
//计算队列的长度
Status QueueLength(LinkQueue Q)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QLNode));
if(!p)
{
exit(OVERLOW);
}
Status i = 1;
p = Q.front->next;
while(p != Q.rear)
{
p = p->next;
i++;
}
return i;
}
//用e返回Q的头部元素
Status GetHead(LinkQueue Q, QElemType &e)
{
if(Q.front == Q.rear)
{
return ERROR;
}
e = Q.front->next->data;
return OK;
}
//显示队列
Status VisitQueue(LinkQueue Q)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QLNode));
if(!p)
{
exit(OVERLOW);
}
p = Q.front->next;
while(p != Q.rear->next)
{
printf("%f", p->data);
p = p->next;
}
return 0;
}
int main()
{
LinkQueue Q;
QElemType e;
Status flag;
while(1)
{
printf("****************************\n");
printf("********队列操作系统********\n");
printf("1.创建空队列 \n");
printf("2.插入元素e为Q的新的队尾元素\n");
printf("3.删除Q的对头元素,用e带回 \n");
printf("4.清空队列 \n");
printf("5.计算队列的长度 \n");
printf("6.用e返回Q的头部元素 \n");
printf("7.显示队列 \n");
printf("8.销毁队列 \n");
printf("请选择功能序号:\n");
scanf("%d", &flag);
switch(flag)
{
case 1: InitQueue(Q);
break;
case 2: EnQueue(Q, e);
break;
case 3: DeQueue(Q, e);
break;
case 4: ClearQueue(Q);
break;
case 5: QueueLength(Q);
break;
case 6: GetHead(Q, e);
break;
case 7: VisitQueue(Q);
break;
case 8: DestoryQueue(Q);
break;
}//switch
}//while
return OK;
}
你的输入是什么, 出现了什么问题? 请提供这些信息。
第三个功能实现不了
你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。
您可以点击问题下方的【编辑】,进行补充修改问题。