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;

 

 

 

 

 

你可能感兴趣的:(数据结构,linux,list,struct,tree,存储)