数据结构封装之《LinkQueue链式队列》
来源:互联网 发布:apache 安装版下载 编辑:程序博客网 时间:2024/06/05 16:03
说明:
本队列是通过链表实现的;
这里采用了代码复用的方法,即使用了LinkList线性链表,详见 《LinkList单向链表》;
下面将给出该数据结构的代码,每个函数的结构分析 ,以及个别主要函数的汇编分析
代码:
LinkQueue.h
#ifndef _LINKQUEUE_H_#define _LINKQUEUE_H_typedef void LinkQueue;LinkQueue* LinkQueue_Create();void LinkQueue_Destroy(LinkQueue* queue);void LinkQueue_Clear(LinkQueue* queue);int LinkQueue_Append(LinkQueue* queue, void* item);void* LinkQueue_Retrieve(LinkQueue* queue);void* LinkQueue_Header(LinkQueue* queue);int LinkQueue_Length(LinkQueue* queue);#endif
LinkQueue.c
#include <malloc.h>#include "LinkList.h"#include "LinkQueue.h"typedef struct _tag_LinkQueueNode{ LinkListNode header; void* item;} TLinkQueueNode;//生成队列LinkQueue* LinkQueue_Create() // O(1){ return LinkList_Create();}//销毁队列void LinkQueue_Destroy(LinkQueue* queue) // O(n){ LinkQueue_Clear(queue); LinkList_Destroy(queue);}//清空队列void LinkQueue_Clear(LinkQueue* queue) // O(n){ while( LinkQueue_Length(queue) > 0 ) { LinkQueue_Retrieve(queue); }}//入队int LinkQueue_Append(LinkQueue* queue, void* item) // O(n){ TLinkQueueNode* node = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode)); int ret = (item != NULL) && (node != NULL); if( ret ) { node->item = item; ret = LinkList_Insert(queue, (LinkListNode*)node, LinkList_Length(queue)); } if( !ret ) { free(node); } return ret;}//出队void* LinkQueue_Retrieve(LinkQueue* queue) // O(1){ TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Delete(queue, 0); void* ret = NULL; if( node != NULL ) { ret = node->item; free(node); } return ret;}//队列头部数据(不出队)void* LinkQueue_Header(LinkQueue* queue) // O(1){ TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Get(queue, 0); void* ret = NULL; if( node != NULL ) { ret = node->item; } return ret;}//队列长度int LinkQueue_Length(LinkQueue* queue) // O(1){ return LinkList_Length(queue);}
main.c
#include <stdio.h>#include <stdlib.h>#include "LinkQueue.h"int main(int argc, char *argv[]) { LinkQueue* queue = LinkQueue_Create(); int a[10] = {0}; int i = 0; for(i=0; i<10; i++) { a[i] = i + 1; LinkQueue_Append(queue, a + i); } printf("Header: %d\n", *(int*)LinkQueue_Header(queue)); printf("Length: %d\n", LinkQueue_Length(queue)); while( LinkQueue_Length(queue) > 0 ) { printf("Retrieve: %d\n", *(int*)LinkQueue_Retrieve(queue)); } LinkQueue_Destroy(queue); return 0;}
函数结构分析:
1.LinkQueue_Create
2.LinkQueue_Retrieve
3.LinkQueue_Clear
4.LinkQueue_Header
5.LinkQueue_Append
汇编分析:
main
1.LinkQueue_Create
2.LinkQueue_Append
3.LinkQueue_Header
4.LinkQueue_Length
5.LinkQueue_Retrieve
6.LinkQueue_Destroy
阅读全文
0 0
- 数据结构封装之《LinkQueue链式队列》
- 数据结构封装之《LinkQueue链式队列》
- LinkQueue——链式队列
- 链式队列的实现LinkQueue
- 数据结构之链式队列
- 数据结构之链式队列
- 数据结构之链式队列
- 数据结构之链式队列
- 数据结构封装之《LinkQueue2.0改进链式队列》
- 数据结构封装之《LinkQueue2.0改进链式队列》
- 数据结构之队列(链式队列)
- Java数据结构之链式队列
- 【数据结构-队列】链式队列
- 常用数据结构之链式存储队列
- 数据结构之链式队列(优化版)
- 数据结构之---C语言实现链式队列
- 数据结构之链式队列的所有操作
- 数据结构学习之队列(链式存储)
- Mac OS Git 安装
- 【Java】Gson解析复杂数据
- 算法复习:丑数
- 个人笔记4
- arm-linux 汇总
- 数据结构封装之《LinkQueue链式队列》
- Java websocket入门
- iOS模拟器不能输入中文解决
- chromebook lenovo n21折腾笔记
- 数据结构封装之《SeqQueue顺序式队列》
- 前端页面适配的rem换算
- pie(UVALive
- 【笨办法学python】小记 从A读取数据写入到B
- php运行模式