queue

来源:互联网 发布:淘宝网怎么绑定银行卡 编辑:程序博客网 时间:2024/05/16 05:42

queue.h

 

typedef struct _queue_node
{
 struct _queue_node * next;
 void * data;
}queue_node_t;

typedef struct _yang_queue
{
 queue_node_t * head;
 queue_node_t * tail;
 int num;
}yang_queue_t;

 

queue.c

 

#include<stdlib.h>
#include "queue.h"

static int queue_node_max_num = 1000;
//#define NULL 0

int queue_init(yang_queue_t *queue)
{
 queue->head = NULL;
 queue->tail = NULL;
 queue->num = 0;
 return 0;
}
int insert_at_tail(yang_queue_t *queue,void*data)
{
 if(queue->num > queue_node_max_num )
  return -1;
 if(queue->num == 0)
 {
  queue_node_t *p_node = malloc(sizeof(queue_node_t));  
  p_node->next = NULL;
  p_node->data = data;
  queue->head = p_node;
  queue->tail = p_node;
  queue->num ++; 
  return 0;  
 }
 else
 {
  queue_node_t *p_node = malloc(sizeof(queue_node_t));
  p_node->next = NULL;
  p_node->data = data;
  queue->tail->next= p_node;
  queue->tail = p_node; 
  queue->num ++;
  return 0; 
 }
 return 0;
}
void* get_head_node(yang_queue_t *queue)
{
 if(queue->num <=0 )
  return NULL;
 return queue->head->data;
}
int remove_at_head(yang_queue_t *queue)
{
 if(queue->num <=0 )
  return -1;
 if(queue->num == 1)
 {
  free(queue->head->data);
  free(queue->head);
  queue->head = NULL;
  queue->tail = NULL;
  queue->num --;  
  return 0;  
 }
 else
 {
  free(queue->head->data);
  queue_node_t * p_tmp_node = queue->head->next;
  free(queue->head);
  queue->head = p_tmp_node ;
  queue->num --;    
  return 0;  
 }
 return 0;

}
int clear_all(yang_queue_t *queue)
{
 while(queue->num >0)
 {
  remove_at_head(queue);
 }
 return 0;
}


queue_test.c

 

#include<stdlib.h>
#include<stdio.h>
#include "queue.h"

typedef struct
{
 int a;
 char b;
}data_t;
void print_queue(yang_queue_t *queue)
{
 queue_node_t *p_node = queue->head;
 
 printf("queue num is %d/n",queue->num);
 while(p_node!=NULL)
 {
  data_t* p_data = p_node->data;
  printf("a is %d,b is 0x%x/n",p_data->a,p_data->b);
  p_node = p_node->next;
 }
}
int main(void)
{
 yang_queue_t queue;
 queue_init(&queue);

 data_t * p_new_data =NULL;
 p_new_data = malloc(sizeof(data_t));

 p_new_data->a = 67;
 p_new_data->b ='a';
 
 insert_at_tail(&queue,p_new_data);
 print_queue(&queue);

 p_new_data = malloc(sizeof(data_t));
 p_new_data->a = 45;
 p_new_data->b ='b';
 insert_at_tail(&queue,p_new_data);
 print_queue(&queue);

 p_new_data = malloc(sizeof(data_t));
 p_new_data->a = 25;
 p_new_data->b ='c';
 insert_at_tail(&queue,p_new_data);
 print_queue(&queue);
 
 remove_at_head(&queue);
 print_queue(&queue);

 p_new_data = malloc(sizeof(data_t));
 p_new_data->a = 15;
 p_new_data->b ='d';
 insert_at_tail(&queue,p_new_data);
 print_queue(&queue);

 remove_at_head(&queue);
 print_queue(&queue);

 p_new_data = malloc(sizeof(data_t));
 p_new_data->a = 75;
 p_new_data->b ='e';
 insert_at_tail(&queue,p_new_data);
 print_queue(&queue);
 
 remove_at_head(&queue);
 print_queue(&queue);
 
 clear_all(&queue);
 print_queue(&queue);

 return 0;
}

 

 

 

原创粉丝点击