注册 登录
编程论坛 数据结构与算法

一个病人看病的程序,始终有错误,请高手指点!

青密 发布于 2011-05-13 15:47, 445 次点击
#include <stdio.h>
#include <malloc.h>
typedef struct qnode{
    int data;
    struct qnode *next;
}qnode, *queueptr;   //结点类型;
typedef struct {
    queueptr front;
    queueptr rear;
}linkqueue;             // 链队类型;


void initqueue(linkqueue &q){

   
    q->front=q->rear=(queueptr)malloc(sizeof(qnode));    //创建空队;
    if (!q->front) exit(-2);
    q->front->next =NULL;
}
void main()
{
    int no=0;
    linkqueue *q;
    initqueue(&q);
    qnode *p;
    printf("输入病历号: \n");
    scanf("%d",&no);
    p=(queueptr)malloc(sizeof(qnode));   //创建结点;
            p->data =no;
            p->next =NULL;
            if(q->rear ==NULL)       //第一个病人排队;
            {
                q->front =q->rear =p;
            }
            else{
                q->rear ->next =p;
                q->rear =p;
            }
            printf("出现\n");
}
2 回复
#2
诸葛修勤2011-05-14 09:59
很多错误在编译的时候就出来啦

还是自己多看看  
#3
灿烂烟火2011-05-19 22:58
定义*q后没有初始化,就使用q指向队列的队首和队尾的操作非法。如
void initqueue(linkqueue &q){   
    q->front=q->rear=(queueptr)malloc(sizeof(qnode));    //创建空队;
     if (!q->front) exit(-2);
     q->front->next =NULL;
 }
 中q->front=q->rear=(queueptr)malloc(sizeof(qnode));
q->front->next =NULL;均为非法操作。主函数中的此类操作同样非法。
1