循环链表初始化无法完成,求大佬解惑

代码如下,初始化中的“初始化成功”一句都没有打印出来

#include<iostream> 
#include<malloc.h>
#include<conio.h>
#define MAXSIZE 6
using namespace std;

typedef int datatype;
struct sequeue{
    datatype data[MAXSIZE];
    int front,rear; 
};
struct sequeue *sq;

//初始化
sequeue *SetNULLQ(sequeue *sq)
{
    sq->front=MAXSIZE-1;
    sq->rear=MAXSIZE-1;
    cout<<"初始化成功"<<endl;
    return sq;
} 

//入队
sequeue *EnQueueQ(sequeue *sq,datatype x)
{
    if(sq->front==((sq->rear+1)%MAXSIZE))
    {
        cout<<"队伍已满,无法入队"<<endl;
        return sq; 
    }
    else
    {
        sq->rear=(sq->rear+1)%MAXSIZE;
        sq->data[sq->rear]=x;
        cout<<x<<"已入队"<<endl;
        return sq;
    }
}

//出队 
sequeue *DeQueueQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法出队"<<endl;
        return NULL; 
    }
    else
    {
        sq->front=(sq->front+1)%MAXSIZE;
        cout<<"队头已出队"<<endl;
        return sq;
    }
}

//取队头元素
datatype *GetFrontQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法取队头元素"<<endl;
        return NULL; 
    }
    else
    {
        datatype *ret;
        ret=(datatype *)malloc(sizeof(datatype));
        *ret=sq->data[(sq->front+1)%MAXSIZE];
        return ret; 
    } 

}

int main()
{
    sq=SetNULLQ(sq);
    datatype x;
    while((x=getche())!='#')
    {
        sq=EnQueueQ(sq,x);
    }
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
    sq=DeQueueQ(sq);
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
}

我已经修改代码如下:

#include<iostream> 
#include<malloc.h>
#include<conio.h>
#define MAXSIZE 6
using namespace std;

typedef int datatype;
struct sequeue{
    datatype data[MAXSIZE];
    int front,rear; 
};
//struct sequeue *sq;个人感觉没有必要使用全局变量 

//初始化
sequeue *SetNULLQ(sequeue *sq)
{
    sq->front=MAXSIZE-1;
    sq->rear=MAXSIZE-1;
    cout<<"初始化成功"<<endl;
    return sq;
} 

//入队
sequeue *EnQueueQ(sequeue *sq,datatype x)
{
    if(sq->front==((sq->rear+1)%MAXSIZE))
    {
        cout<<"队伍已满,无法入队"<<endl;
        return sq; 
    }
    else
    {
        sq->rear=(sq->rear+1)%MAXSIZE;
        sq->data[sq->rear]=x;
        cout<<x<<"已入队"<<endl;
        return sq;
    }
}

//出队 
sequeue *DeQueueQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法出队"<<endl;
        return NULL; 
    }
    else
    {
        sq->front=(sq->front+1)%MAXSIZE;
        cout<<"队头已出队"<<endl;
        return sq;
    }
}

//取队头元素
datatype *GetFrontQ(sequeue *sq)
{
    if(sq->front==sq->rear)
    {
        cout<<"队伍为空,无法取队头元素"<<endl;
        return NULL; 
    }
    else
    {
        datatype *ret;
        ret=(datatype *)malloc(sizeof(datatype));
        *ret=sq->data[(sq->front+1)%MAXSIZE];
        return ret; 
    } 

}

int main()
{
    sequeue seq;//创建一个结构体对象 
    sequeue *sq=&seq;//创建一个结构体指针,指向所创建的结构体对象 

    sq=SetNULLQ(sq);
    datatype x;
    while((x=getche())!='#')
    {
        sq=EnQueueQ(sq,x);
    }
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
    sq=DeQueueQ(sq);
    cout<<"当前队头为"<<GetFrontQ(sq)<<endl;
}

能够正常运行。

全局结构体指针sq是个野指针,没有初始化