链表在C语言项目中很常见,学号链表,先从单链表开始,通常在学习阶段的单链表实现是基于某种数据类型或结构量身定做的操作方法,这种方法,没有通用性,在实际项目开发中,段不可取。于是乎,学习一种“浮云”般对单链表的操作是非常重要的。我们研究各个数据结点的数据,就会发现,无论它是什么类型,都有一个共同的特点,就是,他们都是存储在内存中的,它们拥有各子唯一的内存地址,于是乎,我们使用单链表的每个结点存储目标数据的地址,就可以抽象出一种通用的单链表操作方法,具体的操作方法,如下,此代码支持任何数据类型的单链表操作:
/**********************************************************************************************/
file : LinkList.h
-
#ifndef _LINKLIST_H_
-
#define _LINKLIST_H_
-
-
typedef void LinkList;
-
typedef void LinkListNode;
-
-
extern LinkList* LinkList_Create();
-
-
extern void LinkList_Destroy(LinkList* list);
-
-
extern void LinkList_Clear(LinkList* list);
-
-
extern int LinkList_Length(LinkList* list);
-
-
extern int LinkList_Insert(LinkList* list, LinkListNode* node, int pos);
-
-
extern LinkListNode* LinkList_Get(LinkList* list, int pos);
-
-
extern LinkListNode* LinkList_Delete(LinkList* list, int pos);
-
-
extern void LinkList_Reverse(LinkList* list);
-
-
#endif
/*******************************************************************************************************/
file : LinkList.c
-
-
void LinkList_Reverse(LinkList* list)
-
{
-
if(LinkList_Length(list) >= 2)
-
{
-
TLinkList* sList = (TLinkList*)list;
-
LinkList* swapList = LinkList_Create();
-
while(sList->header != NULL)
-
{
-
LinkList_Insert(swapList, LinkList_Delete(list, 0), 0);
-
}
-
-
-
sList->header = ((TLinkList*)swapList)->header;
-
sList->length = ((TLinkList*)swapList)->length;
-
((TLinkList*)swapList)->header = NULL;
-
((TLinkList*)swapList)->length = 0;
-
LinkList_Destroy(swapList);
-
}
-
}
-
#endif
阅读(460) | 评论(0) | 转发(0) |