c语言队列基本操作代码

来源:互联网 发布:mac预览图片快捷键 编辑:程序博客网 时间:2024/04/20 06:35

为了打印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:emptyint 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;}

0 0