2010-11-15 11 views
5

है वहाँ किसी भी पंक्ति डेटा संरचना कार्यान्वयन सी के साथ आता है "" या मैं अपने ही (यह एक स्कूल परियोजना के लिए है, इस प्रकार मैं कुछ है कि या तो मानक जीसीसी स्थापना में मौजूद है या द्वारा एक को लागू करना का उपयोग करना चाहिए विकसित करना होगा कि अपने आप को!)क्या सी के लिए मानक कतार कार्यान्वयन हैं?

क्या लिंक्ड सूचियों, ढेर, आदि जैसे अन्य सामान्य डेटा संरचनाओं के बारे में?

धन्यवाद

+0

http://stackoverflow.com/questions/1819416/standard-data-structure-library-in-c http://stackoverflow.com/questions/14001652/does- मानक-c-library-provides-linked-list-etc-data- संरचनाएं –

उत्तर

2

आपको अपना खुद का कार्यान्वयन करना होगा। डेटा संरचनाओं के संदर्भ में सी बहुत कम है और आपको अमूर्त डेटा प्रकारों को लागू करने के लिए बहस करने वाली चाल का सहारा लेना है: यदि आप इसे पा सकते हैं, तो अपूर्ण प्रकारों के रूप में अपूर्ण लेख देखें, या देखें कि सिद्धांतों को कैसे लागू किया जाता है, कहें, PolarSSL's bignum.h file। दूसरी तरफ सी ++ आपको सी में बहुत कुछ करने की अनुमति देता है और आपको सार डेटा संरचनाओं को लागू करने के तरीके प्रदान करता है।

+0

... और किसी भी मामले में सी ++ में एसटीएल में कतार का प्रकार है। – Clifford

0

GDSL एक महान जगह शुरू करने के लिए किया जाएगा। This thread कुछ अन्य देता है।

+0

यह लाइब्रेरी की तरह दिखता है। जब तक यह जीसीसी के साथ आता है तो यह मेरे लिए किसी भी उपयोग का नहीं है। –

+2

हम्म। एक अजीब आवश्यकता की तरह लगता है ... जो कुछ आप उपयोग करने जा रहे हैं उसके बाद कुछ लाइब्रेरी या अन्य में होगा। समस्या तब तक नहीं देख सकती जब तक कि परियोजना डेटा संरचनाओं के बारे में न हो, लेकिन मैं आपका आविष्कारक नहीं हूं! – spender

0

आप अपनी खुद की डाटा संरचनाओं को लागू करने की है, लेकिन वहाँ कई डेटा संरचना पुस्तकालयों वहाँ मौजूद हैं।

1

आप एक named pipe इस्तेमाल कर सकते हैं। यह एक फीफो डेटा संरचना है और पॉज़िक्स मानक का हिस्सा है। यदि आपकी सारी इच्छाएं पीठ के लिए enque है और सामने से हटा दें यह काम करेगा। आपको संदेश सीमाओं को हाथ से ट्रैक रखने की आवश्यकता होगी, हालांकि शायद पहले तत्व में पहले तत्व में बाइट्स की संख्या हो।

+0

यह धीमा और गैर-पोर्टेबल होगा, साथ ही यूनिक्स सिस्टम कॉल को समझने की आवश्यकता होगी। –

+1

@ लार्समैन: मुझे लगता है कि यह सवाल टैग दिए गए एक उचित जवाब है। – Clifford

21

इसे आजमाएं। यूनिक्स कई प्रकार की लिंक्ड सूचियों के साथ आता है - आप उनमें से एक का उपयोग अन्य संभवतः सूची आधारित संरचनाओं जैसे स्टैक के रूप में कर सकते हैं।

man queue 
+3

+1, टिप्पणी के साथ कि यह एक मानक इंटरफ़ेस नहीं है। लिनक्स, बीएसडी और मुझे लगता है कि मैक ओएस एक्स इसे प्रदान करता है, हालांकि। –

+0

तकनीकी रूप से सही उत्तर नहीं है लेकिन यह निश्चित रूप से हेला सहायक है^_ ^ – Goahnary

0

यह एक "स्कूल परियोजना" उसके बाद आप अपने डेटा संरचनाओं को लागू करने अंकन योजना पर हो सकता है, और एक पुस्तकालय कॉल का उपयोग परीक्षक उन अंक देने को रोक सकता है।

आईएसओ सी स्टैंडर्ड लाइब्रेरी में ऐसी कोई डेटा संरचनाओं शामिल है, लेकिन जीएनयू libc सिर्फ आईएसओ मानक की तुलना में अधिक शामिल हैं। इसमें Pipes and FIFOs शामिल हैं जो आपकी आवश्यकताओं को पूरा कर सकते हैं।

0

असाधारण मानक नहीं है, लेकिन कई प्रणालियों में bsd/sys/queue.h और bsd/sys/tree.h हैं जो मैक्रो-आधारित पुस्तकालय हैं।

documentation here देखें।

0

बीएसबी lib का उपयोग करें। sys/queue.h और sys/tree.h में विभिन्न सूचियों और पेड़ों के कार्यान्वयन हैं।

0

नहीं। लेकिन यहाँ एक बहुत ही सरल दिया गया है:

typedef struct node { 
    int val; 
    struct node *next; 
} node_t; 

void enqueue(node_t **head, int val) { 
    node_t *new_node = malloc(sizeof(node_t)); 
    if (!new_node) return; 

    new_node->val = val; 
    new_node->next = *head; 

    *head = new_node; 
} 

int dequeue(node_t **head) { 
    node_t *current, *prev = NULL; 
    int retval = -1; 

    if (*head == NULL) return -1; 

    current = *head; 
    while (current->next != NULL) { 
     prev = current; 
     current = current->next; 
    } 

    retval = current->val; 
    free(current); 

    if (prev) 
     prev->next = NULL; 
    else 
     *head = NULL; 

    return retval; 
} 

पूरा स्रोत here

संबंधित मुद्दे