首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

链队列有关问题-有源码

2012-09-19 
链队列问题--有源码这是一个模拟患者看病的问题。源码如下:C/C++ code#includestdio.h#includemalloc.h

链队列问题--有源码
这是一个模拟患者看病的问题。源码如下:

C/C++ code
#include<stdio.h>#include<malloc.h>typedef struct node{char data;struct node *next;}QNode;typedef struct {QNode *front,*rear;}LQueue;/*创建带头结点的空对*/LQueue *Init(LQueue *q){QNode *p;p=malloc(sizeof(QNode));p->next=NULL;q->front=p;q->rear=p;return q;}/*入队*/void In(LQueue *q,char x){QNode *p;p=malloc(sizeof(QNode));p->data=x;p->next=NULL;q->rear->next=p;q->rear=p;}/*判队空*/int Empty(LQueue *q){if(q->front=q->rear)return 0;elsereturn 1;}/*出队*/int Out(LQueue *q,char *x){QNode *p;if(Empty(q)){printf("队空!");return 0;}else{p=q->front->next;q->front->next=p->next;*x=p->data;free(p);if(q->front->next==NULL) {q->rear=q->front;}return 1;}}void main(){    LQueue *q;    int flag,n;    char ch;    q=Init(q);    flag=1;    while(flag)    {        printf("\n请输入命令:\n");        ch=getchar();        switch(ch)        {        case 'a':            printf("\n病历号:\n");            scanf("%d",&n);            In(q,n);            break;        case 'n':            if(!Empty(q))            {                Out(q,&n);                printf("\n病历号为%d的病人就诊!\n",n);            }            else            {            printf("\n无病人等候就诊!");            }            break;        case 'q':            printf("\n停止挂号,下列病人依次就诊:\n");            while(q->front->next!=NULL)            {                Out(q,&n);                printf("\n病历号为%d的病人就诊!\n",n);            }            flag=0;            break;        default:            printf("\n无效命令!\n");        }    }}


经过测试首先发现是初始化那里有问题。但是不知道怎么改正。书上源码就是这么写的啊。求教大家!

[解决办法]
LQueue *q;
int flag,n;
char ch;

q=Init(q);

q没有分配内存
[解决办法]
LQueue *Init(LQueue *q)
{
QNode *p;
p=malloc(sizeof(QNode));
p->next=NULL;
q->front=p;//q没有指向任何内存,怎么还可以访问结构成员对象呢,请先分配内存在来访问
q->rear=p;

return q;
}

热点排行