不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 423|回复: 0

[c/c++] [C数据结构]链式队列(复用单链表)

[复制链接]
j2cat 发表于 2018-1-6 19:17:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
LinkQueue.h
  1. #ifndef _LINKQUEUE_H_
  2. #define _LINKQUEUE_H_

  3. typedef void LinkQueue;

  4. LinkQueue* LinkQueue_Create(void);

  5. void LinkQueue_Destroy(LinkQueue* queue);

  6. void LinkQueue_Clear(LinkQueue* queue);

  7. int LinkQueue_Append(LinkQueue* queue, void* item);

  8. void* LinkQueue_Retrieve(LinkQueue* queue);

  9. void* LinkQueue_Header(LinkQueue* queue);

  10. int LinkQueue_Length(LinkQueue* queue);

  11. #endif
复制代码
LinkQueue.c
  1. #include "LinkQueue.h"
  2. #include "linklist.h"
  3. #include <malloc.h>

  4. typedef struct _tag_LinkQueueNode {
  5.         TLinkListNode header;
  6.         void* item;
  7. }TLinkQueueNode;



  8. LinkQueue* LinkQueue_Create(void) {
  9.         return linklist_create();
  10. }

  11. void LinkQueue_Destroy(LinkQueue* queue) {
  12.         linklist_clear((LinkList*)queue);
  13.         linklist_destroy((LinkList*)queue);
  14. }

  15. void LinkQueue_Clear(LinkQueue* queue) {
  16.         while (LinkQueue_Length(queue) > 0) {
  17.                 LinkQueue_Retrieve(queue);
  18.         }
  19. }

  20. int LinkQueue_Append(LinkQueue* queue, void* item) {
  21.         TLinkQueueNode* node = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode));
  22.         int ret = (NULL != node) && (NULL != item);
  23.         if (ret) {
  24.                 node->item = item;
  25.                 ret = linklist_insert((LinkList*)queue, (TLinkListNode*)node, linklist_length((LinkList*)queue));
  26.         }
  27.         if (!ret && NULL == node) {
  28.                 free(node);
  29.         }
  30.        
  31.         return ret;
  32. }

  33. void* LinkQueue_Retrieve(LinkQueue* queue) {
  34.         TLinkQueueNode* node = (TLinkQueueNode*)linklist_delete((LinkList*)queue, 0);
  35.         void* ret = NULL;

  36.         if (NULL != node) {
  37.                 ret = node->item;
  38.                 free(node);
  39.         }

  40.         return ret;
  41. }

  42. void* LinkQueue_Header(LinkQueue* queue) {
  43.         TLinkQueueNode* node = (TLinkQueueNode*)linklist_get((LinkList*)queue, 0);
  44.         void* ret = NULL;

  45.         if (NULL != node) {
  46.                 ret = node->item;
  47.         }
  48.         return ret;
  49. }

  50. int LinkQueue_Length(LinkQueue* queue) {
  51.         return linklist_length((LinkList*)queue);
  52. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-9-19 06:02

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表