链队进队操作一直报错

链队的进队操作,第31行一直报错,但是看不出哪里有问题


#include
#include
typedef char ElemType;
typedef struct 
{
    int rear;
    int front;
}LinkQuNode;
typedef struct qnode
{
    char data;
    struct qnode *next;
}DataNode;
void InitQueue(LinkQuNode *&q)
{
    q=(LinkQuNode *)malloc(sizeof(LinkQuNode));
    q->front=q->rear=NULL;
}
bool QueueEmpty(LinkQuNode *q)
{
    return(q->rear==NULL);
}
bool enQueue(LinkQuNode *&q,char e)
{
    DataNode *s;
    s=(DataNode *)malloc(sizeof(DataNode));
    s->data=e;
    s->next=NULL;
    if(q->rear==NULL)
    {
        q->front=q->rear=s;
    }
    else
    {
        q->rear->next=s;
        q->rear=s;
    }
    return true;
}
int main()
{
    char a[5]={'a','b','c'};
    LinkQuNode *q;
    printf("1.初始化链队\n");
    InitQueue(q);
    QueueEmpty(q);
    printf("2.链队是%s队",!QueueEmpty(q)?"非空":"空");
    printf("3.依次输入abcfd");
    for(int i=0;i<5;i++)
    {
        enQueue(s,a[i]);
    }
}

img

队列里 rear front 都是int型,到了第31行里,给 rear 赋指针地址值,这两个不同类型。 修改如下,供参考:

#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct qnode  //修改
{
    char data;
    struct qnode *next;
}DataNode;
typedef struct     //修改
{
    DataNode * rear; //int rear;   修改
    DataNode * front;//int front;  修改
}LinkQuNode;
void InitQueue(LinkQuNode *&q)
{
    q=(LinkQuNode *)malloc(sizeof(LinkQuNode));
    q->front=q->rear=NULL;
}
bool QueueEmpty(LinkQuNode *q)
{
    return(q->rear==NULL);
}
bool enQueue(LinkQuNode *&q,char e)
{
    DataNode *s;
    s=(DataNode *)malloc(sizeof(DataNode));
    s->data=e;
    s->next=NULL;
    if(q->rear==NULL)
    {
        q->front=q->rear=s;
    }
    else
    {
        q->rear->next=s;
        q->rear=s;
    }
    return true;
}
int main()
{
    char a[5]={'a','b','c','d','e'};
    LinkQuNode *q;
    printf("1.初始化链队\n");
    InitQueue(q);
    QueueEmpty(q);
    printf("2.链队是%s队\n",!QueueEmpty(q)?"非空":"空");
    printf("3.依次输入abc\n");
    for(int i=0;i<5;i++)
    {
        enQueue(q,a[i]);  //enQueue(s,a[i]);
    }
    for(DataNode * p = q->front; p ; p = p->next)
        printf("%c ",p->data);
    return 0;
}