C语言数据结构 帮看看这个程序为什么错!功能还有实现不了的帮完善下

#include<stdio.h>
#include<stdlib.h>

void menu(void)
{
printf("\n\t\t\t欢迎使用本系统,队列的使用,请按要求操作\n\t\t\t1,初始化队列\n\t\t\t2,现队列长度\n\t\t\t3,现队头元素\n\t\t\t4,字符排队\n\t\t\t5,字符出队\n\t\t\t6,退出\n\n");

}

typedef struct QNode{
char date; /*定义队列类型*/
struct QNode *next;
}QNode,*Queueptr;

typedef struct{
QNode *front;
QNode *rear;
}linkQueue;

int initQueue(LinkQueue *Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.front=NULL;
return 1;
}

int EnQueue(LinkQueue *Q,char e)
{
LinkQueue q;
q=(QueuePtr)malloc(sizeof(Queue));
q->date=e;
q->next=NULL;
Q.rear->next=q;
Q.rear=q;
return 1;
}

int DeQueue(LinkQueue *Q,char *e)
{
LinkQueue q;
if(Q.front==Q.rear) return 0;
e=Q.front->date;
q=Q.front->next;
Q.front->next=q->next;
free(q);
return 1;
}

void main()
{
int a;
do
{
linkQueue *Q
menu();
scanf("%d",&a);
switch(a)
{
case 1:{
initqueue(*Q);
printf("队列初始化成功\n");
system("pause");
system("cls");
}break;
case 2:{
printf("此功能未开放\n");
system("pause");
system("cls");
}break;
case 3:{
printf("队头元素为%c",front->date);
system("pause");
system("cls");
}
case 4:{
char e;
printf("请输入要排队队员\n");
fflush(stdin); //清除缓冲区,即‘回车键’
scanf("%c",&e);
EnQueue(*Q,e);
printf("排队成功\n");
system("pause");
system("cls");

}
case 5:{
char e;
DeQueue(*Q,*e);
printf("成功,出队队员为%c",e\n);
system("pause");
system("cls");
}
case 6:{
a=0;
printf("欢迎下次使用\n");
}
default:printf("输入错误请重新输入\n");
}
}while(a);

}

1、大小写要分清楚。你的代码中有无数个大小写前后不一致的地方
2、.和->要分清楚,结构体用.,结构体指针用->。你的代码中有无数个地方应该用->却用了.
3、有个QNode写成了Queue
4、EnQueue和DeQueue里面的q应该是QueuePtr类型的
5、DeQueue的参数e应该是char
6、main里面第三行忘写分号。
7、case 3里面,printf("队头元素为%c",Q->front->date);
8、调用函数时,Q不用加*了。
9、case 5里面,e也不用加*。而且printf里面也写错了。
10、case 6里面,分号用了全角

太多低级错误了。你的编译器没有错误提示信息么?为什么不对照提示信息一个个地修改?

#include<stdio.h>
#include<stdlib.h>

void menu(void)
{
printf("\n\t\t\t欢迎使用本系统,队列的使用,请按要求操作\n\t\t\t1,初始化队列\n\t\t\t2,现队列长度\n\t\t\t3,现队头元素\n\t\t\t4,字符排队\n\t\t\t5,字符出队\n\t\t\t6,退出\n\n");

}

typedef struct QNode{
char date; /*定义队列类型*/
struct QNode *next;
}QNode,*QueuePtr;

typedef struct{
QNode *front;
QNode *rear;
}LinkQueue;

int initQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->front=NULL;
return 1;
}

int EnQueue(LinkQueue *Q,char e)
{
QueuePtr q;
q=(QueuePtr)malloc(sizeof(QNode));
q->date=e;
q->next=NULL;
Q->rear->next=q;
Q->rear=q;
return 1;
}

int DeQueue(LinkQueue *Q,char e)
{
QueuePtr q;
if(Q->front==Q->rear) return 0;
e=Q->front->date;
q=Q->front->next;
Q->front->next=q->next;
free(q);
return 1;
}

void main()
{
int a;
do
{
LinkQueue *Q;
menu();
scanf("%d",&a);
switch(a)
{
case 1:{
initQueue(Q);
printf("队列初始化成功\n");
system("pause");
system("cls");
}break;
case 2:{
printf("此功能未开放\n");
system("pause");
system("cls");
}break;
case 3:{
printf("队头元素为%c",Q->front->date);
system("pause");
system("cls");
}
case 4:{
char e;
printf("请输入要排队队员\n");
fflush(stdin); //清除缓冲区,即‘回车键’
scanf("%c",&e);
EnQueue(Q,e);
printf("排队成功\n");
system("pause");
system("cls");

}
case 5:{
char e;
DeQueue(Q,e);
printf("成功,出队队员为%c\n",e);
system("pause");
system("cls");
}
case 6:{
a=0;
printf("欢迎下次使用\n");
}
default:printf("输入错误请重新输入\n");
}
}while(a);

}追问

嗯谢谢 不过初始化 还是不能运行啊!为什么会“死机”

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
指针形式的结构体用“->”表示,例如
typedef struct QNode{
char date; /*定义队列类型*/
struct QNode *next;
}QNode,*QueuePtr;
以取结构体中date变量为例
当时用 QNode 时用 QNode.date;
当使用 QueuePtr 时用QueuePtr->date;
改完之后再试一试。
第2个回答  2011-12-01
看不懂...
相似回答