您的位置:首页 > 编程语言 > C语言/C++

c语言队列基本操作代码

2014-03-22 22:15 375 查看
为了打印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<stdio.h>
#include<stdlib.h>

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: