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;
}