设为首页 加入收藏

TOP

队列链性表c语言实现方式 linkqueue.h 和 linkqueue.c
2017-07-12 10:23:12 】 浏览:9569
Tags:队列 语言 实现 方式 linkqueue.h linkqueue.c

linkqueue.h 文件

#ifndef _LINK_QUEUE_H_
#define _LINK_QUEUE_H_
#include 
  
   
#include 
   
     #include 
    
      typedef void Queue; typedef struct _tag_LinkQueueNode { LinkListConnectedNode connected_node; void* item; }LinkQueueNode; #ifndef bool #define bool int #define true 1 #define false 0 #endif Queue* LinkQueue_Create(); bool LinkQueue_Destory(Queue* queue); bool LinkQueue_Clear(Queue* queue); bool LinkQueue_Append(Queue* queue, void* item); void* LinkQueue_Retrieve(Queue* queue); void* LinkQueue_Header(Queue* queue); int LinkQueue_GetLength(Queue* queue); #endif
    
   
  

linkqueue.c 文件

#include 
  
   
#include 
   
     #include 
    
      #include "linklist.h" #include "linkqueue.h" //队列的链式存储 //队列元素出队列时,注意内存管理 //创建队列相当于创建链式线性表 Queue* LinkQueue_Create() { return LinkList_Create(); } //销毁队列相当于先清空队列,在销毁链表 bool LinkQueue_Destory(Queue* queue) { bool ret; ret = LinkQueue_Clear(queue); if (ret == false) { return false; } ret = LinkList_Destory(queue); if (ret == false) { return false; } return true; } //清空队列相当于所有元素出队列,在清空链表 bool LinkQueue_Clear(Queue* queue) { bool ret; while(LinkQueue_GetLength(queue) > 0) { LinkQueue_Retrieve(queue); } ret = LinkList_Clear(queue); if (ret == false) { return false; } return true; } //队列添加元素相当于在链表尾部插入元素 //队列业务节点转换为链表节点 bool LinkQueue_Append(Queue* queue, void* item) { bool ret; LinkQueueNode* linkqueuenode = NULL; linkqueuenode = (LinkQueueNode*)malloc(sizeof(LinkQueueNode)); if (linkqueuenode == NULL) { return false; } memset(linkqueuenode,0,sizeof(LinkQueueNode)); //初始化 //linkqueuenode->connected_node.next = NULL; linkqueuenode->item = item; ret = LinkList_InsertOneNode(queue,(ListNode*)linkqueuenode,LinkList_GetLength(queue)); if (ret == false) { if (linkqueuenode != NULL) { free(linkqueuenode); linkqueuenode = NULL; } return false; } return true; } //从队列中出一个元素相当于从链表的0号位置删除元素 //出队列的节点还要释放内存 void* LinkQueue_Retrieve(Queue* queue) { void* ret = NULL; LinkQueueNode* linkqueuenode = NULL; linkqueuenode = (LinkQueueNode*)LinkList_DeleteOneNode(queue,0); if (linkqueuenode == NULL) { return NULL; } ret = linkqueuenode->item; if (linkqueuenode!= NULL) { free(linkqueuenode); linkqueuenode = NULL; } return ret; } //获取对头元素相当于获取链表0号位置元素 void* LinkQueue_Header(Queue* queue) { void* ret = NULL; LinkQueueNode* linkqueuenode = NULL; linkqueuenode = (LinkQueueNode*)LinkList_GetOneNode(queue,0); if (linkqueuenode == NULL) { return NULL; } ret = linkqueuenode->item; return ret; } int LinkQueue_GetLength(Queue* queue) { return LinkList_GetLength(queue); } /**********************测试代码************************/ /* void main() { int i = 0; int aa[10] = {0}; Queue* queue = NULL; queue = LinkQueue_Create(10); if (queue == NULL) { printf("创建链式队列失败"); } for (i = 0; i < 5; i ++) { aa[i] = aa[i] + i + 1; LinkQueue_Append(queue,&aa[i]); } printf("链式队列的长度是:%d \n",LinkQueue_GetLength(queue)); printf("链式队列的头元素是:%d \n",*((int*)LinkQueue_Header(queue))); //出队列 while(LinkQueue_GetLength(queue) > 0) { printf("链式队列依次出元素:%d \n",*((int*)LinkQueue_Retrieve(queue))); } //销毁队列 LinkQueue_Destory(queue); system("pause"); } */
    
   
  

可能会调用其它头文件或源文件,如果调用,请翻看我的其它博客,对其头文件或源文件的实现方式。
good luck !

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇字符串对象的创建 下一篇循环链表c语言实现 circlelinklis..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目