c语言队列作用,队列的C语言实现(原创)

使用链表实现的队列,源码用C语言编写,VC6.0编译。代码有三个文件,其中cqueue.h是队列数据结构和函数接口的声明,cqueue.c是队列函数的定义,main.c是队列测试文件。

/*

* File: cqueue.h

* Purpose: implementation of queue in c

* Author: puresky

*/

#ifndef _C_QUEUE_H

#define _C_QUEUE_H

typedef struct QueueNodeStruct QueueNode;

struct QueueNodeStruct

{

void *_data;

struct QueueNodeStruct *_next;

};

typedef struct QueueStruct Queue;

struct QueueStruct

{

QueueNode *_head;

QueueNode *_tail;

int _count;

};

Queue *queue_new();

void queue_free(Queue *q);

void queue_push_back(Queue *q, void *data);

void *queue_pop_front(Queue *q);

int queue_size(Queue *q);

int queue_empty(Queue *q);

#endif

/*

* File: cqueue.c

* Purpose: implementation of queue in c

* Author: puresky

*/

#include

#include "cqueue.h"

QueueNode *queue_node_new(void *data)

{

QueueNode *qn = (QueueNode *)malloc(sizeof(QueueNode));

qn->_data = data;

qn->_next = NULL;

return qn;

}

void queue_node_free(QueueNode *qn)

{

if(qn)

{

free(qn);

}

}

Queue *queue_new()

{

Queue *q = (Queue *)malloc(sizeof(Queue));

q->_count = 0;

q->_head = NULL;

q->_tail = NULL;

return q;

}

void queue_free(Queue *q)

{

QueueNode *qn;

QueueNode *iter;

if(q)

{

iter = q->_head;

while(iter)

{

qn = iter;

iter = iter->_next;

queue_node_free(qn);

}

}

}

void queue_push_back(Queue *q, void *data)

{

QueueNode *qn = queue_node_new(data);

if(q->_head == NULL)

q->_head = q->_tail = qn;

else

{

q->_tail->_next = qn;

q->_tail = qn;

}

q->_count++;

}

void *queue_pop_front(Queue *q)

{

void *ret = NULL;

QueueNode *qn;

if(q->_head)

{

ret = q->_head->_data;

qn = q->_head;

q->_head = q->_head->_next;

if(q->_head == NULL)

q->_tail = NULL;

queue_node_free(qn);

q->_count--;

}

return ret;

}

int queue_size(Queue *q)

{

return q->_count;

}

int queue_empty(Queue *q)

{

if(q->_head == NULL)

return 1;

return 0;

}

/*

* File: main.c

* Purpose: To test the queue in c

* Author: puresky

*/

#include

#include

#include "cqueue.h"

int main(int argc, char **argv)

{

int data;

Queue *q = queue_new();

queue_push_back(q, (void*)1);

queue_push_back(q, (void*)3);

queue_push_back(q, (void*)5);

queue_pop_front(q);

queue_push_back(q, (void*)7);

queue_push_back(q, (void*)9);

queue_push_back(q, (void*)11);

printf("size:%d\n", queue_size(q));

while(!queue_empty(q))

{

data = (int)queue_pop_front(q);

printf("%d\n", data);

}

queue_free(q);

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值