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;
}
- Queue
- queue
- Queue
- QUEUE ~
- queue
- queue
- queue
- queue
- queue
- queue
- Queue
- Queue
- queue
- queue
- Queue
- Queue
- queue
- Queue
- 网站体验的76个体验点
- 十步让你成为一名优秀的 Web 开发人员
- WorldWind 初步结构
- do while用法 阶乘...
- 一箭双雕 破解曹操行刺董卓献刀连环计(转)
- queue
- VS2005如何调试aspx中JavaScript脚本
- 使用JIOPi模块库实现类库自动升级
- 关于java的序列化
- Get Integer sided triangles for which the area/perimeter ratio is integral
- 拼图练习(一)有遗留问题
- SilverLight中Button按扭的Enabled=false/true方法
- Ajax中的readyState和status
- struts2标签库使用