当前位置: 首页 > news >正文

福建福州建设局网站石家庄24号解封通知

福建福州建设局网站,石家庄24号解封通知,wordpress 谷歌字体解决,只有图文的网站如何做不一样的双向链表 链表初识别遍历双向链表参考链接 链表初识别 最近看openharmony的内核源码时看到一个有意思的双向链表#xff0c;结构如下 typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev; //前驱节点struct LOS_DL_LIST *pstNext; //后继节点 }LOS_DL_LIST;不… 不一样的双向链表 链表初识别遍历双向链表参考链接 链表初识别 最近看openharmony的内核源码时看到一个有意思的双向链表结构如下 typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev; //前驱节点struct LOS_DL_LIST *pstNext; //后继节点 }LOS_DL_LIST;不知道大家看上面的结构体有没有发现诡异的地方 没错这个双向链表咋没有数据呢 其实LOS_DL_LIST不能单独拿来用他需要放置于内容结构体上如下图 现在有个任务给你一个LOS_DL_LIST如何获得内容结构体的首地址? 具体如何做我们看看下面的两个宏并结合实际的例子来进行分析 typedef unsigned long UINTPTR; //获取指定结构体内的成员相对于结构体起始地址的偏移量 #define LOS_OFF_SET_OF(type, member) ((UINTPTR)((type *)0)-member)//根据结构体成员地址、结构体类型、结构体成员名推出结构体的首地址并强制转换 #define LOS_DL_LIST_ENTRY(item, type, member) \((type *)((void*)((char*)(item) - LOS_OFF_SET_OF(type, member))))LOS_OFF_SET_OF的用法可以看看我的这篇博客:c语言取结构体的偏移量 #include iostream #includestring #includestring.h using namespace std; typedef unsigned long UINTPTR;//获取指定结构体内的成员相对于结构体起始地址的偏移量 #define LOS_OFF_SET_OF(type, member) ((UINTPTR)((type *)0)-member)//根据结构体成员地址、结构体类型、结构体成员名推出结构体的首地址并强制转换 #define LOS_DL_LIST_ENTRY(item, type, member) \((type *)((void*)((char*)(item) - LOS_OFF_SET_OF(type, member))))typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev;struct LOS_DL_LIST *pstNext; }LOS_DL_LIST;//定义一个简单的结构体 typedef struct Book{char name[20];char author[20];double price;LOS_DL_LIST otherBook;} Book;//输出结构体信息 void print_book(Book *book){cout书名:book-name ,作者:book-author ,价格:book-priceendl; }int main(){Book book {三国演义, 罗贯中,100.5};Book * book_ LOS_DL_LIST_ENTRY(book.otherBook,Book,otherBook);cout(book_ book)endl;print_book(book);print_book(book_); }从上面的结果可以看出使用LOS_DL_LIST_ENTRY也是可以获得内容结构体的首地址 遍历双向链表 直接看我写的demo吧 #include iostream #includestring #includestring.h using namespace std; typedef unsigned long UINTPTR;//获取指定结构体内的成员相对于结构体起始地址的偏移量 #define LOS_OFF_SET_OF(type, member) ((UINTPTR)((type *)0)-member)//根据结构体成员地址、结构体类型、结构体成员名推出结构体的首地址并强制转换 #define LOS_DL_LIST_ENTRY(item, type, member) \((type *)((void*)((char*)(item) - LOS_OFF_SET_OF(type, member))))typedef struct LOS_DL_LIST{struct LOS_DL_LIST *pstPrev;struct LOS_DL_LIST *pstNext; }LOS_DL_LIST;//定义一个简单的结构体 typedef struct Book{char name[20];char author[20];double price;LOS_DL_LIST otherBook;} Book;//输出结构体信息 void print_book(Book *book){cout书名:book-name ,作者:book-author ,价格:book-priceendl; } //头插法添加节点 void LOS_ListAdd(LOS_DL_LIST *list, LOS_DL_LIST *node) {node-pstNext list-pstNext;node-pstPrev list;list-pstNext-pstPrev node;list-pstNext node; } //初始化头节点 void LOS_ListInit(LOS_DL_LIST *list) {list-pstNext list;list-pstPrev list; }//定义一个节点并初始化为双向链表节点 #define LOS_DL_LIST_HEAD(list) LOS_DL_LIST list { (list), (list) }//获取双向链表中指定链表节点的下一个节点所在的结构体地址。 //接口的第一个入参表示的是链表中的头节点第二个入参是指定的链表节点 //第三个入参是要获取的结构体名称第四个入参是链表在该结构体中的名称。 //如果链表节点下一个为链表头结点为空返回NULL。 #define LOS_ListNextType(list, item, type, element) ({ \type *__t; \if ((item)-pstNext list) { \__t NULL; \} else { \__t LOS_DL_LIST_ENTRY((item)-pstNext, type, element); \} \__t; \ })//获取双向链表中第一个链表节点所在的结构体地址接口的第一个入参表示的是链表中的头节点 //第二个入参是要获取的结构体名称第三个入参是链表在该结构体中的名称。如果链表为空返回NULL。 #define LOS_ListPeekHeadType(list, type, element) ({ \type *__t; \if ((list)-pstNext list) { \__t NULL; \} else { \__t LOS_DL_LIST_ENTRY((list)-pstNext, type, element); \} \__t; \ }) ///遍历双向链表并存储当前节点的后继节点用于安全校验 #define LOS_DL_LIST_FOR_EACH_SAFE(item, next, list) \for (item (list)-pstNext, next (item)-pstNext; \(item) ! (list); \item next, next (item)-pstNext)//遍历双向链表 #define LOS_DL_LIST_FOR_EACH(item, list) \for (item (list)-pstNext; \(item) ! (list); \item (item)-pstNext)//遍历指定双向链表获取包含该链表节点的结构体地址并存储包含当前节点的后继节点的结构体地址 #define LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, next, list, type, member) \for (item LOS_DL_LIST_ENTRY((list)-pstNext, type, member), \next LOS_DL_LIST_ENTRY((item)-member.pstNext, type, member); \(item)-member ! (list); \item next, next LOS_DL_LIST_ENTRY((item)-member.pstNext, type, member)) void initBook(LOS_DL_LIST *head){Book *book1 (Book*)malloc(sizeof(Book)); //堆上分配Book *book2 (Book*)malloc(sizeof(Book));Book *book3 (Book*)malloc(sizeof(Book));Book *book4 (Book*)malloc(sizeof(Book));memset(book1,0,sizeof(Book));memset(book2,0,sizeof(Book));memset(book3,0,sizeof(Book));memset(book4,0,sizeof(Book));strcpy(book1-author,罗贯中);strcpy(book1-name,三国演义);book1-price 45.99;strcpy(book2-author,曹雪芹);strcpy(book2-name,红楼梦);book2-price 30.3;strcpy(book3-author,吴承恩);strcpy(book3-name,西游记);book3-price 50.38;strcpy(book4-author,施耐庵);strcpy(book4-name,水浒传);book4-price 66.3;LOS_ListAdd(head,(book1-otherBook));LOS_ListAdd(head,(book2-otherBook));LOS_ListAdd(head,(book3-otherBook));LOS_ListAdd(head,(book4-otherBook));LOS_DL_LIST *item NULL;LOS_DL_LIST *next NULL;LOS_DL_LIST_FOR_EACH_SAFE(item, next, head){Book *bookbook LOS_DL_LIST_ENTRY(item,Book,otherBook);print_book(bookbook);} } int main(){LOS_DL_LIST *head (LOS_DL_LIST*)malloc(sizeof(LOS_DL_LIST));LOS_ListInit(head);initBook(head);cout\n;LOS_DL_LIST pBook;LOS_ListInit(pBook);Book book {三国演艺, 罗贯中,100.5};Book book1 {红楼梦, 曹雪芹,200.5};Book book2 {西游记, 吴承恩,150.1};Book book3 {水浒传, 施耐庵,180.4};Book * book_ LOS_DL_LIST_ENTRY(book.otherBook,Book,otherBook);cout(book_ book)endl;LOS_ListAdd(pBook,(book.otherBook));LOS_ListAdd(pBook,(book1.otherBook));LOS_ListAdd(pBook,(book2.otherBook));LOS_ListAdd(pBook,(book3.otherBook));cout获取双向链表下一个数据节点:\n;Book *b LOS_ListNextType(pBook, book3.otherBook, Book, otherBook);if(b ! NULL)print_book(b);cout获取双向链表下一个数据节点结束\n\n;cout获取双向链表第一个数据节点:\n;Book *firstBook LOS_ListPeekHeadType(pBook,Book,otherBook);print_book(firstBook);cout获取双向链表第一个数据节点结束\n\n;coutwhile 遍历\n;LOS_DL_LIST *book_item pBook.pstNext;while(book_item ! pBook){Book *bookbook LOS_DL_LIST_ENTRY(book_item,Book,otherBook);print_book(bookbook);book_item book_item-pstNext;}coutwhile 遍历结束\n\n;cout宏定义遍历\n;LOS_DL_LIST* item NULL;LOS_DL_LIST*next NULL;LOS_DL_LIST_FOR_EACH_SAFE(item, next, pBook){Book *bookbook LOS_DL_LIST_ENTRY(item,Book,otherBook);print_book(bookbook);}cout宏定义遍历结束\n\n;coutfor each 遍历\n;LOS_DL_LIST_FOR_EACH(item,pBook){Book *bookbook LOS_DL_LIST_ENTRY(item,Book,otherBook);print_book(bookbook);}coutfor each 遍历结束\n\n\n;Book* book_item_item NULL;Book* book_next NULL;LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(book_item_item, book_next, pBook, Book, otherBook){print_book(book_item_item);}}参考链接 http://weharmonyos.com/blog/01.html
http://www.hkea.cn/news/14376779/

