• <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指向結(jié)構(gòu)體type中的成員member
            **
            通過指針ptr,返回結(jié)構(gòu)體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 肥仔 閱讀(234) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)

            亚洲а∨天堂久久精品9966| 久久久国产打桩机| 国产免费久久精品99久久| 精品久久久久久久久久中文字幕 | 久久99中文字幕久久| 中文字幕亚洲综合久久| 亚洲国产成人久久一区WWW| 嫩草伊人久久精品少妇AV| 国产成人综合久久精品尤物| 精品久久久久久久国产潘金莲 | 久久久久亚洲av无码专区喷水 | 久久久久国产精品麻豆AR影院| 国产精品久久久久免费a∨| 国产午夜精品理论片久久影视| 武侠古典久久婷婷狼人伊人| 国产精品美女久久久m| 天天综合久久一二三区| 久久青青草原国产精品免费| 97精品依人久久久大香线蕉97| 国产精品丝袜久久久久久不卡| 无码AV波多野结衣久久| 一本一本久久a久久精品综合麻豆| 久久伊人精品青青草原高清| 伊人久久精品无码av一区| 人妻精品久久久久中文字幕| 亚洲午夜久久影院| av无码久久久久不卡免费网站| 国内高清久久久久久| 欧美激情精品久久久久久| 久久亚洲国产午夜精品理论片| 色欲综合久久躁天天躁蜜桃| 久久毛片一区二区| 亚洲欧洲久久av| 精品久久久久久无码不卡| 欧美午夜精品久久久久久浪潮| 人人狠狠综合久久亚洲88| 久久精品九九亚洲精品天堂| 国内精品久久久久影院优| 久久国产欧美日韩精品| 国内精品久久久久影院日本| 国产精品久久久亚洲|