ডাটা স্ট্রাকচার ও এ্যারে

প্রোগ্রামিংয়ে যাদের অ, আ, ক, খ শেষ, অর্থাৎ কিনা হাতে খড়ি ইতোমধ্যে হয়ে গেছে তাদের জন্য অত্যন্ত গুরুত্বপূর্ণ একটা বিষয় হলো ডাটা স্ট্রাকচার (বাংলায় তথ্য সংস্থান বা তথ্য কাঠামো টাইপ কিছু একটা হয়)। যাদের এটার নাম শুনেই ভয় লেগে গেছে তারা মোটেও ভয় পাবেন না। নামটা একটু কেমন কেমন হলেও জিনিসটা তেমন কঠিন না। যখনই জিনিসটা আপনি বুঝে ফেলবেন, মনে হবে “আরে এইটা কিছু হইলো? এইটা তো সোজাই।“ সুতরাং, একটু ধৈর্য্য ধরে লেগে থাকলেই হলো। 🙂

ডাটা স্ট্রাকচার নিয়ে কথা বলার আগে বলি, ‘ডাটা’ কি?

ডাটা হলো তথ্য বা উপাত্ত (Information)। আমরা আমাদের কম্পিউটারে যা কিছু জমা করে রাখি তার সবটাই ডাটা। কম্পিউটার তার নিজের প্রয়োজনে যা কিছু নিয়ে কাজ করে তারও সবটাই ডাটা। তারমানে ‘ডাটা’ একেবারে হেলাফেলা করার মতো কিছু না। এখন, এই ডাটাগুলো কিভাবে বিন্যস্ত(formation) থাকবে, কিভাবে রাখলে সবচাইতে সহজে ডাটা পাওয়া যাবে সেটাই হলো ডাটা স্ট্রাকচার।

প্রয়োজনের সময় চাইলেই যেনো দ্রুততম সময়ে ডাটা আবার ফিরে পাওয়া যায় এবং কাজে লাগানো যায় সেটাই হলো ডাটা স্টাকচারের মূল উদ্দেশ্য।

নীচের ছবিগুলো দেখলে ডাটা স্ট্রাকচার বুঝতে সুবিধা হবে-

১ নং ছবি

১ নং ছবি

২ নং ছবি

২ নং ছবি

১ নং ছবিতে আমরা যদি বইগুলোকে ডাটা মনে করি, তাহলে বুকশেলফে যেভাবে বইগুলো সাজানো আছে সেটাই হলো ডাটা স্ট্রাকচার। এখানে বইগুলোকে বিষয় অনুসারে আলাদা আলাদা খোপে রাখা আছে, যাতে করে প্রয়োজনের সময় সহজেই খুঁজে পাওয়া যায়।

২ নং ছবিতে একটি ডিকশনারী দেখা যাচ্ছে। যারা ইতোপূর্বে ডিকশনারী দেখেছেন(আশা করি সবাই) তাদের জানা থাকার কথা ডিকশনারীর হাজার হাজার শব্দ থেকে কোনো একটা শব্দ খুঁজে পাওয়া যেতো না যদি না শব্দগুলো বর্ণক্রমানুসারে না থাকতো। তারমানে এখানে আমাদের শব্দগুলো হলো ডাটা, আর এই বর্ণক্রমানুসারে(lexicographical) শব্দগুলোকে বিন্যস্ত করাটাই হচ্ছে ডাটা স্ট্রাকচার।

আশা করি এতক্ষণে পরিস্কার হয়ে গেছে, ডাটা কি, ডাটা স্ট্রাকচার কি এবং কেন প্রয়োজন?

যাদের এখনো ডাটা স্ট্রাকচারের প্রয়োজনীয়তা মাথায় ঢোকেনি তাদের জন্য নীচের ছবিটি। 🙂

table

সবই তো বুঝলাম, কিন্তু প্রোগ্রামিংয়ে ডাটা স্ট্রাকচার কিভাবে ব্যবহার করবো?

