队列链性表c语言实现方式 linkqueue.h 和 linkqueue.c
来源:互联网 发布:ubuntu搭建php开发环境 编辑:程序博客网 时间:2024/06/04 23:20
linkqueue.h 文件
#ifndef _LINK_QUEUE_H_#define _LINK_QUEUE_H_#include <stdio.h>#include <stdlib.h>#include <string.h>typedef void Queue;typedef struct _tag_LinkQueueNode{ LinkListConnectedNode connected_node; void* item;}LinkQueueNode;#ifndef bool#define bool int#define true 1#define false 0#endifQueue* 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 <stdio.h>#include <stdlib.h>#include <string.h>#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 !
阅读全文
1 0
- 队列链性表c语言实现方式 linkqueue.h 和 linkqueue.c
- 链式队列的实现LinkQueue
- ADT LinkQueue 队列的实现
- LinkQueue
- 链队列(LinkQueue)
- Java实现LinkQueue
- LinkQueue——链式队列
- 数据结构封装之《LinkQueue链式队列》
- 数据结构封装之《LinkQueue链式队列》
- 队列线性表的c语言实现方式 seqqueue.h 和 seqqueue.c
- 数据结构四:栈的两种形式LinkStack和SeqStack用线性表的实现方式,以及SeqQueue和LinkQueue的实现
- 栈的链性表的c语言实现方式 linkstack.h 和 linkstack.c
- 链表的链性表的c语言实现方式 linklist.h 和 linklist.c
- 链表线性表的c语言实现方式 seqlist.h 和 seqlist.c
- 队列 C语言实现
- 队列C语言实现
- C语言实现队列
- 队列 c语言实现
- ORM之EF学习---增删改查
- iOS 界面之UICollectionView---总结
- 华为OJ——名字的漂亮度
- http协议的简单介绍
- Linux_170709_Corntab 命令u
- 队列链性表c语言实现方式 linkqueue.h 和 linkqueue.c
- 使用Socket控制前后端的数据交换和Web应用的资源消耗
- 射雕英雄传(李亚鹏版)观后感
- 文章标题
- 加载地址和链接地址
- 把Qt 的窗口程序 嵌入到 MFC 的窗口程序
- 大整数除法
- Linux实时技术与典型实现分析-第 2 部分
- UVA 210 并行程序模拟