2012-10-30 15 views
5

का उपयोग किए बिना किसी दिए गए फ़ोल्डर में फ़ाइलों और उप फ़ोल्डरों मैं हाल ही में सॉफ्टवेयर डेवलपर के पद के लिए एक प्रतिष्ठित कंपनी के साथ एक साक्षात्कार किया था और इस प्रश्नों में से एक के लिए कहा था:प्रिंट सभी प्रत्यावर्तन/ढेर

"को देखते हुए निम्न विधियों:

List subDirectories(String directoryName){ ... }; 
List filesInDirectory(String directoryName) { ... }; 

नाम के रूप में सुझाव देते हैं, पहली विधि इनपुट निर्देशिका ('DirectoryName') और दूसरी विधि में तत्काल उप-निर्देशिका के नामों की एक सूची देता है सभी फाइलों के नामों की सूची लौटाता है इस फ़ोल्डर में

प्रिंट करें फाइल सिस्टम में फाइलें करेंगे। "

मैंने इसके बारे में सोचा और साक्षात्कार को एक सुंदर स्पष्ट पुनरावर्ती समाधान दिया। उसने मुझे बिना रिकर्सन के ऐसा करने के लिए कहा। चूंकि रिकर्सन कॉल स्टैक का उपयोग करता है, मैंने उससे कहा कि मैं इसके बजाय एक सहायक स्टैक का उपयोग करूंगा, जिस बिंदु पर उसने मुझे एक स्टैक का उपयोग न करने के लिए कहा था। दुर्भाग्य से, मैं एक समाधान के साथ आने में सक्षम नहीं था। मैंने पूछा कि इसे बिना रिकर्सन/स्टैक के कैसे किया जा सकता है, लेकिन वह नहीं कहती।

यह कैसे किया जा सकता है?

+1

यह एक चर पर पूर्ण पथ नाम स्टोर करने के लिए अनुमति दी है? – lqs

+0

मुझे यकीन नहीं है .. मैंने साक्षात्कारकर्ता से यह नहीं पूछा था! – user1784540

उत्तर

2

आप एक कतार है और एक BFS एल्गोरिथ्म का उपयोग करना चाहते।

मुझे लगता है कि कुछ छद्म कोड अच्छा होगा:

files = filesInDirectory("/") 
foreach (file in files) { 
    fileQ.append(file) 
} 

dirQ = subDirectories("/") 
while (dirQ != empty) { 
    dir = dirQ.pop 
    files = filesInDirectory(dir) 
    foreach (file in files) { 
     fileQ.append(file) 
    } 
    dirQ.append(subDirectories(dir)) 
} 

while (fileQ != empty) { 
    print fileQ.pop 
} 
+0

फाइलों की कतार रखने का कोई मतलब नहीं है। जैसे ही आप उन्हें ढूंढते हैं, आप बस उनके नाम प्रिंट कर सकते हैं। आपको वास्तव में केवल निर्देशिकाओं की कतार की आवश्यकता है। – rici

+0

सुनिश्चित करें, सभी जरूरतों पर निर्भर करता है, लेकिन क्वेरी अभी भी संतुष्ट है: इन 2 विधियों और कोई पुनरावर्तन का उपयोग कर सिस्टम पर सभी फ़ाइलों को प्रिंट करें। – Michael

+0

नौकरी पाने की ज़रूरत है, मुझे लगता है; यह एक साक्षात्कार सवाल है। मैंने कई साक्षात्कार किए हैं, और मैंने इस तरह का एक प्रश्न इस्तेमाल किया था, मेरा तत्काल अनुवर्ती होगा: "आपको लगता है कि फाइल सिस्टम में सभी फाइलनामों का कुल आकार क्या है?" :) बस कहना है ' – rici

1

यदि मैं सही ढंग से समझ गया, तो तत्काल उप-निर्देशिका केवल उस फ़ोल्डर में निर्देशिकाएं हैं। मेरा मतलब है कि अगर मैं = हमारे पास इन तीन पथ /home/user, /home/config और /home/user/u001 हैं, तो हम कह सकते हैं कि user और config/home/ की तत्काल उप-निर्देशिकाएं हैं, लेकिन u001 नहीं है। वही लागू होता है यदि user, और u001 फ़ाइलें हैं (user तत्काल है जबकि u001 नहीं है)।

तो आपको तत्काल उपनिर्देशिका या फ़ाइलों की सूची वापस करने के लिए वास्तव में रिकर्सन या स्टैक की आवश्यकता नहीं है।

संपादित करें: मैंने सोचा था कि ओपी subDirectories() और filesInDirectories() कार्यों को लागू करना चाहता था।

तो, आप सभी फ़ाइलों (स्यूडोकोड की तरह) मुद्रित करने के लिए की तरह कुछ कर सकते हैं:

List subd = subDirectories(current_dir); 
List files = filesInDirectories(current_dir); 

foreach (file in files) { 
    print file.name(); 
} 

while (!subd.empty()) { 
    dir = subd.pop(); 

    files = filesInDirectory(dir.name()); 

    foreach (file in files) { 
     print file.name(); 
    } 

    subd.append(subDirectories(dir.path())); 
} 
+0

सच है, लेकिन सवाल मुझे फाइल सिस्टम में सभी फाइलों को मुद्रित करने के लिए कहता है, न केवल विशेष निर्देशिका में।इसका मतलब यह नहीं है कि मुझे इस निर्देशिका का ट्रैक रखने की आवश्यकता होगी कि मैं वर्तमान में कौन सी निर्देशिका में हूं और पिछली निर्देशिकाएं ताकि मैं बैकट्रैक कर सकूं? – user1784540

+0

तो, आप एक बीएफएस ढेर @ माइकल का उत्तर दे सकते हैं। –

1

मुझे लगता है कि क्या @lqs पता चलता है वास्तव में एक स्वीकार्य जवाब है कि वह की तलाश में गया हो सकता है है: एक चर में पूरा पथ की दुकान और यदि आप उपनिर्देशिका दर्ज करते हैं, तो निर्देशिका नाम को इसमें शामिल करें, और जब आप इसे छोड़ते हैं तो अंतिम निर्देशिका नाम को बंद करें। इस तरह, आपका पूरा पथ पॉइंटर के रूप में कार्य करता है जहां आप वर्तमान में फ़ाइल सिस्टम में हैं।

क्योंकि पूर्ण पथ हमेशा अंत में संशोधित होता है, पूर्ण पथ आपके स्टैक के रूप में व्यवहार करता है (आश्चर्य की बात नहीं)।

साक्षात्कार सवाल अलग रूप में, मुझे लगता है कि मैं अभी भी स्ट्रिंग परिवर्तन हालांकि पर एक वास्तविक ढेर चुनेंगे ...

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