প্রোগ্রামিংয়ে ডাটা স্ট্রাকচার ব্যবহারের জন্য যাদের হাত নিশপিশ করছে, তাদের জন্য প্রথম কথা হলো, প্রোগ্রামিংয়ের ক্ষেত্রে কোনো ‘একটা নির্দিষ্ট’ ডাটা স্ট্রাকচার নেই যেটা সবখানে ‘ধমাধম্’ মেরে দিলেই কাজ হয়ে যায়। এ্যারে (Array), লিংকড লিস্ট(Linked List), স্ট্যাক(Stack), কিউ(Queue), প্রায়োরিটি কিউ(Priority Queue), ট্রি(Tree), বাইনারী ট্রি(Binary Tree), হ্যাশ টেবিল(Hash Table) সহ এরকম অনেক অনেক ডাটা স্ট্রাকচার আছে। যেটা যেখানে প্রয়োজন এবং ব্যবহার করলে সবচাইতে ভালো ফল পাওয়া যায় সেখানে সেটাই ব্যবহার করতে হবে।

মোটামুটি দরকারী সবগুলো ডাটা স্ট্রাকচার নিয়েই আস্তে আস্তে আলোচনার ইচ্ছা আছে (যদি না ঘুম পায়)।

এখন আপাতত একেবারে বেসিক একটা স্ট্রাকচার নিয়ে কথা বলি। এটা হলো- এ্যারে।

এ্যারে

আমার ধারণা যারা ইতোমধ্যে প্রোগ্রামিং ল্যাংগুয়েজ নিয়ে ঘাটাঘাটি করে ফেলেছেন তারা ভালোই জানেন এ্যারে সম্পর্কে।

তারপরও বলি।

সবচাইতে সহজ, প্রচলিত এবং তুলনামূলক কম দক্ষ ডাটা স্ট্রাকচারের নাম হলো এ্যারে।

আমাদের দেশের সরকারী কর্মচারীরা যেভাবে ফাইলিং কেবিনেটে ফাইল রাখেন সেটার নামই এ্যারে। পদ্ধতিটা হলো, একটা ফাইল পাওয়ামাত্র সেটাকে সবার শেষে চালান করে দেয়া, পরের ফাইলটা তার পরে, তার পরেরটা সবার শেষে- এভাবে(ইচ্ছে করলে মাঝখানেও রাখা হয়, তবে ব্যাপারটাই হলো কার পরে কাকে রাখা হচ্ছে তার কোনো নির্দিষ্ট নিয়ম রক্ষা না করা)। তারপর যখন একটা ফাইল প্রয়োজন পড়ে, তখন প্রথম থেকে শুরু হয় ফাইলটা খোঁজা। তার মানে যদি, ফাইলটা থাকে সবার শেষে আর ফাইলের সংখ্যা হয় ১০০০ তাহলে………………খোঁজ দ্য সার্চ চলতেই থাকবে।
তারপরও যেহেতু সবচাইতে সহজ তাই যখন ঝামেলা হবার সম্ভাবনা কম তখন কোডাররা ‘ধুপধাপ’ এ্যারে ব্যবহার করে ফেলে। এ্যারে দেখতে অনেকটা এরকম-

array

আমরা এ্যারের প্রতিটা ঘরে একেকটা ডাটা রাখতে পারবো। তারমানে আমরা পরপর অনেকগুলো ঘর পাচ্ছি যেখানে আমরা ডাটা রাখতে পারি। আবার  কোনো ডাটা খুঁজে বের করতে হলে, প্রথম থেকে সবগুলো ঘর দেখে আসতে পারি যে ঐ ঘরে আমাদের কাঙ্খিত ডাটা আছে কিনা। জিনিসটা কিভাবে করবো সেটা বুঝতে হলে একটু কোডাইতে হবে।

এখানে আমি C ল্যাংগুয়েজে কোড দেখাচ্ছি।

আমরা C তে কোড করার সময় দেখেছি, আমরা একটা ডাটা স্টোর করে রাখার জন্য ভেরিয়েবল ডিক্লেয়ার করি। তো একটা ভেরিয়েবল শুধু একটাই ডাটা রাখতে পারে। একই রকম অনেকগুলো ডাটা রাখার জন্য আমরা এভাবে একটা এ্যারে ডিক্লেয়ার করতে পারি। আমরা কতগুলো ঘরে ডাটা রাখবো, সেটা প্রথমেই যেহেতু বলে নিতে হয়, তাই-

 int arr[100]; 

তারমানে আমরা উপরের ছবির মতো ১০০ টা ঘর পাচ্ছি মেমোরিতে, যেটাকে আমরা Integer Array বলছি, যেখানে ১০০ টা Integer type value রাখা যাবে। তারমানে হয়ে গেলো আমাদের একটা এ্যারে। কি সহজ না?? সবগুলো প্রোগ্রামিং ল্যাংগুয়েজেই এভাবে সহজে এ্যারে তৈরি করা যায়।

এ্যারে তো তৈরী হলো, এবার এটাতে ডাটা রাখা এবং ফিরে পাবার ব্যবস্থা করা দরকার।

আমরা এই ১০০ টা ঘরের কোন ঘরে আমাদের ডাটা রাখতে চাই, সেটা একটু কষ্ট করে বলে দিতে হবে।

তার মানে আমরা এভাবে বলতে পারি-

 arr[0]=5; arr[1]=2; arr[2]=18;  

arr[0], এখানে 0 হচ্ছে ঘর নাম্বার বা ইনডেক্স।

তারমানে আমাদের ০,১,২ নাম্বার ঘরে ৫,২,১৮ ভ্যালু জমা হয়ে গেলো। এখন আমরা ইচ্ছা করলেই এই ভ্যালুগুলো দেখতে পারি।

printf(“%d”,arr[0]);

এইভাবে করে অন্য ঘরগুলোও দেখতে পারি। এটা দেখে নিশ্চয়ই বোঝা যাচ্ছে যে, আমাকে যদি কেউ বলে এ্যারের কোন ঘরে ‘১৮’ আছে, আমি কি বলতে পারবো? অবশ্যই পারবো, কারণ এখানে মাত্র ৩ টা ভ্যালু আর আমার মনে আছে, এ্যারের ২ নাম্বার ঘরেই আমি ১৮ রেখেছি। কিন্তু যদি আমার এ্যারের ১০০ টা ঘরেই আমি বিভিন্ন নাম্বার রাখি, তখন আমি কিভাবে খুঁজে পাবো? (তারমানে স্মৃতিশক্তির উপর ভরসা করা যাবে না, তাছাড়া আমি মনে রাখলে তো হবে না, কম্পিউটার খুঁজে পাবে কিভাবে?)

তারমানে আমাকে এমন একটা প্রসেস ফলো করতে হবে, যাতে করে যে কোনো অবস্থায় আমার কোড কাজ করে। সুতরাং এভাবে এ্যারেতে বিভিন্ন ভ্যালু রেখে পরে তা খুঁজে পেতে হলে আমরা খুব সহজে একটা লুপ ব্যবহার করতে পারি।
এ্যারের একটা বড় সুবিধা হলো, যেহেতু প্রতিটা ঘরের একটা ইনডেক্স নাম্বার আছে, তাই ইচ্ছে করলেই মাঝখান থেকে যে কোনো একটা ঘরে কি আছে তা ঐ ঘরের ইনডেক্স নাম্বারে সার্চ করে দেখা যায় (arr[10] এভাবে)। যেটা লিংকড লিস্টে (পরের পোস্টে) পারা যায় না।

int এর পরিবর্তে অন্য ডাটা টাইপ ব্যবহার করেও আমরা অন্য টাইপের এ্যারে বানাতে পারি (মূলত ডাটা টাইপটা দিয়ে বোঝা যায় আমার ঘর গুলো কি ধরনের ডাটা রাখতে পারবে। আমি নিশ্চয়ই একটা ইঁদুর রাখার ঘরে একটা হাতি রাখতে পারবো না, তাই না?) ।

আবার টেবিলের মত করে 2 dimensional array ও বানাতে পারি, সেটা নিয়ে একটু ঘাটাঘাটি করতে হবে তোমাকেই।

এ্যারে আরো ভালোভাবে বোঝার জন্য এখানে এবং এখানে দেখতে পারো।

এ্যারে নিয়ে প্রাথমিক কথাবার্তা শেষ, এখন এ্যারেতে বিভিন্নভাবে ডাটা রেখে এবং সেখান থেকে ডাটা নিয়ে বিভিন্ন কোড করে শেখার দায়িত্ব তোমার। আমাকে শুধু প্রবলেম হলে জিগ্যেস কোরো। 🙂

লিংকড লিস্ট কি এবং এ্যারে আর লিংকড লিস্টের মধ্যে কে সবচাইতে সুবোধ, ভদ্র সেটা নিয়ে পরের বার আলোচনা করবো।

Happy coding!

Want to like or share?:
0

Leave a Reply

Your email address will not be published. Required fields are marked *