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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? listutilities.c

?? 通訊錄 C語言
?? C
字號:
#include "main.h"/*  =============================================================================== 	Author:		Hammer, May 2002, For www.cprogramming.com/cboard/ 	File:		ListUtilities.c 	Contents:	li_Create 				nd_Create 				nd_Destroy 				li_Traverse 				li_Insert 				li_Destroy 				li_GetDataPtrByID 				li_DeleteNodeAndData 				li_Count  ===============================================================================*//*  ===============================================================================    Function: 	li_Create    Args: 		None    Returns: 	NULL pointer.    Purpose:	Dummy function to start off a list.  =============================================================================== */struct Node *li_Create(void){	return (NULL);} /*  ===============================================================================    Function: 	nd_Create    Args: 		A void ptr to the data to be referenced (A record).    Returns: 	Pointer to new node, ready for insertion into the tree.    			NULL if malloc fails    Purpose:	Creates a single node, containing a pointer to some data (Record)  =============================================================================== */struct Node *nd_Create(void *ptr, struct Node *NextNode){	struct Node *newptr;	if ((newptr = malloc(sizeof(struct Node))) == NULL)	{		perror("nd_create, malloc");		return (NULL);	}	newptr->DataPtr = ptr;	newptr->Next = NextNode;	return(newptr);}/*  ===============================================================================    Function: 	nd_Destroy    Args: 		A pointer to a node to be free()'d    Returns: 	Nothing    Purpose:	The data the node points to is not freed by the function,     			only the node itself is.  =============================================================================== */void nd_Destroy(struct Node *ptr){	free(ptr);}/*  ===============================================================================    Function: 	li_Traverse    Args: 		A pointer to the first node in the list    			A pointer to a function used to process each node.    Returns: 	Number of Nodes processed    Purpose:	Traverse the list, sending each nodes data to a function  =============================================================================== */int li_Traverse(struct Node *List, FPTR_Action fptr_Action){	struct Node *Current = List;	int Count = 0;		while (Current)	{		fptr_Action(Current->DataPtr);		Count++;		Current = Current->Next;	}	return (Count);}/*  ===============================================================================    Function: 	li_Insert    Args: 		A pointer to the first node in the list    			A pointer to the data to be referenced by the node    			A pointer to a function to be used for comparison.    Returns: 	Pointer to the first node in the list    			NULL is nd_Create fails.    Notes:		The caller should use caution to ensure the List pointer    			is not lost if this function returns NULL.    Purpose:	Inserts a new node into the list in the correct sorted order.  =============================================================================== */struct Node *li_Insert(struct Node *List, void *NewData, FPTR_Compare fptr_Compare){	struct Node *newptr;	struct Node *Current = List;	struct Node *Previous = NULL;		while (Current)	{		if (fptr_Compare(Current->DataPtr, NewData) > 0)			break; /* Found the entry point */		Previous = Current; 		Current = Current->Next;	}		if ((newptr = nd_Create(NewData, Current)) == NULL)	{	/* malloc failure in nd_Create */		return (NULL);	}		if (Previous == NULL)		List = newptr;	else		Previous->Next = newptr;		gl_HighestID++;	return (List);}/*  ===============================================================================    Function: 	li_Destroy    Args: 		A pointer to the first node in the list    Returns: 	Nothing    Purpose:	This runs through the list, destroying nodes.  It does    			not free the data that each node points to.  =============================================================================== */struct Node *li_Destroy(struct Node *List){	struct Node *Current = List;	struct Node *tmp;		while (Current)	{		tmp = Current->Next;		nd_Destroy(Current);		Current = tmp;	}	gl_HighestID = 0;		return (NULL);}/*  ===============================================================================    Function: 	li_GetDataPtrByID    Args: 		A pointer to the first node in the list    			An int for the ID field.    Returns: 	Pointer to a Record struct, allowing direct access by the caller    Purpose:	Gets the address of a Record structure, as *owned* by the list.  ===============================================================================*/struct Record *li_GetDataPtrByID(struct Node *List, int ID){	struct Node *Current = List;	struct Record *rec;		while (Current)	{		rec = Current->DataPtr;		if (rec->ID == ID)			break;		Current = Current->Next;	}	return ((Current)?Current->DataPtr:NULL);}/*  ===============================================================================    Function: 	li_DeleteNodeAndData    Args: 		A pointer to the first node in the list    			A pointer to the data to be referenced by the node    			A pointer to a function to be used for comparison.    Returns: 	Pointer to the first node in the list    			NULL is nd_Create fails.    Notes:		The caller should use caution to ensure the List pointer    			is not lost if this function returns NULL.    Purpose:	As the function name says!  =============================================================================== */struct Node *li_DeleteNodeAndData(struct Node *List, void *CompareData, FPTR_CompareDelete fptr_Compare){	struct Node *Current = List;	struct Node *Previous = NULL;	struct Node *tmp;		while (Current)	{		if (fptr_Compare(Current->DataPtr, CompareData) > 0)		{	/* Found a node to remove */			if (Current == List) List = Current->Next;			tmp = Current->Next;			if (Previous)			{				Previous->Next = tmp;			}			free (Current->DataPtr);			free (Current);			Current = tmp;		}		else		{	/* No match, move on */			Previous = Current; 			Current = Current->Next;		}	}		return (List);}/*  ===============================================================================    Function: 	li_Count    Args: 		A pointer to the first node in the list    Returns: 	Number of Nodes in list    Purpose:	Counts the nodes.  =============================================================================== */int li_Count(struct Node *List){	struct Node *Current = List;	int Count = 0;		while (Current)	{		Count++;		Current = Current->Next;	}	return (Count);}/*  ===============================================================================    Function: 	li_Sort    Args: 		A pointer to the first node in the list    			Function pointer used for comparisons    Returns: 	None    Purpose:	Sorts the nodes, using the given function.  =============================================================================== */void li_Sort(struct Node *List,  FPTR_Compare fptr_Compare){	struct Node *Current, *Next;	void *Temp;	bool_t StillDoingSwaps = TRUE;		while (StillDoingSwaps == TRUE)	{		StillDoingSwaps = FALSE;		Current = List;		while (Current)		{			if ((Next = Current->Next) != NULL)			{				if (fptr_Compare (Current->DataPtr, Next->DataPtr) > 0)				{					Temp = Current->DataPtr;					Current->DataPtr = Next->DataPtr;					Next->DataPtr = Temp;					StillDoingSwaps = TRUE;				}			}			Current = Next;		}	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产二区国产一区在线观看 | 91一区二区三区在线观看| 男女激情视频一区| 丝袜亚洲另类丝袜在线| 一片黄亚洲嫩模| 亚洲黄色小说网站| 亚洲在线观看免费视频| 一区二区三区成人在线视频| 一区二区高清免费观看影视大全| 亚洲精品你懂的| 午夜日韩在线观看| 国产美女在线精品| 国内欧美视频一区二区| 国产乱子伦视频一区二区三区| 紧缚捆绑精品一区二区| 国产精品中文字幕欧美| 国产不卡一区视频| 99国产精品久久| 欧美性一二三区| 制服丝袜亚洲精品中文字幕| 日韩精品中文字幕一区| 久久久亚洲精品石原莉奈| 中文字幕免费在线观看视频一区| 日本一区二区三区视频视频| 亚洲欧美另类久久久精品2019| 亚洲欧美日韩国产综合在线| 亚洲一区二区三区爽爽爽爽爽| 午夜精品久久久久久久蜜桃app| 午夜国产精品影院在线观看| 久久草av在线| 成人午夜电影网站| 欧美私模裸体表演在线观看| 精品欧美一区二区久久| 国产精品水嫩水嫩| 亚洲国产精品影院| 黄色小说综合网站| 91在线云播放| 91精品国产麻豆| 国产精品午夜电影| 亚洲va韩国va欧美va| 久久精品久久精品| 91在线云播放| 精品国产91乱码一区二区三区| 国产欧美精品一区二区三区四区| 亚洲色图在线视频| 久久电影网站中文字幕| av资源站一区| 欧美一二三在线| 成人免费一区二区三区在线观看| 亚洲成人777| 国产成人精品综合在线观看 | 成人av电影免费在线播放| 在线观看91视频| 欧美精品一区二区三区在线| 日韩美女视频一区二区| 日韩av高清在线观看| 成人白浆超碰人人人人| 欧美一区二区三区播放老司机| 国产日产精品1区| 天天av天天翘天天综合网色鬼国产| 国产一区二区不卡| 欧美日本视频在线| 亚洲国产精品成人综合| 日韩成人午夜精品| 91美女蜜桃在线| 亚洲同性同志一二三专区| 日本不卡不码高清免费观看| 91在线视频网址| 久久众筹精品私拍模特| 亚瑟在线精品视频| 97久久超碰国产精品| 久久一二三国产| 日韩av午夜在线观看| 色狠狠一区二区| 欧美激情一二三区| 国产一区二区三区日韩| 91精品国产色综合久久| 亚洲猫色日本管| 国产99久久久精品| 久久蜜桃av一区精品变态类天堂| 亚洲第一激情av| 色噜噜狠狠成人中文综合| 国产日本亚洲高清| 国产乱人伦偷精品视频免下载| 欧美日韩一区二区三区不卡| 亚洲男同性恋视频| av激情亚洲男人天堂| 国产午夜精品久久| 久久99国产精品免费| 欧美精品日日鲁夜夜添| 亚洲一区二区三区国产| 91亚洲国产成人精品一区二区三 | 亚洲一区二区三区免费视频| 91香蕉视频mp4| 中文字幕成人网| 国产精品18久久久| 欧美成人一区二区三区片免费 | 欧美精品一卡两卡| 亚洲一区二区在线观看视频| 一本色道综合亚洲| 亚洲精品乱码久久久久久黑人| av不卡在线观看| 1024国产精品| 99久久夜色精品国产网站| 亚洲国产成人在线| www.久久精品| 亚洲欧美另类久久久精品 | 国产精品久久久久一区二区三区共 | 一区二区三区高清| 色噜噜狠狠色综合欧洲selulu| 亚洲欧美日韩国产中文在线| 91成人免费在线| 亚洲图片欧美色图| 欧美日韩国产综合一区二区| 性做久久久久久| 日韩写真欧美这视频| 久久成人羞羞网站| 欧美精品一区二区三区蜜桃视频| 麻豆成人久久精品二区三区红 | 欧美性生活一区| 亚洲国产日韩综合久久精品| 欧美午夜精品久久久久久孕妇| 亚洲成精国产精品女| 91.xcao| 狠狠色丁香婷婷综合| 国产欧美视频一区二区| av男人天堂一区| 亚洲成人免费视频| 精品国产一二三| 成人小视频在线观看| 日韩伦理免费电影| 欧美精品日韩一区| 91蜜桃视频在线| 午夜不卡av在线| 精品国产区一区| www.成人网.com| 日韩中文字幕亚洲一区二区va在线| 日韩美女一区二区三区| 成人一区二区在线观看| 一区二区三区免费看视频| 欧美一级黄色片| 成人99免费视频| 青青草国产成人av片免费| 国产日韩一级二级三级| 91福利视频在线| 老司机精品视频一区二区三区| 中文字幕乱码亚洲精品一区| 日本久久一区二区| 久久成人羞羞网站| 亚洲码国产岛国毛片在线| 日韩精品一区二区三区在线播放| 成人免费毛片aaaaa**| 午夜亚洲福利老司机| 久久精品无码一区二区三区| 在线亚洲免费视频| 精品午夜久久福利影院| 亚洲精品视频一区| 精品国产91久久久久久久妲己| 91在线观看美女| 国产一区在线不卡| 午夜精彩视频在线观看不卡| 国产欧美一区二区在线观看| 日本国产一区二区| 国产精品亚洲一区二区三区在线| 一区二区三区av电影| 久久精品亚洲精品国产欧美kt∨| 欧美亚洲国产一区二区三区va| 国产成人综合视频| 日韩精品成人一区二区三区| 亚洲天堂成人网| 久久久蜜桃精品| 69精品人人人人| 日本黄色一区二区| 国产不卡视频一区| 老司机精品视频导航| 亚洲成人在线网站| 亚洲乱码国产乱码精品精的特点| 久久综合狠狠综合久久激情| 在线播放91灌醉迷j高跟美女| 91色九色蝌蚪| 国产98色在线|日韩| 久久国内精品视频| 日韩主播视频在线| 亚洲国产精品久久久久秋霞影院 | 亚洲综合色成人| 国产精品盗摄一区二区三区| 久久午夜电影网| 日韩视频免费观看高清在线视频| 99re视频精品| 懂色av中文字幕一区二区三区| 久久精品国产亚洲a| 日韩精品乱码免费| 亚洲午夜一区二区| 亚洲男人天堂av网| 最新成人av在线| 中文字幕一区二区三区不卡| 国产欧美一区二区三区在线老狼| 欧美成人精品高清在线播放 | 日韩av中文在线观看| 肉丝袜脚交视频一区二区|