冒泡排序首先需要知道排序的个数,而Linux内核提供了一个遍历的宏,所以我们只需要定义一个int型的变量n,用来存放个数,然后用这个遍历的宏就可以计算出链表中节点的个数。
首先Linux内核会提供一个结构体,用来存放前后节点地址的。然后我们直接定义一个存放数据的结构体和一个存放这两个结构体的结构体。
//Linux内核中提供的结构体
/*struct list_head{
struct list_head *next,*prev;
};*/
//自己定义的结构体
typedef struct Node{
Data_type info;//存放数据的结构体
struct list_head member;
}Node_list,*pNode_list;
pNode_list pos,node;//定义两个大结构体指针变量
Data_type mid;//定义一个存放数据的结构体变量,用来将比较后的数据之间互换
int i, j, n=0;//i,j是冒泡排序的变量,n是存放链表中节点的个数
//利用遍历宏来确定链表中节点个数
list_for_each_entry(pos, &p->member, member) {
n++;
}
//冒泡排序
for(i=0;i<n-1;i++){
//在每次循环前将pos指向有数据的第一个节点
pos=list_entry(p->member.next,Node_list,member);
for(j=0;j<n-1-i;j++){
//将node一直保持是pos的下一个节点
node=list_entry(pos->memb