मैंने शून्य पॉइंटर्स का उपयोग कर सी में एक बुनियादी कतार संरचना लागू की है। प्रक्रिया इस प्रकार है:सी कतार कार्यान्वयन शून्य * - अच्छा या बुरा अभ्यास का उपयोग कर?
- संरचना आरंभ - मैं सेट वैरिएबल प्रकार का आकार कतार में संग्रहीत करने के लिए
- धक्का - मैं पारित चर सूचक संग्रहीत करने के लिए, कतार तो पकड़ लेता है खुद के लिए एक प्रति
- सामने - संरचना सामने के तत्व के लिए एक शून्य * लौटाती है। मैं सिर्फ स्थानीय प्रतिलिपि रखने के लिए पॉइंटर, या
memcpy()
पकड़ सकता हूं।
struct ही इस तरह दिखता है:
struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};
आरंभ और अंत में सिर्फ शून्य संकेत है कि वर्तमान में आबंटित स्मृति ब्लॉक के भीतर कुछ स्थान को इंगित कर रहे हैं। अगर मैं कतार पर तत्वों को धक्का देता हूं, तो मैं varsize
द्वारा अंत सूचक को बढ़ाता हूं। अगर मैं पॉप(), मैं केवल varsize
द्वारा एंड पॉइंटर को भी कम करता हूं।
मुझे नहीं लगता कि मुझे यहां फ़ंक्शन कोड पोस्ट करना चाहिए, यह 100 से अधिक पंक्तियां हैं।
प्रश्न: क्या यह एक अच्छा या बुरा अभ्यास माना जाता है? क्यों नहीं)?
नोट: मुझे पता है कि सी में कतार के लिए कई अन्य विकल्प हैं। मैं सिर्फ इस की गुणवत्ता के बारे में पूछ रहा हूं।
संपादित करें: कार्यान्वयन यहाँ उपलब्ध है: http: यदि आप प्रकार और आकार पता नहीं है // 89.70.149.19 /stuff/queue.txt (space निकालें)
मेमोरी आकारों के लिए size_t का उपयोग करें –
मुझे लगता है कि 'शून्य * ' –
@RanEldan का उपयोग करके जेनेरिक कोड लिखना अच्छा है, धन्यवाद। इसे यहाँ ठीक किया गया। – szczurcio