• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

队列的C语言实现(原创)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用链表实现的队列,源码用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 <stdlib.h>
#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 <stdio.h>
#include <stdlib.h>
#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;
}

鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
栈的C语言实现(原创)发布时间:2022-05-14
下一篇:
哈希表(HashTable)的简单实现[C语言](原创)发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap