little__cute 2019-11-14 22:36 采纳率: 0%
浏览 103

为什么在队尾插入元素时总是提示内存出错(C语言新人)

写了一个层序遍历创建二叉树的函数,但在入队列部分提示内存出错,求大佬指点...
出错函数:void EnQueue(BiTree e)
错误提示:内存出错

#include<stdio.h>
#include<stdlib.h>
#define link 1;
#define child 0; 

typedef struct BiTNode{
    char data;
    struct BiTNode* lchild;
    struct BiTNode* rchild;
    int LTag = child;
    int RTag = child;
}BiTNode,*BiTree;

typedef struct QNode{
    BiTNode* data;
    struct QNode* next;
}QNode,*QueuePtr;

typedef struct {
    QueuePtr front;//队头指针
    QueuePtr rear;//队尾指针
}LinkQueue;

LinkQueue Q;//用队列存储需要访问的树的结点

void IniiLinkQueue(){
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    Q.front->next = NULL;

    return ;
}

bool QueueEmpty(){
    //判断队列是否为空队列,若不是,返回true;否则,返回false
    if(Q.front == Q.rear)
        return false;
    return true; 
}

void EnQueue(BiTree e){
    //插入e为Q的新的队尾元素
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    p->data = e;
    p->next = NULL;
    Q.rear->next = p;//报错位置
    Q.rear = p;

    return ;
}

BiTree DeQueue(){
    //删除Q的队头元素,并返回其值
    BiTree e = Q.front->next->data;
    if(Q.front->next == Q.rear)
        Q.rear = Q.front;
    else
        Q.front->next = Q.front->next->next;
    return e;
}

void createBiTree(BiTree T){
    //按层序遍历创建二叉树
    char ch;

    EnQueue(T);//将树的根结点存入队列
    while(QueueEmpty()){
        while((ch = getchar()) != '\n'){
            T = DeQueue();
            if(ch != '-'){
                //若输入字符不为'-',表示当前结点不为空,将字符存入结点,并将其左右孩子地址存入队列中
                T->data = ch;
                T->lchild = (BiTree)malloc(sizeof(BiTNode));
                T->rchild = (BiTree)malloc(sizeof(BiTNode));
                EnQueue(T->lchild);
                EnQueue(T->rchild); 
            } 
            else{
                //若输入字符为'-',表示当前结点为空,无需将其左右孩子入队
                T->data = NULL; 
            }
        }
    }

    return ; 
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
    • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
    • ¥15 Arcgis相交分析无法绘制一个或多个图形
    • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误