/************************************************************************ * * Copyright (C) 2003-2004 * Shenzhen SCADA Control Technology Co., Ltd. * All rights reserved. * * 实现双链表 * * 创建日期: 2004/01/10 * * $Id: list_entry.cpp,v 1.1.1.1 2006/07/05 07:31:43 jehu Exp $ * ***********************************************************************/ #include #include "list_entry.h" /* * 双向链表的操纵例程函数的实现 */ void Initialize_list_head ( list_entry_t * plist_head ) { plist_head->flink = plist_head->blink = plist_head; } /* * 判断双向链表是否为空 * * \retval 0 空链表 * \retval 非0 空链表 */ int is_list_empty ( list_entry_t * plist_head ) { return (int)(plist_head->flink == plist_head); } /* * 从双向链表的头部移取一个链表元素--与链表脱离链接关系 */ list_entry_t * remove_head_list ( list_entry_t * plist_head ) { list_entry_t * pHeadEntry = plist_head->flink; remove_entry_list ( plist_head->flink ); return pHeadEntry; } /* * 从双向链表的尾部移取一个链表元素--与链表脱离链接关系 */ list_entry_t * remove_tail_list ( list_entry_t * plist_head ) { list_entry_t * pHeadEntry = plist_head->blink; remove_entry_list ( plist_head->blink ); return pHeadEntry; } /* * 从双向链表中移取制定的链表元素--与链表脱离链接关系 */ void remove_entry_list ( list_entry_t * pEntry ) { list_entry_t * _EX_Blink = (list_entry_t *)0; list_entry_t * _EX_Flink = (list_entry_t *)0; _EX_Flink = pEntry->flink; _EX_Blink = pEntry->blink; _EX_Blink->flink = _EX_Flink; _EX_Flink->blink = _EX_Blink; } /* * 将一个链表元素从尾部插入到双向链表中 */ void insert_tail_list ( list_entry_t * plist_head, list_entry_t * pEntry ) { list_entry_t * _EX_Blink = (list_entry_t *)0; list_entry_t * _EX_ListHead = (list_entry_t *)0; _EX_ListHead = plist_head; _EX_Blink = _EX_ListHead->blink; pEntry->flink = _EX_ListHead; pEntry->blink = _EX_Blink; _EX_Blink->flink = pEntry; _EX_ListHead->blink = pEntry; } /* * 将一个链表元素从尾部插入到双向链表中 */ void insert_head_list ( list_entry_t * plist_head, list_entry_t * pEntry) { list_entry_t * _EX_Flink = (list_entry_t *)0; list_entry_t * _EX_ListHead = (list_entry_t *)0; _EX_ListHead = plist_head; _EX_Flink = _EX_ListHead->flink; pEntry->flink = _EX_Flink; pEntry->blink = _EX_ListHead; _EX_Flink->blink = pEntry; _EX_ListHead->flink = pEntry; }