链表初始化总结

顺序表:

声明: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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值