temp = (Node *)malloc(sizeof(Node));这句要特别注意,我看很多人是用Queue去强制性转换malloc申请的空间地址的,即,temp = (Queue *)malloc(sizeof(Node));,个人觉得这是错误的。

另外,有人初始化队列的时候,就申请了一块空间,我觉得这个也是存在问题的,只有在元素入队列的时候,才用malloc去申请空间。

/***************************************************
##filename : queue.c
##author : GYZ

##create time : 2018-10-17 09:32:15
##last modified : 2018-10-17 10:56:03
##description : NA
***************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Node
{
int data;
struct Node *next;
} Node;

typedef struct Queue
{
Node *front;
Node *rear;
} Queue;

void initQueue(Queue *qu)
{
qu->front = NULL;
qu->rear = NULL;
printf("init a queue!\n");
}

void inQueue(Queue *qu,int ele)
{
Node *temp;
temp = (Node *)malloc(sizeof(Node));
if(NULL == temp)
{
perror("malloc"),exit(-1);
}
else
{
temp->data = ele;
temp->next = NULL;
if(NULL == qu->front)
{
qu->front = temp;
qu->rear = temp;
}
else
{
qu->rear->next = temp;
qu->rear = temp;
}
printf("in queue element is %d\n",ele);
}

// printf("%d\n",__LINE__);
}

void outQueue(Queue *qu)
{
/*single linked list queue*/
if(NULL == qu->front)
{
printf("this is an empty queue!\n");
}
else
{
Node *temp = qu->front;
qu->front = qu->front->next;
printf("out queue element is %d\n",temp->data);
free(temp);
temp = NULL;
printf("free queue header space!\n");
}
}

int main(int argc,char *argv[])
{
Queue queue;
initQueue(&queue);
inQueue(&queue,1);
inQueue(&queue,2);
inQueue(&queue,3);
inQueue(&queue,4);
inQueue(&queue,5);
inQueue(&queue,6);
inQueue(&queue,7);
inQueue(&queue,8);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
outQueue(&queue);
return 0;
}