c语言List头文件和应用
来源:互联网 发布:淘宝茶具套装 编辑:程序博客网 时间:2024/06/05 20:28
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;}
阅读全文
0 0
- c语言List头文件和应用
- C语言编写头文件及应用
- c 语言头文件和源文件
- C语言:min和max头文件
- c语言头文件
- C语言头文件
- C语言头文件
- C语言头文件
- C语言头文件
- C语言头文件
- C语言头文件
- c 语言头文件
- C语言头文件
- c语言头文件
- c语言头文件
- c语言头文件
- C语言 头文件
- C语言头文件
- Jquery微型架构:requestBody网络请求的模式与自定义协议的封装
- 子网掩码,网络号,主机号 计算问题。
- fileinput.js在上传文件时提交表单数据
- 再不会nginx你就out了
- 《A Sub-Pixel Edge Detector: an Implementation of the Canny/Devernay Algorithm》
- c语言List头文件和应用
- Struts学习03
- easyUI 显示加载中
- TCP传输图片及多线程
- 显式等待
- 用SQuirreL工具连接phoenix
- VC2010使用openssl-1.1.0f静态库时链接报错
- css3的书翻页技术
- Mysql的FIND_IN_SET的使用