• <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

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

            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 節點, pos->prev指向前一個節點.這里的節點是
                    struct my_list
            類型. 但是,我們需要訪問節點本身,而不是節點中的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 肥仔 閱讀(236) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

            久久亚洲国产精品五月天婷| 久久天天躁夜夜躁狠狠| 久久精品无码专区免费青青| 精品久久久久久中文字幕人妻最新 | 青青草原综合久久大伊人导航| 久久婷婷五月综合97色直播| 伊人久久大香线蕉综合Av| 久久99国产精品久久99果冻传媒| 久久99精品久久久久久野外| 国产69精品久久久久APP下载 | 亚洲国产另类久久久精品| 精品久久久久久久无码| 久久免费视频一区| 久久久久亚洲AV无码网站| 久久久WWW成人免费毛片| 久久综合香蕉国产蜜臀AV| 精品久久久久久国产牛牛app | 一级做a爰片久久毛片看看 | 亚洲国产高清精品线久久| 久久综合香蕉国产蜜臀AV| 无码精品久久一区二区三区 | 久久久噜噜噜久久中文福利| 精品久久久久久无码中文字幕| 久久精品天天中文字幕人妻| 国产69精品久久久久APP下载| 品成人欧美大片久久国产欧美...| 亚洲国产精品高清久久久| 日本精品久久久久影院日本| 94久久国产乱子伦精品免费| 国内精品久久人妻互换| 一本一本久久A久久综合精品 | 久久婷婷五月综合成人D啪 | 无码国内精品久久人妻麻豆按摩| AA级片免费看视频久久| 久久综合综合久久狠狠狠97色88 | 欧美精品九九99久久在观看| 久久久久国产一区二区三区| 亚洲嫩草影院久久精品| 99久久成人18免费网站| 国产呻吟久久久久久久92| 国产精品成人99久久久久|