链式存储结构
在C语言中可以用结构体来定义链表中的指针域
链表中的表头节点也可以用结构体实现
//1.结点指针定义
typedef void LinkList;
typedef struct _tag_LinkListNode LinkListNode;
struct _tag_LinkListNode
{
LinkListNode* next;
};
//2.头结点定义
typedef struct _tag_LinkList
{
LinkListNode header;
int length;
} TLinkList;
//3.数据元素定义示例
struct Value
{
LinkListNode header;
int v;
};
链表的接口函数:
LinkList.h
/*********************************************************************/
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
typedef void LinkList;
typedef struct _tag_LinkListNode LinkListNode;
struct _tag_LinkListNode
{
LinkListNode* next;
};
LinkList* LinkList_Create(); //创建
void LinkList_Destroy(LinkList* list); //销毁
void LinkList_Clear(LinkList* list); //清除
int LinkList_Length(LinkList* list); //长度
int LinkList_Insert(LinkList* list, LinkListNode* node, int pos); //增加
LinkListNode* LinkList_Get(LinkList* list, int pos); //查询
LinkListNode* LinkList_Delete(LinkList* list, int pos); //删除
#endif
接口的实现
#include <stdio.h>
#include <malloc.h>
#include "LinkList.h"
typedef struct _tag_LinkList //0.头结点的创建
{
LinkListNode header;
int length;
} TLinkList;
//1.链表的创建
LinkList* LinkList_Create() // O(1) (typedef void LinkList;)
{
TLinkList* ret = (TLinkList*)malloc(sizeof(TLinkList)); //1.创建头结点
if( ret != NULL ) //2.初始化
{
ret->length = 0;
ret->header.next = NULL;
}
return ret;
}
void LinkList_Destroy(LinkList* list) // O(1)
{
free(list)