亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dequeue.c

?? 《多任務下的數據結構》隨書的源代碼。探討多任務下的常用數據結構的實現
?? C
字號:
/*
 * Copyright (c) 2000-2008
 * Author: Weiming Zhou
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  
 */

#include <stdio.h>
#include <stdlib.h>
#include "CapiGlobal.h"
#include "DeQueue.h"

#define MIN_DEQUE_MAP_SIZE		16
#define MIN_DEQUE_BLOCK_SIZE	128

/**	DeQue中的環形隊列創建函數

	@param	UINT uBlockSize - 環形隊列大小	
	@return	DEQUEBLOCK * - 環形隊列指針	
*/
DEQUEBLOCK *DeQueBlock_Create(UINT uBlockSize)
{
	DEQUEBLOCK *pBlock;
	pBlock = (DEQUEBLOCK *)malloc(sizeof(DEQUEBLOCK));
	if ( pBlock != NULL )
	{
		pBlock->ppData = malloc(uBlockSize * sizeof(void *));
		if ( pBlock->ppData == NULL )
		{
			free(pBlock);
			return NULL;
		}
		pBlock->uHead = 0;
		pBlock->uTail = 0;
	}
	return pBlock;
}

/**	DeQue中的環形隊列釋放函數

	@param	DEQUE *pQue - DeQue指針	
	@param	DEQUEBLOCK *pBlock - 環形隊列指針	
	@param	DESTROYFUNC DestroyFunc - 數據釋放回調函數指針	
	@return	void - 無	
*/
void DeQueBlock_Destroy(DEQUE *pQue, DEQUEBLOCK *pBlock, DESTROYFUNC DestroyFunc)
{
	UINT i;
	if (pBlock != NULL)
	{
		if ( DestroyFunc != NULL )
		{
			if ( pBlock->uHead < pBlock->uTail )
			{
				for ( i = 0; i < pBlock->uTail; i++ )
				{
					(*DestroyFunc)( pBlock->ppData[i] );
				}
				for ( i = pBlock->uHead; i < pQue->uBlockSize; i++ )
				{
					(*DestroyFunc)( pBlock->ppData[i] );
				}
			}
			else
			{
				for ( i = pBlock->uHead; i < pBlock->uTail; i++ )
				{
					(*DestroyFunc)( pBlock->ppData[i] );
				}
			}
		}
		free(pBlock->ppData);
		free(pBlock);
	}	
}

/**	DeQue的創建函數

	@param	UINT uMapSize - MAP的大小	
	@param	UINT uBlockSize - 每個環形隊列的大小	
	@return	DEQUE * - 返回創建的DeQue指針,失敗返回NULL	
*/
DEQUE *	DeQue_Create(UINT uMapSize, UINT uBlockSize)
{
	DEQUE	*pQue;
	if ( uMapSize < MIN_DEQUE_MAP_SIZE )
	{
		uMapSize = MIN_DEQUE_MAP_SIZE;
	}

	if ( uBlockSize < MIN_DEQUE_BLOCK_SIZE )
	{
		uBlockSize = MIN_DEQUE_BLOCK_SIZE;
	}

	pQue = malloc(sizeof(DEQUE));
	if ( pQue != NULL )
	{

		pQue->ppMap = malloc(uMapSize *sizeof(DEQUEBLOCK *));
		if ( pQue->ppMap != NULL )
		{
			DEQUEBLOCK *pBlock = DeQueBlock_Create(uBlockSize);
			if ( pBlock != NULL )
			{
				pBlock->uMapPos = uMapSize / 2;
				pQue->ppMap[pBlock->uMapPos] = pBlock;

				pQue->pLast = pBlock;
				pQue->pFirst = pBlock;
				pQue->uBlockSize = uBlockSize;
				pQue->uMapSize = uMapSize;
			}
			else
			{
				free(pQue->ppMap);
				free(pQue);
				pQue = NULL;
			}		
		}
		else
		{
			free(pQue);
			pQue = NULL;
		}
	}
	return pQue;
}

/**	DeQue的釋放函數

	@param	DEQUE *pQue - 要釋放的DeQue指針	
	@param	DESTROYFUNC DestroyFunc - 數據釋放回調函數	
	@return	void - 無	
*/
void DeQue_Destroy( DEQUE *pQue, DESTROYFUNC DestroyFunc )
{
	if ( pQue != NULL )
	{
		UINT i;
		DEQUEBLOCK	*pBlock;
		for ( i = pQue->pFirst->uMapPos; i <= pQue->pLast->uMapPos; i++)
		{
			pBlock = pQue->ppMap[i];
			DeQueBlock_Destroy(pQue, pBlock, DestroyFunc);
		}
		free(pQue->ppMap);
		free(pQue);
	}
}

