• <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++ 基礎

            久久亚洲高清观看| 久久国产亚洲精品无码| 久久99精品国产| 亚洲国产精品一区二区久久hs| 99久久伊人精品综合观看| 精品久久777| 日本久久久久久中文字幕| 久久99精品久久久久婷婷| 日产精品99久久久久久| 色婷婷久久综合中文久久蜜桃av | 国产精品久久久福利| 久久综合精品国产二区无码| 久久人人爽人人爽人人AV东京热| 国内高清久久久久久| 亚洲狠狠婷婷综合久久蜜芽| 色婷婷综合久久久中文字幕 | 久久婷婷色香五月综合激情 | 久久精品国产清自在天天线| 少妇内射兰兰久久| 国产成人精品免费久久久久| 久久国产高清字幕中文| 国产精品女同一区二区久久| 怡红院日本一道日本久久 | 亚洲精品无码久久毛片| 深夜久久AAAAA级毛片免费看| 天堂无码久久综合东京热| 性做久久久久久久久浪潮| 亚洲香蕉网久久综合影视 | 久久久久亚洲AV无码专区体验| 久久青青草原亚洲av无码app| 久久久91精品国产一区二区三区| 日本亚洲色大成网站WWW久久| 亚洲中文字幕无码久久精品1| 精品久久久久中文字幕日本| 国产—久久香蕉国产线看观看| 欧美与黑人午夜性猛交久久久| 无码国内精品久久人妻蜜桃| 狠狠人妻久久久久久综合蜜桃 | 色欲久久久天天天综合网精品| 色综合久久天天综合| 久久99久久99精品免视看动漫|