/* 双向单循链表的创建、尾部插入节点、节点删除、指定位置插入节点、向前遍历、向后遍历. */
#include <stdio.h>
#undef NULL
#define NULL (0)
#define LIST_NODE_MAX_NUM (256)
/* 双向链表节点 */
typedef struct tagNode
{
union
{
int iData; /* data, 数据节点使用 */
unsigned int uiLen; /* node count, 首部节点使用 */
};
tagNode* pstPrev;
tagNode* pstNext;
}NODE_ST;
typedef struct
{
NODE_ST astNodeBuf[LIST_NODE_MAX_NUM];
}LIST_MGR_ST;
LIST_MGR_ST gstMgr;
int main(int args, char *argv[])
{
NODE_ST* pstNodeEmpty = gstMgr.astNodeBuf;
NODE_ST* pstVisit = NULL;
/* 创建链表(首部节点做统计链表长度使用, 首部节点不是第一个数据节点, 尾部节点是最后一个数据节点) */
NODE_ST *pstHead;
NODE_ST *pstTail;
pstHead = pstNodeEmpty++;
pstTail = pstHead;
pstHead->pstPrev = NULL;
pstHead->pstNext = NULL;
pstHead->uiLen = 0;
#define FOREACH_NODE_BACKWARD(pstNode) for((pstNode) = pstHead->pstNext; (pstNode); (pstNode) = (pstNode)->pstNext)
#define FOREACH_NODE_FORWARD(pstNode) for((pstNode) = pstTail; (pstNode) != p
【链表】双向单循链表:链表创建、尾部插入节点、节点删除、指定位置插入节点、向前遍历、向后遍历。
最新推荐文章于 2021-12-23 21:13:13 发布