链队列,这是什么原因啊?

链队列,这是因为什么啊?
应该怎么改啊?
谢谢!

img

img


#include<iostream>
using namespace std;

typedef struct{
    int id;
    char name[10];
}QElemtype;
typedef struct qNode{
    QElemtype data;
    struct qNode *next;
}qNode,*QueuePtr;
typedef struct{
    qNode *front;
    qNode *rear;
}LinkQueue;

void InitQueue(LinkQueue &Q);
void EnQueue(LinkQueue &Q,QElemtype e);
void DeQueue(LinkQueue &Q);
int QueueEmpty(LinkQueue &Q,QElemtype e);

int main(){
    LinkQueue s;
    QElemtype newdata;
    InitQueue(s);
    int n;
    cout << "请输入链队的长度:" << endl;
    cin >> n;
    for(int i=1;i<=n;i++){
        cout << "输入链队的第" << i << "个元素" << endl;
        cin >> newdata.id >> newdata.name;
        EnQueue(s,newdata);
    }
    cout << "请输出元素:" << endl;
    while (!QueueEmpty(s,newdata))
    {
        DeQueue(s);
    }
    return 0;
}
//链队的初始化
void InitQueue(LinkQueue &Q){
    Q.front=Q.rear=new qNode;
    Q.front->next=NULL;
} 
//入队
void EnQueue(LinkQueue &Q,QElemtype e){
    QueuePtr p;
    p=new qNode;
    p->data=e;
    p->next=NULL;
    Q.rear=p;
}
//出队
void DeQueue(LinkQueue &Q){
    QElemtype &e;
    QueuePtr p;
    if(Q.front==Q.rear)
    exit(1);
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)
    Q.rear=Q.front;
    delete(p);
} 
//判断栈是否为空
int QueueEmpty(LinkQueue &Q){
    if (Q.front==Q.rear)
        return 1;
    else
        return 0;
}

引用不能这么写,改成QElemtype &e=p->data;