linux中常用的数据结构之1

<<嵌入式linuxc语言开发>>笔记一

链表看书体会:

         链表有一个头指针变量,它存放一个地址,该地址指向一个元素.链表中的每一个元素称为结点”,每个结点都应包括两部分:用户需要用的实际数据和下一个结点的地址.

 

一般我们用结构体来定义链表:

Struct link_list

{

Int date;//数据域

Struct link_list *next;//存放下一个结点的地址;

};

单链表的unite:

Void merge_list(lnk_list list-a,link_list list_b,link_list*list_c)

{

       Link_list pa,pb,pc;

       Pa=link_a->next;

       Pb=link_b->next;

*list_c=pc=list_a;

While(pa&&pb)

{

If(pa->data<pb->data&&pb!=       null)

{

Pc->next=pa;//insert pa所指向的节点

Pc=pa;//pc指向新插入的节点

Pa=pa->next;//pa指向下一个结点

}

Else

{

Pc->next=pb;

Pc=pb;

Pb=pb->next;

}

Pc->next=pa?pa:pb;

}

双向链表:

Struct link_node

{

Element_type data;

Struct link_node *next;

Struct link_node *priv;

};

ARM Linux 内核链表使用实例:

Struct list_head{struct list_head *next,*prev;};可见内核的链表具备双链表的功能.linux,不是在链表的结构中包含数据,而是在数据结构中包含链表节点.这是由于链表的的数据类型差别很大,如果对每一种数据项类型都定义各自的链表结构,不利于抽象成公共的模板.

在链表中添加节点:

 

Static inline void __list_add(struct list_head *new,struct list_head *prev,struct list_head *next)

{

next->prev=new;//next节点的前面一个节点是new

new->next=next;//new的下一个结点是next

new->prev=prev;//new的前面一个节点是prev

prev->next=new;//prev的下一个节点是new

Prev

Next

Prev

Next

New

Prev

24

20

15

15

24

}

 

 

 

 

 

二叉树:

Struct –tree_node

{

Char data;

Struct tree_node *lchild;

Struct tree_node *rchild;

};

二叉树的顺序存储:其存储形式为用一组连续的存储单元按照二叉树的每个节点编号的顺序存放.

#define MAX_TREE_NODE_SIZE 100

typedef struct

{

Entry_type item[MAX_TREE_NODE_SIZE];

Int n;}qb_tree

二叉树的链式存储:

Typedef struct _bt_node

{

Entry-type item; struct bt_node *lchild,*rchild;

}bt_node,*b_tree;

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值