/**	DeQue的插入尾部函數

	@param	DEQUE *pQue - DeQue指針	
	@param	void *pData - 要插入的數據指針	
	@return	INT (by default) - CAPI_SUCCESS表示成功,CAPI_FAILED表示失敗	
*/
INT	DeQue_InsertTail( DEQUE *pQue, void *pData )
{
	DEQUEBLOCK *pBlock;
    UINT    uTailNext;
	
	pBlock= pQue->pLast;

	/* 計算尾部節點的下一位置 */
	if ( pBlock->uTail == pQue->uBlockSize - 1 )
	{
		uTailNext = 0;
	}
	else
	{
		uTailNext = pBlock->uTail + 1;
	}

	if ( pBlock->uHead != uTailNext ) /* 隊列未滿的情況 */
	{
		pBlock->ppData[pBlock->uTail] = pData;
		pBlock->uTail = uTailNext;
	}
	else
	{
		DEQUEBLOCK *pNewBlock = DeQueBlock_Create(pQue->uBlockSize);
		if ( pNewBlock == NULL )
		{
			return CAPI_FAILED;
		}
		if ( pBlock->uMapPos >= pQue->uMapSize - 1 )
		{
			/* 重新分配MAP */
			DEQUEBLOCK **ppMap = malloc(pQue->uMapSize * 2 * sizeof(DEQUEBLOCK *));
			if ( ppMap == NULL )
			{
				return CAPI_FAILED;
			}

			memcpy(ppMap, pQue->ppMap, 
				pQue->uMapSize * sizeof(DEQUEBLOCK *) );
			pQue->uMapSize *= 2;

			free(pQue->ppMap);
			pQue->ppMap = ppMap;
		}
		pNewBlock->uMapPos = pBlock->uMapPos + 1;
		pNewBlock->ppData[0] = pData;
		pNewBlock->uTail += 1;

		pQue->ppMap[pNewBlock->uMapPos] = pNewBlock;
		pQue->pLast = pNewBlock;
	}
	return CAPI_SUCCESS;
}

