求大神指教,队列的入列和出列,我这程序哪出问题了!!!!!
#include<stdio.h>#define size 100
typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
int data[size];
}LinkQueue;
LinkQueue InitQueue(int n)
{
LinkQueue Q;int i,elem;
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
printf("存储分配失败");
Q.front->next=NULL;
for(i=0;i<n;i++)
{scanf("%d",&elem);
Q.data[i]=elem;}
return Q;
}
void EnQueue(LinkQueue Q,int e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
printf("存储分配失败");
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
int DeQueue(LinkQueue Q)
{
QueuePtr p;int e;
if(Q.front==Q.rear) return 0;
p=Q.front->next;e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return 1;
}
LinkQueue QueueTraverse(LinkQueue Q,int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\t",Q.data[i]);
return Q;
}
int main()
{
int e,s;LinkQueue Q;
printf("构造一个队列:\n");
Q=InitQueue(5);
printf("插入一个元素:\n");
EnQueue(Q,12);
printf("插入新元素后队列为:\n");
QueueTraverse(Q,6);
printf("\n删除队头元素:\n");
s=DeQueue(Q);
if(!s)
printf("队列为空\n");
else
printf("删除成功\n");
QueueTraverse(Q,4);
getch();
return 0;
}