• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            linux中的鏈表

            //include/linux/list.h
            struct list_head {                    
               
            struct list_head *next, *prev; 
            };


            #define LIST_HEAD_INIT(name) { &(name), &(name) }
            #define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)

            #define INIT_LIST_HEAD(ptr) do { \
                (ptr)->next = (ptr); (ptr)->prev = (ptr); \
            }
            while (0)

            static inline void __list_add(struct list_head * newnode,
                                             
            struct list_head * prev,
                                             
            struct list_head * next)
            {
                next->prev = newnode;
                newnode->next = next;
                newnode->prev = prev;
                prev->next = newnode;
            }

            //添加一個node
            static inline void list_add(struct list_head *newnode, struct list_head *head)
            {
                __list_add(newnode, head, head->next);
            }


            static inline void list_add_tail(struct list_head *newnode, struct list_head *head)
            {
                __list_add(newnode, head->prev, head);
            }

            static inline int list_empty(struct list_head *head)
            {
               
            return head->next == head;
            }

            static inline void __list_del(struct list_head * prev,
                                             
            struct list_head * next)
            {
                next->prev = prev;
                prev->next = next;
            }
            //刪除一個node
            static inline void list_del(struct list_head *entry)
            {
                __list_del(entry->prev, entry->next);
                entry->next = entry->prev =
            0;
            }

            #define list_for_each_safe(pos, n, head) \
               
            for (pos = (head)->next, n = pos->next; pos != (head); \
                    pos = n, n = pos->next)

            #define list_for_each(pos, head) \
               
            for (pos = (head)->next; pos != (head); \
                        pos = pos->next)

            #define list_entry(ptr, type, member) \
                ((type *)((
            char *)(ptr)-(unsigned long)(&((type *)0)->member)))

            /*******************************
            **
            指針ptr指向結構體type中的成員member
            **
            通過指針ptr,返回結構體type的起始地址
                        type

                    |----------|
                    |           |
                    |           |
                    |----------|
            ptr-->| member --|
                    |----------|
                    |              |
                    |              |
                    |----------|
            ********************************/


            //test_list.c

            #include <stdio.h>
            #include <stdlib.h>

            //#include
            "ilist.h"


            struct my_list{
               
            struct list_head list;
               
            char value[10];
            };

            int main(int argc, char **argv){
               
               
            struct my_list *tmp;
               
            struct list_head *pos, *q;
                unsigned
            int i;
               
               
            struct my_list mylist;
                INIT_LIST_HEAD(&mylist.list);
            /*初始化鏈表頭*/
               
               
            /* mylist增加元素 */
               
            for(i=3; i!=0; --i){
                    tmp= (
            struct my_list *)malloc(sizeof(struct my_list));
                   
                   
            /* 或者INIT_LIST_HEAD(&tmp->list); */
                    printf(
            "enter value:");
                    scanf(
            "%s", tmp->value);
                   
                   
                    list_add(&(tmp->list), &(mylist.list));
                   
            /* 也可以用list_add_tail() 在表尾增加元素*/
                }
                printf(
            "\n");
               
                printf(
            "traversing the list using list_for_each()\n");
                list_for_each(pos, &mylist.list){
                   
               
            /* 在這里 pos->next 指向next 節(jié)點, pos->prev指向前一個節(jié)點.這里的節(jié)點是
                    struct my_list
            類型. 但是,我們需要訪問節(jié)點本身,而不是節(jié)點中的list字段,
                   
            list_entry()正是為此目的。*/
                
                   
                tmp= list_entry(pos,
            struct my_list, list);
                printf(
            "%s ", tmp->value);
                }
                printf(
            "\n");


                printf(
            "deleting the list using list_for_each_safe()\n");
                list_for_each_safe(pos, q,&mylist.list){
                    tmp= list_entry(pos,
            struct my_list, list);
                    printf(
            "%s ", tmp->value);
                    list_del(pos);
                    free(tmp);
                }
            }

             

            posted on 2009-06-20 03:27 肥仔 閱讀(241) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

            久久伊人精品一区二区三区| 51久久夜色精品国产| 2021国产精品久久精品| 久久综合狠狠综合久久| 久久精品成人国产午夜| 久久一区二区三区免费| 精品久久人人爽天天玩人人妻| 久久国产亚洲高清观看| 丁香五月综合久久激情| 一本久道久久综合狠狠爱| 久久综合久久综合九色| 久久精品一区二区三区AV| 国产精品美女久久久m| 国产免费久久精品99re丫y| 久久不射电影网| 亚洲国产精品无码久久一区二区| 精品久久久久久久久久中文字幕| 亚洲国产美女精品久久久久∴ | 99久久精品国内| 国产精品乱码久久久久久软件| 99久久www免费人成精品| 久久久久人妻一区二区三区vr | 久久亚洲AV永久无码精品| 欧美亚洲色综久久精品国产| 亚洲а∨天堂久久精品9966| 天天久久狠狠色综合| 久久国产免费观看精品3| 亚洲va中文字幕无码久久不卡| 久久久久久毛片免费看| 青青青国产精品国产精品久久久久 | 久久人爽人人爽人人片AV| 2021国产精品久久精品| 久久人人爽人人爽人人片AV不| 亚洲精品美女久久久久99小说| 久久青青草原精品国产软件| 狠狠精品久久久无码中文字幕 | 青青草国产精品久久| 国产综合成人久久大片91| 色婷婷久久综合中文久久一本| 人妻丰满?V无码久久不卡| 热99RE久久精品这里都是精品免费|