/**	DeQue的彈出頭部節點數據函數

	@param	DEQUE *pQue - DeQue指針	
	@return	void * - 彈出的頭部數據指針	
*/
void *  DeQue_PopHead(DEQUE *pQue)
{
	DEQUEBLOCK *pBlock;
	UINT		uHead;

	pBlock = pQue->pFirst;

	uHead = pBlock->uHead;
	if ( uHead != pBlock->uTail )
	{
		/* 頭部和尾部沒有重合表示隊列不為空的情況 */
		if ( uHead == pQue->uBlockSize - 1 )
		{
			pBlock->uHead = 0;
		}
		else
		{
			pBlock->uHead += 1;
		}
		if ( pBlock->uHead == pBlock->uTail )
		{
			/* 隊列中只有一個元素的情況, 如果存在下一塊則需要指向下一個塊 */
			if ( pQue->pLast != pQue->pFirst )
			{
				UINT uMapPos = pBlock->uMapPos;
				DeQueBlock_Destroy(pQue, pBlock, NULL);
				pBlock = pQue->ppMap[uMapPos + 1];
				pQue->pFirst = pBlock;
			}
		}
		return pBlock->ppData[uHead];
	}
	else
	{
		return NULL;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
菠萝蜜视频在线观看一区| 亚洲精品免费一二三区| 美国一区二区三区在线播放| 欧美撒尿777hd撒尿| 亚洲线精品一区二区三区八戒| 色综合天天狠狠| 亚洲综合一区二区| 欧美三级三级三级| 麻豆精品一区二区av白丝在线| 91精品国产高清一区二区三区| 久久精品二区亚洲w码| 2023国产精品视频| 99久久国产综合色|国产精品| 亚洲精品视频在线观看免费 | 亚洲精品欧美在线| 欧美视频日韩视频在线观看| 琪琪一区二区三区| 国产精品剧情在线亚洲| 欧美午夜免费电影| 精品一区二区三区不卡| 中文字幕一区二区在线观看| 欧美日韩一区二区三区在线看 | 欧美视频在线观看一区| 免费不卡在线视频| 一区精品在线播放| 欧美美女喷水视频| 国产成人综合自拍| 亚洲国产精品久久久男人的天堂| 欧美电视剧在线观看完整版| 成人激情图片网| 日日摸夜夜添夜夜添亚洲女人| 国产欧美综合色| 欧美日韩另类一区| 高清在线不卡av| 天天综合色天天| 国产精品欧美综合在线| 91精品久久久久久久91蜜桃 | 91麻豆swag| 蜜乳av一区二区三区| 亚洲男女一区二区三区| 欧美成人女星排名| 欧美日韩一区三区| 成人av网站免费观看| 美腿丝袜亚洲色图| 亚洲亚洲精品在线观看| 国产亚洲欧美在线| 日韩欧美一卡二卡| 欧美日韩精品一区二区| 成人久久久精品乱码一区二区三区 | 乱中年女人伦av一区二区| 亚洲人成网站在线| 日本一区二区三区dvd视频在线| 欧美日韩视频第一区| 成人小视频在线观看| 国产综合一区二区| 日韩国产成人精品| 亚洲成a人片在线不卡一二三区| 欧美激情一区在线| 久久综合狠狠综合久久激情| 日韩欧美一级片| 欧美美女黄视频| 在线观看91视频| 99久久免费视频.com| 国产**成人网毛片九色| 高清视频一区二区| 丁香婷婷综合五月| 国产成人av在线影院| 国产主播一区二区| 韩国精品免费视频| 激情偷乱视频一区二区三区| 免费av成人在线| 日韩vs国产vs欧美| 日韩成人精品在线观看| 日本中文字幕一区二区视频| 丝袜脚交一区二区| 日韩国产精品大片| 美腿丝袜亚洲色图| 精品无人码麻豆乱码1区2区| 久久不见久久见免费视频1| 五月激情六月综合| 日本欧美大码aⅴ在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩精品亚洲专区| 久久福利视频一区二区| 激情综合色综合久久| 国产一区二区三区蝌蚪| 国产99久久久久| 99久久免费国产| 在线精品视频一区二区| 欧美色爱综合网| 日韩一级片网站| 欧美精品一区男女天堂| 国产亚洲一区二区在线观看| 国产日韩一级二级三级| 国产精品乱子久久久久| 亚洲中国最大av网站| 天天综合网天天综合色| 韩国成人在线视频| 99国产精品99久久久久久| 欧美性高清videossexo| 日韩一区二区三| 久久久精品国产99久久精品芒果| 国产精品伦一区二区三级视频| 一区二区三区四区蜜桃| 日韩电影免费在线| 国产精品一区二区久久精品爱涩| aaa欧美色吧激情视频| 欧美日韩一区二区三区四区五区| 日韩一区二区精品在线观看| 国产亚洲精品免费| 亚洲永久免费视频| 精品伊人久久久久7777人| 成人性生交大片免费看在线播放| 在线观看三级视频欧美| 亚洲精品在线观看网站| 成人免费在线视频| 麻豆精品国产91久久久久久 | 99国产精品久久久久久久久久 | 欧洲精品视频在线观看| 欧美一区二区日韩一区二区| 国产精品国产a| 蜜臀av性久久久久av蜜臀妖精| 成人app软件下载大全免费| 欧美精品aⅴ在线视频| 国产欧美一区二区精品秋霞影院| 亚洲愉拍自拍另类高清精品| 国产69精品一区二区亚洲孕妇| 欧美影视一区在线| 国产欧美日韩精品在线| 日韩成人免费看| 日本精品视频一区二区三区| 久久亚洲精华国产精华液 | 亚洲福利视频一区二区| 国产黑丝在线一区二区三区| 欧美日韩精品高清| 国产精品国产成人国产三级| 美女视频黄a大片欧美| 色香蕉久久蜜桃| 国产色综合一区| 麻豆一区二区三| 欧美在线啊v一区| 国产精品久久久久久久久快鸭| 久久精品国产精品青草| 欧美又粗又大又爽| 亚洲激情网站免费观看| 成人一区二区三区| 欧美成人官网二区| 日韩中文字幕麻豆| 日本道在线观看一区二区| 国产精品久久久久一区| 国产在线视频一区二区三区| 欧美美女喷水视频| 一区二区三区精品视频| 91亚洲精品久久久蜜桃网站| 国产亚洲综合在线| 激情综合网天天干| 欧美一级久久久久久久大片| 亚洲国产精品自拍| 色www精品视频在线观看| 国产精品国产三级国产aⅴ原创 | 91精品婷婷国产综合久久性色| 一区二区三区日韩欧美| 91在线观看美女| 中文字幕一区二| 北条麻妃一区二区三区| 国产目拍亚洲精品99久久精品| 国产伦精品一区二区三区视频青涩| 欧美成人国产一区二区| 美女一区二区三区| 精品久久久久久最新网址| 久久se这里有精品| 国产午夜精品福利| 粉嫩久久99精品久久久久久夜 | 日韩午夜精品视频| 蜜桃久久久久久久| 久久久久久久综合狠狠综合| 国产精品一级片在线观看| 日本一区二区三区免费乱视频| 国产成人av一区二区三区在线观看| 中文字幕不卡三区| 一本大道综合伊人精品热热 | 成人国产精品视频| 中文字幕亚洲视频| 在线视频你懂得一区| 亚洲高清免费视频| 日韩欧美亚洲一区二区| 国产麻豆9l精品三级站| 国产精品国产精品国产专区不片| 色视频成人在线观看免| 亚洲va欧美va人人爽午夜| 日韩一卡二卡三卡| 国产a久久麻豆| 亚洲成人精品在线观看| 欧美一区二区在线不卡| 国产成人亚洲综合a∨婷婷图片 | 亚洲一区二区三区影院| 日韩视频在线观看一区二区| 国产成人自拍在线| 亚洲国产另类av| 久久久久国产一区二区三区四区|