Array Data Structure
Tags: dsa, javascript, datastructures, algorithms
Published: 2023-09-16 13:34:00

Array প্রোগ্রামিং এ সবচেয়ে বেশি ব্যবহৃত Data Structure। প্রতেকটা Programng Language বিল্টইন দেওয়া থাকে। অনেকেই আছে যারা জানেই যে, Array একটা Data Structure। অথচ তারা বিশেষ করে যারা নতুন প্রোগ্রামিং শিখেছে তার এই Array প্রতিনিয়ত ব্যবহার করেছে।

কিন্তু বড় বড় প্রজেক্ট-এ array ব্যবহার করা হয় না। কিন্তু কেন? এর জন্য array কিভাবে কাজ করে সেটা আগে জানা প্রয়োজন।


## Array-এর গঠন ও কার্যপ্রনালি
যখন কোন array নেওয়া হয় তখন মেমরীতে একটি জায়গা বরাদ্দ হয়। প্রত্যেকটা array এর এলিমেন্টের জন্য পরপর জায়গায় বরাদ্দ হয়। নিচের ছবিটা দেখলে বুঝতে পারবেন

![Array Memory Allocation](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lnabb9jvik63f3a9wypm.png)
Source: Google

এখানে লক্ষ করলে দেখতে পারবেন যে , এখানে array এর প্রথম এলিমেন্টের ram address `0x0001`। (এই address টা প্রতিবার randomly allocate হয়) array এর বাকি এলিমেন্ট গুলার জন্য ram address পরপর allocate হয়ে যায়। এভাবেই মুলত array এর জন্য memory allocate হয়। 



## Array-এর সীমাবদ্ধতা
array প্রত্যেকটা প্রোগ্রামিং লাংগুয়েজ রয়েছে এবং এটা নিয়ে কাজ করা অনেক সহজ। আর তেমন কোন সমস্যা তো চোখে পড়ছে না। কিন্তু না array  এর কিছু সীমাবদ্ধতা আছে। 
অল্প পরিমান ডাটা নিয়ে কাজ করলে আপনি array ব্যবহার করলে কোন সমস্যা হবে না। কিন্তু যদি কয়েক কোটি ডাটা নিয়ে কাজ করেন তাহলে আপনাকে সমস্যায় পড়তে হবে।  
![Ram Allocation table](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hej6wbkup6kchqoxuc8z.jpeg)
কম্পিউটারের মেমরী দেখতে অনেকটা উপরে টেবিল এর মত। এখন আমরা তো জানি array মেমরীতে একটা random এর address থেকে পরপর memory allocate করে। এভাবে যদি চলতে থাকে তাহলে দেখা যাবে একটা সময় পরবর্তী কোন address নেই। তখন কিন্তু প্রোগ্রামটা রান হবে না। `Memory limit exceeded` এই টাইপের একটা `error` দিবে।

কিন্তু ram কিন্তু আরো খালি জায়গা রয়েছে। সেগুলা কিন্তু খালিই থেকে যাচ্ছে। মূলত এই কারনে অনেক বেশি ডাটা নিয়ে কাজ করা সময় `array` ব্যবহার করা হয় না। 


## Array-এর কিছু operations
### Traversing
array তে traverse করা খুব সহজ। লুপের সাহায্যে খুব সহজে traverse করা যায়। নিচের কোড দেখলে সহজেই বোঝা যাবে।

![Array Traversing](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t90ei55vbs1ypc3knnww.png)



### Insertion
array-তে তিনটি স্থানে নতুন ডাটা insert করা যায়। প্রথমে, যেকোন পজিশনে এবং সবার শেষে। সবারশেষে ডাটা insert করা খুবই সহজ কিন্তু প্রথমে এবং যেকোন পজিশনে ডাটা insert করা একটু কঠিন। 

এখানে আমরা তিনটার কাজ একবারে করব। 
array তে ডাটা insert করার জন্য ডাটা এবং পজিশন এই দুইটা ভ্যালুর প্রয়োজন হয়। এখন যে পজিশনে ডাটা করা হবে, ওই পজিশন আগে খালি করতে হবে। এজন্য ওই পজিশন এবং তার পরবর্তী সকল ভ্যালুকে এক ঘর ডানদিকে সরিয়ে দেব। 

![Value insertion in array](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qrmnongyqvtrplcz2wm8.png)

### Deletion
array এর ডাটা delete করা অনেকটাই Data insert করার মত। ওখানে যে পজিশনে নতুন ডাটা একঘর ডানদিকে সরিয়ে কাজ করা হয়েছিল। কিন্তু এখানে যে পজিশনের ডাটা delete করা হবে, তার পরের ডাটা গুলো এক ঘর বাম দিকে সরিয়ে দিতে হবে। insertion এর reverse প্রসেস বলা যেতে পারে। 

![Data Deletion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1oulml5j15og6tst9und.png)


### Searching and Sorting
array এ ভিতরে ডাটা খোজার জন্য বিভিন্ন algorithm আছে। যেমন
1. Linear Search 
2. Binary Search ইত্যাদি 


Searching এর মত Sorting এর জন্য অনেক algorithm আছে। যেমন

1. Bubble Sort 
2. Selection Sort
3. Insertion Sort
4. Quick Sort
5. Merge Sort ইত্যাদি

এসব বিষয়ে সামন আমরা বিস্তারিত জানতে পারব। 

## শেষ
আপনার মতামত জানাতে ভুলবেন না।