为了打印binary tree,要使用队列,所以先写个测试程序.
总结下经验:
1.队列结构Queue只是一个容器,两个指针表示头和尾。
2.要注意区分head和tail的三种情况的处理:NULL,只有一个节点,多个节点。
3.测试时候,node没有free,我试过在for里面free,会导致传到enQueue中node也被free,以后还要研究怎么正确地free。
4.Queue是容器,只需要init一次,而node有多个,所以每个node都要调用init_node,其主要操作是使用malloc函数分配空间。
#include
#include
typedef struct _node
{
int value;
struct _node *next;
}Node;
typedef struct _Queue
{
Node *head;
Node *tail;
}Queue;
Queue* init_queue()
{
Queue *queue=(Queue*)malloc(sizeof(Queue));
queue->head = queue->tail = NULL;
return queue;
}
int enQueue(Queue *pQueue,Node *pNode)
{
if(pQueue->head == NULL)
{//when it's empty
pQueue->head = pNode;
pQueue->tail = pNode;
}
else
{
pQueue->tail->next = pNode;
pQueue->tail = pNode;
}
}
Node* deQueue(Queue *pQueue)
{
if(pQueue->head == NULL)
{
return NULL;
}
Node *deNode= pQueue->head;
pQueue->head = pQueue->head->next;
return deNode;
}
Node* init_node(int value)
{
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->value=value;
return new_node;
}
//0:empty
int ifEmpty(Queue *pQueue)
{
if(pQueue->head == NULL)
{
printf("empty tree\n");
return 0;
}
printf("queue is not empty\n");
return 1;
}
int main()
{
Queue *queue=init_queue();
int i;
ifEmpty(queue);
printf("insert node to queue\n");
for(i=1; i<7;i++)
{
Node *node = init_node(i);
enQueue(queue,node);
// free(node);
}
// Node *node = init_node(1);
// printf("node->value = %d\n",node->value);
// enQueue(queue,node);
ifEmpty(queue);
for(i=0;i<7;i++)
{
Node *deNode = deQueue(queue);
if(deNode==NULL)
{
printf("NULL\n");
}
else
{
printf("deNode->value = %d\n",deNode->value);
}
}
free(queue);
return 0;
}