队列 线性队列
来源:互联网 发布:工业做三维动画软件 编辑:程序博客网 时间:2024/06/04 18:39
#ifndef _SEQLIST_H_#define _SEQLIST_H_typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);void SeqList_Destroy(SeqList* list);void SeqList_Clear(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_Capacity(SeqList* list);int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);SeqListNode* SeqList_Get(SeqList* list, int pos);SeqListNode* SeqList_Delete(SeqList* list, int pos);#endif
<pre name="code" class="html">#ifndef _SEQQUEUE_H#define _SEQQUEUE_Htypedef void SeqQueue;SeqQueue* SeqQueue_Create(int capacity);void SeqQueue_Destroy(SeqQueue* queue);void SeqQueue_Clear(SeqQueue* queue);int SeqQueue_Append(SeqQueue* queue,void* item);void* SeqQueue_Retrieve(SeqQueue* queue);void* SeqQueue_Header(SeqQueue* queue);int SeqQueue_Length(SeqQueue* queue);int SeqQueue_Capacity(SeqQueue* queue);#endif
<pre name="code" class="html">#include <stdio.h>#include <malloc.h>#include "SeqList.h"typedef unsigned int TSeqListNode;typedef struct _tag_SeqList{ int capacity; int length; TSeqListNode* node;} TSeqList;SeqList* SeqList_Create(int capacity) // O(1){ TSeqList* ret = NULL; if( capacity >= 0 ) { ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode) * capacity); } if( ret != NULL ) { ret->capacity = capacity; ret->length = 0; ret->node = (TSeqListNode*)(ret + 1); } return ret;}void SeqList_Destroy(SeqList* list) // O(1){ free(list);}void SeqList_Clear(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; if( sList != NULL ) { sList->length = 0; }}int SeqList_Length(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; int ret = -1; if( sList != NULL ) { ret = sList->length; } return ret;}int SeqList_Capacity(SeqList* list) // O(1){ TSeqList* sList = (TSeqList*)list; int ret = -1; if( sList != NULL ) { ret = sList->capacity; } return ret;}int SeqList_Insert(SeqList* list, SeqListNode* node, int pos) // O(n) { TSeqList* sList = (TSeqList*)list; int ret = (sList != NULL); int i = 0; ret = ret && (sList->length + 1 <= sList->capacity); ret = ret && (0 <= pos); if( ret ) { if( pos >= sList->length ) { pos = sList->length; } for(i=sList->length; i>pos; i--) { sList->node[i] = sList->node[i-1]; } sList->node[i] = (TSeqListNode)node; sList->length++; } return ret;}SeqListNode* SeqList_Get(SeqList* list, int pos) // O(1) { TSeqList* sList = (TSeqList*)list; SeqListNode* ret = NULL; if( (sList != NULL) && (0 <= pos) && (pos <= sList->length) ) { ret = (SeqListNode*)(sList->node[pos]); } return ret;}SeqListNode* SeqList_Delete(SeqList* list, int pos) // O(n){ TSeqList* sList = (TSeqList*)list; SeqListNode* ret = SeqList_Get(list, pos); int i = 0; if( ret != NULL ) { for(i=pos+1; i<sList->length; i++) { sList->node[i-1] = sList->node[i]; } sList->length--; } return ret;}
#include "SeqQueue.h"#include "SeqList.h"SeqQueue* SeqQueue_Create(int capacity){return SeqList_Create(capacity);}void SeqQueue_Destroy(SeqQueue* queue){SeqList_Destroy(queue);}void SeqQueue_Clear(SeqQueue* queue){SeqList_Clear(queue);}int SeqQueue_Append(SeqQueue* queue,void* item){return SeqList_Insert(queue,item,SeqQueue_Length(queue));}void* SeqQueue_Retrieve(SeqQueue* queue){return SeqList_Delete(queue, 0);}void* SeqQueue_Header(SeqQueue* queue){return SeqList_Get(queue, 0);}int SeqQueue_Length(SeqQueue* queue){return SeqList_Length(queue);}int SeqQueue_Capacity(SeqQueue* queue){return SeqList_Capacity(queue);}
#include <stdio.h>#include <stdlib.h>#include "SeqQueue.h"/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) { SeqQueue* queue = SeqQueue_Create(20); int a[10] = {0}; int i = 0; for(i=0; i<10; i++) { a[i] = i + 1; SeqQueue_Append(queue, a + i); } printf("Header: %d\n", *(int*)SeqQueue_Header(queue)); printf("Length: %d\n", SeqQueue_Length(queue)); printf("Capacity: %d\n", SeqQueue_Capacity(queue)); while( SeqQueue_Length(queue) > 0 ) { printf("Retrieve: %d\n", *(int*)SeqQueue_Retrieve(queue)); } SeqQueue_Destroy(queue); return 0;}
0 0
- 队列 线性队列
- 线性队列
- c 队列线性存储
- 线性队列操作
- 线性结构_队列
- 线性队列操作
- 线性结构 循环队列
- 【数据结构】线性循环队列
- 数据结构之线性队列
- 线性表、栈、队列
- 线性表、栈、队列
- 线性表(栈/队列)
- 数据结构-线性结构-队列
- 队列的线性存储
- 线性表、栈、队列
- 数据结构之线性队列
- 线性队列的改变
- 线性结构---队列
- Spring框架学习笔记----事务管理
- DuiLib学习(七)
- C语言基础 根据输入值来确定数组大小
- Leetcode 11 Container With Most Water
- x264源代码简单分析
- 队列 线性队列
- C++12、模板
- Handler
- git 使用 基本命令
- 理解反射
- Android获取进程的权限信息
- Android中内容观察者的使用---- ContentObserver类详解
- Json
- 137. Single Number II