看到一个程序员说他的梦想是活过40岁,另一个说他的梦想是活过今年,不知道他们有没有结婚。。。。
今天就只贴一下自己修改的跳跃链表的代码,因为逻辑我自己也不是很懂。。。
先看一下自定义的结构体
typedef struct Skip_Node
{
int value;
struct Skip_Node* forward[1];//越界访问 下标为几就是指向第几层的指针
}Skip_Node;
typedef Skip_Node* PSkip_Node;
typedef struct Skip_List
{
int level;
PSkip_Node header;
}Skip_List;
typedef Skip_List* PSkip_List;
链表节点有一个value成员用来存储数据,一个指针数组forward,这里的下标后面就当做节点所在的层数
跳跃链表初始化
PSkip_List create_List()
{
int i;
PSkip_List list = (PSkip_List)malloc(sizeof(Skip_List));
list->level = 0;
list->header = create_Node(MAX_Level-1,0); //头结点指针指向各层开始节点 下边遍历时,按有头结点的性质编写 头结点一定要有三个指针自相三层节点,所以传入max_level-1
for(i=0;i<MAX_Level;i++)
{
list->header->forward[i] = NULL;//初始化三层节点都为空
}
return list;
}
跳跃链表初始链表层数为0,即只有1层,头结点指针header=create_Node(MAX_Level-1,0);即是创建三层,每层的头结点都赋值为null,用一张图就可以看出跳跃链表的结构
根据这张图理解一下如何创建跳跃链表的一个节点
PSkip_Node create_Node(int level,int value)
{
PSkip_Node node = (PSkip_Node)malloc(sizeof(Skip_Node) + level*(sizeof(PSkip_Node)