相关文章:

  • 河南郑州网站制作别人用我的备案信息做网站
  • 彩票网站开发制作需要什么图片编辑器在线制作
  • 蒙icp备网站建设阿里云wordpress在哪里设置
  • 网站建设推广是什么工作wordpress未验证邮箱用户
  • 顶呱呱网站开发广东模板网站建设
  • 青岛公司做网站深圳市建设网
  • 优建网站网站上的文章经常修 内容对seo有影响吗
  • 网站开发开发公司排名北京如何优化搜索引擎
  • 潍坊网站模板在哪深圳在线直播
  • 全网营销型网站建设公司弄一个公司官网要怎么弄
  • 陕西省城乡建设厅官方网站百度快速排名培训
  • 搭建网站要不要给域名对方好玩的页游
  • 房子如何上网站做民宿动漫设计培训机构哪里好
  • 汉字叔叔花了多少钱做网站中国建设银行官方网站纪念币预约
  • 电子商务网站建设的核心硬件机械行业网站建设
  • 谷歌网站优化推广珠海网站建设 骏域网站
  • 网站首页导航怎么做二级导航徐州鼓楼区建设网站
  • 员工入职 在哪个网站做招工做网站一般要多少钱
  • 石排网站仿做《小城镇建设》》杂志社网站
  • 网站建设需要什么教材网站建设方案开发
  • 建站一条龙设计制作购物网站的经营要素
  • 湖南网站建设价格费用wordpress销售主题
  • 服装网站设计欣赏网站错误代码301
  • 查网站备案名称南京网站公司哪家好
  • 中山网站排名net域名网站
  • 制造业网站建设系统管理软件下载
  • 音乐影视网站建设方案威海市城乡建设局网站
  • 公司网站建设 目录宁波高端网站制作公司
  • 商城网站建设的优势微信公众号制作编辑器
  • 做单页网站的软件潜江资讯网房屋出售