栈预先存储节点,队列的malloc/free均有栈模拟,从而保证不频繁的开辟/是否节点内存。

#include "com_is_buf.h"
#include "com_is_filter.h"
#include "assert.h" FileList_t* pgFileList = NULL;
FileList_t FileBuffer[IS_MAX_FILE_NUM];
static MS_U32* gs_pFileBufferSpace[IS_MAX_FILE_NUM];
Stack_t stack_file; #define ASSERT(x) assert(x) void create_stack(MS_U32 **ppStackSpace, MS_U32 nSize,
Stack_t* pStack)
{
ASSERT(ppStackSpace != NULL && pStack != NULL); pStack->m_pBuf = (void**)ppStackSpace; pStack->m_nBottom = ;
pStack->m_nTop = nSize-;
pStack->m_nInterator = ;
pStack->m_nSize = nSize;
} /**
* @brief pop stack
* @param pStack : stack to pop
* @return NULL
*/
void* pop_stack(Stack_t * pStack )
{
MS_U32 i = ;
void *pResult = NULL; ASSERT( pStack != NULL );
if( pStack->m_nInterator > )
{
i = (--pStack->m_nInterator) + pStack->m_nBottom; pResult = (void*)(pStack->m_pBuf[i]); return pResult;
} // no more stack to alloc
return NULL;
} /**
* @brief push data into stack
* @param pStack : stack to push
* @param pBuf : the pointer of data
* @return NULL
*/
void push_stack(Stack_t * pStack, void* pBuf )
{
MS_U32 i = ; ASSERT(pStack != NULL && pBuf != NULL); if( pStack->m_nInterator < pStack->m_nSize )
{
i = (pStack->m_nInterator++)+pStack->m_nBottom; pStack->m_pBuf[i] = pBuf;
}
} MS_U32 com_stack_file_initialize( void )
{
MS_U32 i = ;
MS_U32 err = ; create_stack(gs_pFileBufferSpace, IS_MAX_FILE_NUM, &stack_file); for( i=; i<IS_MAX_FILE_NUM; i++ )
{
push_stack( &stack_file, (void*)&FileBuffer[i] );
}
return err;
} FileList_t* com_is_malloc_file(void)
{
FileList_t* pFileList = NULL;
pFileList = (FileList_t*)pop_stack( &stack_file );
if( pFileList!=NULL )
{
memset( pFileList, , sizeof(FileList_t) );
} return pFileList;
} MS_U32 com_is_free_file( FileList_t *buf )
{
memset(buf,,sizeof(FileList_t));
push_stack( &stack_file, (void*) buf); FileList_t *pFileList = pgFileList;
FileList_t *pPreFileList = pgFileList; if(pgFileList == buf)
{
pgFileList = NULL;
buf = NULL;
return ;
} if( NULL != pFileList )
{
while( pFileList->next != NULL )
{
pPreFileList = pFileList;
pFileList= pFileList->next;
} if(pFileList == buf)
{
buf = NULL;
pPreFileList->next = NULL;
}
}
return ;
} void com_is_add_file( FileList_t** pFileOut)
{
FileList_t *pFileList = pgFileList;
FileList_t *pFileNew = NULL; pFileNew = com_is_malloc_file();
if(pFileNew == NULL)
{
return ;
}
pFileList = pgFileList;
if( NULL != pFileList )
{
while( pFileList->next != NULL )
{
pFileList= pFileList->next;
} pFileList->next = pFileNew;
pFileNew->next = NULL;
}
else
{
pFileNew->next = NULL;
pgFileList = pFileNew;
}
*pFileOut = pFileNew;
return ; } void com_is_destroy_filelist(void )
{
FileList_t *pFile = pgFileList;
FileList_t *pFile_temp = NULL; for(pFile = pgFileList;pFile != NULL; )
{
//com_is_free_file(pFile); pFile_temp = pFile->next;
memset(pFile,,sizeof(FileList_t));
push_stack( &stack_file, (void*) pFile);
pFile = pFile_temp;
}
pgFileList = NULL;
} FileState_t com_is_update_file_type(FileList_t *pFile)
{
MS_U16 len = ;
FileState_t state = FILE_OK;
len = strlen((char*)pFile->m_pchFileName);
if( == pFile->m_pchFileName[len-]//x
&& == pFile->m_pchFileName[len-]//m
&& == pFile->m_pchFileName[len-])//l
{
pFile->m_FileType = FILE_XML;
}
else if( == pFile->m_pchFileName[len-]//b
&& == pFile->m_pchFileName[len-]//m
&& == pFile->m_pchFileName[len-])//p
{
pFile->m_FileType = FILE_BMP;
}
else if( == pFile->m_pchFileName[len-]//m
&& == pFile->m_pchFileName[len-]//p
&& == pFile->m_pchFileName[len-])//g
{
pFile->m_FileType = FILE_MPG;
}
else
{
pFile->m_FileType = FILE_ERR;
state = FILE_ERROR;
}
return state;
} FileList_t* com_is_get_file_list(void)
{
return pgFileList;
}
#ifndef __COM_IS_BUF_H__
#define __COM_IS_BUF_H__
#include "MsCommon.h" #define IS_MAX_FILE_NAME (50)
#define IS_MAX_SECTION_NUM (700) // TODO: 2.5MB->640 Section
#define IS_MAX_SECTION_LEN (4100) // #define ADDR_ALIGN(data) ((((data) & 0x3) == 0)? (data) : ((data) + 0x4 - ((data) & 0x3))) typedef struct Stack_s
{
MS_U32 m_nBottom;
MS_U32 m_nTop;
MS_S32 m_nInterator;
MS_U32 m_nSize;
void** m_pBuf;
}Stack_t; typedef enum FileType_e
{
FILE_ALL,
FILE_BMP,
FILE_XML,
FILE_MPG,
FILE_ERR,
}FileType_t; typedef enum FileState_e
{
FILE_NOT_EXIST = ,
FILE_EXIST,
FILE_ERROR,
FILE_OK
}FileState_t; typedef struct FileList_s
{
FileType_t m_FileType;
MS_U16 m_FileId;
MS_U8 m_version;
MS_U8 m_chFileNameLen;
MS_S8 m_pchFileName[IS_MAX_FILE_NAME +];
MS_U8 m_nLastSection;
MS_U32 m_nFileAddr;
MS_U32 m_nFileLength;
MS_U32 m_nSubFileAddr[];
MS_U32 m_nSubFileLength[]; struct FileList_s *next;
}FileList_t; MS_U32 com_stack_file_initialize( void );
MS_U32 com_stack_file_free(void);
FileList_t* com_is_malloc_file(void);
MS_U32 com_is_free_file( FileList_t *buf );
void com_is_add_file( FileList_t** pFileOut);
void com_is_destroy_filelist(void );
FileState_t com_is_update_file_type(FileList_t *pFile); FileList_t* com_is_get_file_list(void); #endif

