c语言关于数据结构方面的一个问题

//队列的操作
#include <stdio.h>
#include <malloc.h>
#define Null 0
typedef int QueueElemType;
typedef struct Node
{
QueueElemType data;
struct Node *next;
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
//初始一个空的队列
void InitQueue(LinkQueue *q)
{
q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(q->front!=Null)
{
q->rear=q->front;
q->front->next=Null;
}
else
printf("fail!");
}
//入队操作
void EnQueue(LinkQueue *q,QueueElemType x)
{
LinkQueueNode *s;
s=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(s!=Null)
{
s->data=x;
s->next=Null;
q->rear->next=s;
q->rear=s;
}
}
//出队操作
void DeQueue(LinkQueue *q)
{
LinkQueueNode *s;
if(q->front==q->rear)
printf("fail!");
s=q->front->next;
q->front->next=s->next;
if(q->rear==s)
q->rear=q->front;
free(s);
}
//输出队列
void OutputQueue(LinkQueue *q)
{
LinkQueueNode *s;
s=q->front->next;
printf("the LinkQueue is:\n");
if(s->next!=Null)
printf("%d->",s->data);
printf("\n");
}
void main()
{
int n,x,i,j,num;
LinkQueue *ptr;
ptr=Null;
InitQueue(ptr);
printf("input the number of LinkQueue:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("the number %d:",i);
scanf("%d",&x);
EnQueue(ptr,x);
}
OutputQueue(ptr);
printf("the number of deleting:");
scanf("%d",&num);
for(j=0;j<num;j++)
DeQueue(ptr);
OutputQueue(ptr);
}
出现内存不能写的错误,请大家帮忙看看哪出现了问题,谢谢!

第1个回答  2007-04-08
//队列的操作
#include <stdio.h>
#include <malloc.h>
#define Null 0
typedef int QueueElemType;
typedef struct Node
{
QueueElemType data;
struct Node *next;
}LinkQueueNode;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
//初始一个空的队列
void InitQueue(LinkQueue *q)
{
q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(q->front!=Null)
{
q->rear=q->front;
q->front->next=Null;
}
else
printf("fail!");
}
//入队操作
void EnQueue(LinkQueue *q,QueueElemType x)
{
LinkQueueNode *s;
s=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(s!=Null)
{
s->data=x;
s->next=Null;
q->rear->next=s;
q->rear=s;
}
}
//出队操作
void DeQueue(LinkQueue *q)
{
LinkQueueNode *s;
if(q->front==q->rear)
printf("fail!");
s=q->front->next;
q->front->next=s->next;
if(q->rear==s)
q->rear=q->front;
free(s);
}
//输出队列
void OutputQueue(LinkQueue *q)
{
LinkQueueNode *s;
s=q->front->next;
printf("the LinkQueue is:\n");
if(s->next!=Null)
printf("%d->",s->data);
printf("\n");
}
void main()
{
int n,x,i,j,num;
LinkQueue *ptr;
ptr=Null;
InitQueue(ptr);
printf("input the number of LinkQueue:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("the number %d:",i);
scanf("%d",&x);
EnQueue(ptr,x);
}
OutputQueue(ptr);
printf("the number of deleting:");
scanf("%d",&num);
for(j=0;j<num;j++)
DeQueue(ptr);
OutputQueue(ptr);
}