博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言List头文件和应用
阅读量:4162 次
发布时间:2019-05-26

本文共 3848 字,大约阅读时间需要 12 分钟。

util_list.h
#ifndef __UTIL_LIST__#define __UTIL_LIST__/*双链节点*/typedef struct list_node{	list_node * prev;	list_node * next;} LIST_NODE;/*单链节点*/typedef struct slist_node{	slist_node * next;} SLIST_NODE;#define lst_offsetof( type, member )  ( unsigned int )( &((type*)0)->member )/* 初始化双链节点*/#define lst_init( list )       { (list)->next = (list)->prev = list; }/* 判断双链是否为空,1:为空,0:不为空 */#define lst_empty( list )      ( ( (list) == (list)->next ) ? 1 : 0 )/* 在链表list头部增加节点 */#define lst_add(list, node)    { (list)->next->prev = (node); (node)->next = (list)->next; (list)->next = (node); (node)->prev = (list); }/* 在链表list尾部增加节点 */#define lst_insert(list, node) { (list)->prev->next = (node); (node)->prev = (list)->prev; (list)->prev = (node); (node)->next = (list); }/* 删除双链节点 */#define lst_del(node)          { (node)->prev->next = (node)->next; (node)->next->prev = (node)->prev; }/* 从双链节点得到实例节点 */#define lst_entity(node, type, member) ((type*)((char *)(node) - lst_offsetof( type, member )))/* 初始化双链节点*/#define slst_init(list)              { (list)->next =  (list); }/* 判断单链是否为空,1:为空,0:不为空 */#define slst_empty(list)             (((list) == (list)->next ) ? 1 : 0 )/* 在链表list头部增加节点 */#define slst_add(list, node)         { (node)->next = (list)->next; (list)->next = (node); }/* 删除单链节点,prev是node的前节点,由调用者保证 */#define slst_del_prev( prev, node )  { (prev)->next = (node)->next; }/* 删除单链节点 */#define slst_del( node ) \{ \	slist_node * p    = (node)->next; \	slist_node * prev = (node); \    while (( node ) != p)\		{ prev = p; p = p->next; }\	slst_del_prev( prev, node );\}/* 从单链节点得到实例节点 */#define slst_entity(node, type, member) ((type*)((char *)(node) - lst_offsetof(type, member)))#endif  /* __UTIL_LIST__ */

实际应用

TestList2.cpp

// TestList2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "stdlib.h"#include "util_list.h"LIST_NODE   g_TestNodeList     = { 0 };SLIST_NODE  g_slstTestNodeList = { 0 };typedef struct test_node{	LIST_NODE  ltNeigbor;	SLIST_NODE sltNeigbor;	int test_number;} TEST_NODE;int _tmain(int argc, _TCHAR* argv[]) {	lst_init(&g_TestNodeList);	slst_init(&g_slstTestNodeList);	TEST_NODE * pstTestNode1 = (TEST_NODE *)malloc(sizeof(TEST_NODE));	pstTestNode1->test_number = 100;		lst_add( &g_TestNodeList, &(pstTestNode1->ltNeigbor));	//lst_insert(&g_TestNodeList, &(pstTestNode1->ltNeigbor));	slst_add(&g_slstTestNodeList, &(pstTestNode1->sltNeigbor));	TEST_NODE * pstTestNode2 = (TEST_NODE *)malloc(sizeof(TEST_NODE));	pstTestNode2->test_number = 101;	//lst_add( &g_TestNodeList, &(pstTestNode2->ltNeigbor));	lst_insert(&g_TestNodeList, &(pstTestNode2->ltNeigbor));	slst_add(&g_slstTestNodeList, &(pstTestNode2->sltNeigbor));	TEST_NODE * pstTestNode3 = (TEST_NODE *)malloc(sizeof(TEST_NODE));	pstTestNode3->test_number = 102;	lst_add(&g_TestNodeList, &(pstTestNode3->ltNeigbor));	//lst_insert(&g_TestNodeList, &(pstTestNode3->ltNeigbor));	slst_add(&g_slstTestNodeList, &(pstTestNode3->sltNeigbor));	LIST_NODE * pHead = &g_TestNodeList;	LIST_NODE * pNext = pHead->next;	while ( pNext != pHead )	{		TEST_NODE * pstTestNode100 = lst_entity( pNext, TEST_NODE, ltNeigbor );			lst_del(&( pstTestNode100->ltNeigbor ));		pNext = pNext->next;	}	if (lst_empty( &g_TestNodeList ))	{		printf( "test ok" );	}	SLIST_NODE * psltHead = &g_slstTestNodeList;	SLIST_NODE * psltNext = psltHead->next;	SLIST_NODE * psltPrev = psltHead;	while ( psltNext != psltHead )	{		TEST_NODE * pstTestNode101 = slst_entity( psltNext, TEST_NODE, sltNeigbor);		if ( pstTestNode101->test_number == 102 )		{			slst_del_prev(psltPrev, &(pstTestNode101->sltNeigbor));		}		else		{			psltPrev = psltNext;		}		psltNext = psltNext->next;	}	slst_del( &( pstTestNode1->sltNeigbor ));	slst_del( &( pstTestNode2->sltNeigbor ));	if (slst_empty( &g_slstTestNodeList ))	{		printf("test2 ok");	}	free( pstTestNode1 );	free( pstTestNode2 );	free( pstTestNode3 );	return 0;}

转载地址:http://htixi.baihongyu.com/

你可能感兴趣的文章
笔记--数组扁平化
查看>>
百度编辑器(ueditor)魔改:1、增加自定义按钮
查看>>
百度编辑器(ueditor)魔改:2、彻底接管文件上传
查看>>
百度编辑器(ueditor)魔改:3、高亮提示、搜索(广告词、违禁词等)
查看>>
百度编辑器(ueditor)魔改:5、自定义一键排版(按照需求保留标签和样式)
查看>>
百度编辑器(ueditor)魔改:4、滚动条管理(scrollTop,scrollTo)
查看>>
绕开在包含外部引用的被聚合表达式中指定了多个列
查看>>
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
sqlserver使用clr调用ajax,在数据库内请求外部链接
查看>>
使用c#捕获usb扫描枪扫描二维码、条形码结果(支持中文版)
查看>>
Sql 语句小课堂1:99乘法表
查看>>
Sql 语句小课堂2:获取指定记录相邻的记录
查看>>
Sql 语句小课堂3:求不超过指定值的最大数字和
查看>>
Sql 语句小课堂4:统计所属分类及其子分类的内容
查看>>
Sql 语句小课堂5:日期的计算及应用
查看>>
如何在无限级分类表中,定位准确的分类项(一:准备数据库表信息)(以城市地域为例)(mssql)
查看>>
如何在无限级分类表中,定位准确的分类项(二:尝试匹配信息)(以城市地域为例)(mssql)
查看>>
如何在无限级分类表中,定位准确的分类项(三:尝试处理匹配结果)(以城市地域为例)(mssql)
查看>>
如何在无限级分类表中,定位准确的分类项(四:使用表变量来实现自定义函数)(以城市地域为例)(mssql)
查看>>
如何在无限级分类表中,定位准确的分类项(五:使用变量存储正则代替地域表读取)(以城市地域为例)(mssql)
查看>>