首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

list.h库资料的分析与运用

2012-07-16 
list.h库文件的分析与运用?lish.h定义双向循环链表的的相关操作。具体的源码分析网上有很多,而且你自己通过

list.h库文件的分析与运用

?lish.h定义双向循环链表的的相关操作。具体的源码分析网上有很多,而且你自己通过阅读注释也可以看懂每个函数的具体功能。接下来就是list.h文件的运用:

由于list.h属于内核模块中的库文件(usr\src\linux-headers-version\include\linux\

而默认加载的是usr\include\下的库文件,不包含list.h

因此需要自己写一个库文件其中包含list.h中的函数

mylist.h

?

?

#include<stdio.h>#include<stdlib.h>#include"mylist.h"#include<string.h>struct userinfo{char username[20];char password[20];struct list_head list;};typedef struct userinfo UserStruct;int main(int argc,char *argv[]){char username[20],password[20];char flag[2]="#";UserStruct userlist,*user,*temp,*replacetest,*templist;struct list_head *pos,*p;//初始化双向循环链表INIT_LIST_HEAD(&(userlist.list));INIT_LIST_HEAD(&(templist->list));printf("please input your username and password:\n");scanf("%s",username);scanf("%s",password);getchar();//循环添加元素while(strcmp(username,flag) && strcmp(password,flag)){user=(struct userinfo*)malloc(sizeof(struct userinfo));strcpy(user->username,username);strcpy(user->password,password);list_add_tail(&(user->list),&(userlist.list));printf("please input your username and password:\n");scanf("%s",username);scanf("%s",password);getchar();}//利用一个新的节点替换第一个节点replacetest=(struct userinfo*)malloc(sizeof(struct userinfo));strcpy(replacetest->username,"username");strcpy(replacetest->password,"password");list_replace_init(userlist.list.next,&(replacetest->list));//将一个节点移动到双向循环链表末尾list_move_tail(userlist.list.next,&(userlist.list));//将一个节点移动到双向循环链表头list_move_tail(userlist.list.prev,&(userlist.list));if(list_is_last(&(replacetest->list),&(userlist.list))){printf("该节点是双向循环链表的最后一个节点\n");}if(!list_is_singular(&(userlist.list))){printf("该双向循环链表有多个节点\n");}//遍历双向循环链表printf("遍历双向循环链表\n");__list_for_each(pos,&(userlist.list)){temp=list_entry(pos,struct userinfo,list);printf("用户名:%s 密码:%s\n",temp->username,temp->password);}/*//双向循环链表的切割list_cut_position(&(templist->list),&(userlist.list),userlist.list.next);//遍历切割的双向循环链表printf("遍历切割的双向循环链表\n");__list_for_each(pos,&(templist->list)){temp=list_entry(pos,struct userinfo,list);printf("用户名:%s 密码:%s\n",temp->username,temp->password);}//合并链表__list_splice(&(templist->list),userlist.list.next,userlist.list.next->next);list_splice_init(&(templist->list),&(userlist.list));//遍历合并后双向循环链表printf("遍历合并后双向循环链表\n");__list_for_each(pos,&(userlist.list)){temp=list_entry(pos,struct userinfo,list);printf("用户名:%s 密码:%s\n",temp->username,temp->password);}*///释放内存资源list_for_each_safe(pos,p,&(userlist.list)){temp=list_entry(pos,struct userinfo,list);list_del(pos);free(temp);}if(list_empty(&(userlist.list))){printf("双向循环链表为空\n");}return 0;}

?

?

热点排行