假如你的C语言程序里面有很多链表,那么对链表的操作还是每个数据结构对应一组函数吗?这就显得你的代码不够高级了,以下是对双向环状链表操作,实现方法仅仅写了两个,完全可以用你智慧的大脑,续写!
Link.h
#ifndef _LINK_H_
#define _LINK_H_
#define POINT_TEST(STRUCT_TYPE) \
STRUCT_TYPE *prve; \
STRUCT_TYPE *next; \
#ifdef __cplusplus
extern "C"
{
#endif
struct STemp
{
POINT_TEST(struct STemp)
};
int Init(void* pNode);
int AddlinkNode(void* pNode, void* pNext);
#ifdef __cplusplus
}
#endif
#endif // !_LINK_H_
Link.c
#include "Link.h"
#include <stdio.h>
int Init(void* pNode)
{
if (!pNode) return -1;
((struct STemp*)pNode)->next = pNode;
((struct STemp*)pNode)->prve = pNode;
return 0;
}
int AddlinkNode(void* pNode, void* pNext)
{
if (!pNode || !pNext) return -1;
((struct STemp*)pNext)->next =
((struct STemp*)pNode)->next;
((struct STemp*)pNext)->next->prve = pNext;
((struct STemp*)pNode)->next = pNext;
((struct STemp*)pNext)->prve = pNode;
return 0;
}
熟练对宏的使用,深入对指针的理解,将有助于你的代码水平的提升