链表初始化总结

顺序表:

声明:struct seqlist

{

Int last;

Int data[12];

}seq,*seqlist;

初始化

seqlist init_seqlist()

{

seqlist sl = malloc(sizeof(seq));

sl->last =-1;//标记位,用于判断是表头还是表尾

return sl;

}

插入操作(判断是否满,定位,移位(从后开始移),插入);

删除操作(判断是否为空,定位,移位,从定位的位置开始移);

------------------------

单链表:

声明:typedef struct node

{

lnt data;

struct node *next;

}listnode,*linklist;

初始化:

  1. 不带表头:

linklist init_list()

{

linklist L = NULL;

return L;

}

  1. 带表头(较常用)

linklist init_list()

{

linklist L =malloc(sizeof(listnode));

L->next =NULL;

return L;

}

插入操作(产生一个新节点,定位,插入新节点)

删除操作(判断是否为空,定位,删除节点)

反转操作:

linklist p,q;

p=L->next;

L->next = NULL;//将链表断开

while(p!=NULL)

{

q = p->next;

p->next = L->next;

L->next = p;不断在L的后面循环插入pp的下个节点

p = q;

}

----------------------------------------

单向循环链表:

声明:typedef struct node

{

int data;

struct node *next;

}listnode,*linklist;

初始化:

  1. 不带头

linklist init_list()

{

linklist L =NULL;

return L;

}

  1. 带头节点

linklist init_list()

{

linklist L =malloc(sizeof(listnode));

L->next = L;

return L;

}

不带头,插入操作(产生新节点,判断是否为空,如果为空*l = new,new->next=new,否则插入节点)注意因为有对l操作,所以注意取地址。Linklist l 是个变量而不是指针,只有*l才是指针。

删除操作(类似于单链表);

-------------------------------

双向循环链表:

声明:

typedef struct node()

{

int data;

struct node *next,*prve;

}linknode,*linklist;

初始化:

linklist init_list()

{

linklist L = malloc(sizeof(listnode));

L->next = L;

L->prve = L;

return L

}

插入操作:(产生新节点,定位,插入)

尾部插入,中间插入只需将L改成p;

new->n=L;

new->p = L->p;

L->p->n = new;

L->p=new; 

删除操作:

p0->p->n = p0->n;

p0->n->p = p0->p;

p0->n = p0->p = NULL;

奇偶排序:将以上两个结合。注意记录q=p->prev;方便节点向前移;

内核链表:类型无关的双向循环链表。(内核链表节点包含在宿主节点中):

原文地址:https://www.cnblogs.com/defen/p/5204800.html