C 栈实现队列节点的管理的更多相关文章

  1. 什么是“堆”,"栈","堆栈","队列",它们的区别?

    堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树. 将根节点最大的堆叫做最大堆 ...

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. 堆”,"栈","堆栈","队列"以及它们的区别

    如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面试,这些都还会问到, ...

  4. JavaScript中的算法之美——栈、队列、表

    序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...

  5. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  6. 剑指offter-面试题7.用两个栈实现队列

    题目.用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead 分别完成在对尾插入节点和在队头删除节点. 该队列类模板如下: template <typ ...

  7. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  8. 剑指offer-面试题7:俩个栈实现队列(c)

  9. 课堂笔记及知识点----栈和队列(2018/10/24(am))

    栈: Stack<int>  xt=new Stack<int>() ; 先进后出,后进先出,水杯结构,顺序表类似 常用方法:   .pop---->出栈,弹栈     ...

随机推荐

  1. Vue-Router + Vuex 实现单页面应用

    效果查看(一个食品安全网,大家也可以发布一些食品安全的见闻,尽举手之劳): 源代码:https://pan.baidu.com/s/1i43H3LV 如果想要服务器端代码可以在评论里说明一下 利用vu ...

  2. http content-type 与 java后端处理

    http中的常用的content-type有: application/x-www-form-urlencoded;charset=UTF-8  传递表单类数据 application/json;ch ...

  3. select option 选中 取消js

    今天在写select option标签的过程中遇到一个问题,就是刷新页面自己选中的标签回显选择的值,清空表单,下拉选择默认的值: 1.这是默认的下拉框: 2.自己定义的下拉选项,红色方框中主要处理第一 ...

  4. 牛客网多校第3场C-shuffle card 平衡树或stl(rope)

    链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...

  5. js获取谷歌浏览器版本

    根据浏览器的useragent获取浏览器信息 // 获取谷歌浏览器版本 function getChromeVersion() { var arr = navigator.userAgent.spli ...

  6. redis主从简单配置

    网上有好多复杂的配置,这里我用的是windows版的redis,简单配置了下,试验了下主从,能正常使用. 1.redis-master文件夹(里面是redis),redis-slave文件夹(里面是r ...

  7. Linux目录结构 重要目录结构详细

    1.1 /etc/hosts ip地址与主机名(域名)的对应关系  解析主机名  ping www.baidu.com 解析成10.0.0.200 1.产品测试 2  用主机名互相访问 1.2 /et ...

  8. Mac High Sierra 降级安装Mac Sierra

    1>.将你装备好的U盘用Mac自带的磁盘管理工具格式化成Mac OS扩展(日志式),名称输入disk:2>.打开终端工具,按以下步骤操作:(均不含引号,如未设置系统密码,请前往设置> ...

  9. Tensorflow实战系列之一:《Tensorflow实现自己的图像分类》

    最近做GAN的实验,刚好有一批二分类的数据集,心血来潮想着也来试一下Tensorflow的实验.并且会尝试些不同网络的效果,重点在于动手尝试,加油~~ 首先介绍下我的数据集,简单的男性和女性,分别存在 ...

  10. python 图像转矩阵,矩阵转图像

    1.图像转换为矩阵 matrix = numpy.asarray(image) Help on function asarray in module numpy.core.numeric: asarr ...