xdm帮我找找错,老是运行不出来

#include<iostream.h>
#include<stdio.h>
const int maxsize=20;
typedef struct seqqueue
{
int data[maxsize];
int front,rear,head;
}Q;

//1)计算队列剩余长度
int Length(seqqueue *Q)//计算队列剩余长度
{
int leng;
leng =Q->rear-Q->front;
if(leng >=0)
leng =maxsize- leng -1;
else
leng = leng *(-1)-1;
return leng;
}
//2)入队列:将x插入到队列Q的队列尾
void EnQueue(seqqueue *Q,int x)//入队列:将x插入到队列Q的队列尾
{
Q->rear=(Q->rear+1)%maxsize;
Q->data[Q->rear]=x;
}
//3)出队列:删除队列首元素
void OutQueue(seqqueue *Q) //出队列:删除队列首元素
{
Q->front=(Q->front+1)%maxsize;
cout<data[Q->front]<<"\t";
}
//4)读队列首元素返回队列首元素的值
int GetHead(seqqueue *Q)//读队列首元素返回队列首元素的值
{
int i;
i=(Q->front+1)%maxsize;
return Q->data[i];
}
//5)判断输入是否错误
int PD()//判断输入是否错误
{
int n,m;
m=scanf("%d",&n);
while(m!=1)
{
while(getchar()!='\n');
printf("输入错误,请重新输入:");
m=scanf("%d",&n);
}
return n;
}

void main()
{
Q->head=0;
Q->rear=0;
int x,i,n,a;
printf("请输入入队元素个数n,且n应满足n<%d\n,Length(&Q));
n=PD();
while(n<1||n>Length(&Q))
{
printf("输入有误,请重新输入:");
n=PD();
}
for(i=1;i<=n;i++)
{
printf("请输入第%d个元素入队的数据",i);
scanf("%d",&x);
EnQueue(&Q,x);
}

printf("\n下面读取对头元素\n");
a=GetHead(&Q);
printf("队列首元素的值为:%d",a);

printf("\n请输入出队元素个数n,且n应满足n<%d\n,Length(&Q));
n=PD();
while(n<1||n>Length(&Q))
{
    printf("输入有误,请重新输入:");
    n=PD();
}
for(i=1;i<=n;i++)
{
    printf("请输入第%d个元素出队的数据",i);
    scanf("%d",&x);
    OutQueue(&Q);  
}

}

运行不错来有什么现象吗?是有错误信息,还是没有反应?
typedef struct seqqueue定义出来的Q是类型,不是变量,你不能进行Q->head这样的处理,应该定义Q的变量
Q q;
q->head = 0;
q->rear = 0;