2012-11-18 15 views
5
#define TAILQ_ENTRY(type)      \ 
struct {        \ 
    struct type *tqe_next; /* next element */   \ 
    struct type **tqe_prev; /* address of previous next element */ \ 
} 

मुझे कोड से ऊपर मिलता है जो पॉइंटर पर सूचक करता है, और यह केवल एकमात्र नहीं है। मैं जानना चाहता हूं ऐसा क्यों? सूचक स्वयं इसे संभाल नहीं सकता है?लिनक्स सूची के लिए "पॉइंटर टू पॉइंटर" का उपयोग क्यों करता है?

उत्तर

5

मुझे लगता है कि यहां बिंदु तत्वों को हटा रहा है। ध्यान दें कि आपके पास singly linked list है, जिसका अर्थ है कि आप आगे अपने नोड्स में नेविगेट करने में सक्षम हैं।

अब एक सामान्य सूची नोड (N_j कहें) पर विचार करें जिसे आप हटाना चाहते हैं। इसे हटाने के बाद आप आसानी से पिछले नोड (कहें) (N_{j+1} कहें) को आसानी से लिंक करना चाहते हैं। इस प्रकार, आपको पिछले नोड N_{j-1} के क्षेत्र tqe_next को संशोधित करने की आवश्यकता है, जिसके लिए पॉइंटरtqe_prevN_j में पॉइंटर की आवश्यकता है।

दूसरे शब्दों में, छद्म कोड संदर्भ में, निम्नलिखित सच है

*(N_j.tqe_prev) == (N_{j-1}).tqe_next 

या

N_j.tqe_prev == &(N_{j-1}).tqe_next 

+0

@ टॉम जू, मैंने आगे अपना जवाब सुधार लिया। कृपया एक नज़र डालें। – Acorbe

+0

धन्यवाद! अब यह बहुत स्पष्ट है। –