链队的进队操作,第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]);
}
}
队列里 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;
}