⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teclinklist.cpp

📁 This is a simple demo of Link List. You can Add/Del/Find a structure From/To a Link List
💻 CPP
字号:
// tecLinkList.cpp


#include "stdio.h"
#include "windows.h"
#include "tecLinkList.h"


BOOL __stdcall tecListAdd(
	TEC_LINKLIST *ptecList,
	TEC_DATA_INFO *pData, 
	int nInsBef,				/*1: First. 0: Last*/
	DWORD *pdwErrCode)
{
	int nCurPos = 1;
	TEC_DATA_INFO *pFirst = NULL, *pCurr;

	pCurr = (TEC_DATA_INFO*)calloc(1, sizeof(TEC_DATA_INFO));
	pFirst = ptecList -> pData;

	*pdwErrCode = 0;
	ptecList -> nNum++;
	if (!pFirst)
		ptecList -> pData = pData;
	else
	{
		pCurr = pFirst;
		if (nInsBef == 1)				// Add to first
		{
			ptecList -> pData = pData;
			ptecList -> pData -> pNext = pCurr;
		}
		else if ((nInsBef == 0) ||
			((ptecList -> nNum-1) < (int)nInsBef) ||
			(nInsBef < 0))			// Add to last
		{
			while (pCurr)
			{
				if (!pCurr -> pNext)
				{
					pCurr -> pNext = pData;
					pCurr = pData;
					break;
				}
				else
					pCurr = pCurr -> pNext;
			}
		}
		else
		{
			while ((nCurPos < (nInsBef-1)) &&
				(pCurr))
			{
				nCurPos++;
				pCurr = pCurr -> pNext;
			}
			// Find the pos to add/insert
			pData -> pPrev = pCurr;
			pData -> pNext = pCurr -> pNext;
			pCurr -> pNext = pData;
		}
	}
	return TRUE;
}


// Delete the node and return node data
// if has pos info, delete the pos. 1 -> first; 0 -> last
// if has node data, delete the node
// pos first
BOOL __stdcall tecListDel(
	TEC_LINKLIST *ptecList,
	TEC_DATA_INFO *pData,
	int *pnPos,
	DWORD *pdwErrCode)
{
	int nCurPos = 0;
	TEC_DATA_INFO *pCurr, *pPrev;
	pCurr = (TEC_DATA_INFO*)calloc(1, sizeof(TEC_DATA_INFO));

	*pdwErrCode = 0;
	pCurr = ptecList -> pData;
	if (*pnPos < 0)			// node data
	{
		while (pCurr)
		{
			nCurPos++;
			if (pCurr -> nVal == pData -> nVal)
			{
				memcpy(pData, pCurr, sizeof(TEC_DATA_INFO));
				if (nCurPos == 1)				// Del First
					ptecList -> pData = pCurr -> pNext;
				else if (nCurPos == ptecList -> nNum)			// Del Last
					pPrev -> pNext = NULL;
				else
					pPrev -> pNext = pCurr -> pNext;
				ptecList -> nNum--;
				break;
			}
			pPrev = pCurr;
			pCurr = pCurr -> pNext;
		}
	}
	else					// position
	{
		if ((*pnPos == 0) || (ptecList -> nNum < *pnPos))		// Last node
			*pnPos = ptecList -> nNum;

		while (pCurr)
		{
			nCurPos++;
			if (nCurPos == *pnPos)
			{
				if (*pnPos == 1)			// First node
				{
					memcpy(pData, pCurr, sizeof(TEC_DATA_INFO));
					ptecList -> pData = pCurr -> pNext;
				}
				else
				{
					memcpy(pData, pCurr, sizeof(TEC_DATA_INFO));
					pPrev -> pNext = pCurr -> pNext;
				}
				ptecList -> nNum--;
				break;
			}
			pPrev = pCurr;
			pCurr = pCurr -> pNext;
		}
	}
	return TRUE;
}


BOOL __stdcall tecListFind(
	TEC_LINKLIST strutecList,
	TEC_DATA_INFO *pData,
	int *pnPos,
	DWORD *pdwErrCode)
{
	int nCurPos = 0;
	TEC_DATA_INFO *pCurr;

	*pdwErrCode = 0;
	pCurr = (TEC_DATA_INFO*)calloc(1, sizeof(TEC_DATA_INFO));
	pCurr = strutecList.pData;

	if (*pnPos < 0)			// node data
	{
		while (pCurr)
		{
			nCurPos++;
			if (pCurr -> nVal == pData -> nVal)
			{
				*pnPos = nCurPos;
				break;
			}
			pCurr = pCurr -> pNext;
		}
	}
	else
	{
		if ((*pnPos == 0) || (strutecList.nNum < *pnPos))		// Last node
			*pnPos = strutecList.nNum;

		while (pCurr)
		{
			nCurPos++;
			if (nCurPos == *pnPos)
			{
				memcpy(pData, pCurr, sizeof(TEC_DATA_INFO));
				break;
			}
			pCurr = pCurr -> pNext;
		}
	}
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -