ডাটা স্ট্রাকচার হল স্ট্রাকচার্ড পদ্ধতিতে সংগঠিত ডাটার সংগ্রহ। নীচে ব্যাখ্যা করা হিসাবে এটি দুটি প্রকারে বিভক্ত -
-
লিনিয়ার ডেটা স্ট্রাকচার - ডেটা একটি লিনিয়ার ফ্যাশনে সংগঠিত হয়। উদাহরণস্বরূপ, অ্যারে, স্ট্রাকচার, স্ট্যাক, সারি, লিঙ্ক করা তালিকা।
-
অরৈখিক ডেটা কাঠামো - ডেটা একটি ক্রমানুসারে সংগঠিত হয়। উদাহরণস্বরূপ, গাছ, গ্রাফ, সেট, টেবিল।
সারি
এটি একটি রৈখিক ডেটা স্ট্রাকচার, যেখানে সন্নিবেশটি পিছনের প্রান্তে করা হয় এবং সামনের প্রান্তে মুছে ফেলা হয়৷
সারির ক্রম হল FIFO – ফার্স্ট ইন ফার্স্ট আউট
অপারেশনস
- ঢোকান - একটি সারিতে একটি উপাদান সন্নিবেশ করান।
- মুছুন - সারি থেকে একটি উপাদান মুছে ফেলা।
শর্তগুলি
-
সারি ওভার প্রবাহ − একটি সম্পূর্ণ সারিতে একটি উপাদান সন্নিবেশ করার চেষ্টা করা হচ্ছে৷
-
প্রবাহের অধীনে সারি − একটি খালি সারি থেকে একটি উপাদান মুছে ফেলার চেষ্টা করা হচ্ছে৷
অ্যালগরিদম
নিচে সন্নিবেশ ( ) -
এর জন্য একটি অ্যালগরিদম দেওয়া হল- সারি ওভারফ্লো পরীক্ষা করুন।
if (r==n) printf ("Queue overflow")
- অন্যথায়, সারিতে একটি উপাদান প্রবেশ করান।
q[r] = item r++
নিচে মোছা ( ) এর জন্য একটি অ্যালগরিদম দেওয়া হল৷ −
- প্রবাহের অধীনে সারির জন্য পরীক্ষা করুন।
if (f==r) printf ("Queue under flow")
- অন্যথায়, সারি থেকে একটি উপাদান মুছে দিন।
item = q[f] f++
নিচে ডিসপ্লে ( ) এর জন্য একটি অ্যালগরিদম দেওয়া হল −
- সারিটি খালি আছে কি না তা পরীক্ষা করুন৷ ৷
if (f==r) printf("Queue is empty")
- অন্যথায়, 'f' থেকে 'r' পর্যন্ত সমস্ত উপাদান প্রিন্ট করুন।
for(i=f; i<r; i++) printf ("%d", q[i]);
প্রোগ্রাম
অ্যারে -
ব্যবহার করে সারি বাস্তবায়নের জন্য সি প্রোগ্রামটি নিচে দেওয়া হল#include<limits.h> #include<stdio.h> #include <stdlib.h> struct Queue { int front, rear, size; unsigned capacity; int* array; }; struct Queue* createQueue(unsigned capacity){ struct Queue* queue = (struct Queue*)malloc( sizeof(struct Queue)); queue->capacity = capacity; queue->front = queue->size = 0; queue->rear = capacity - 1; queue->array = (int*)malloc( queue->capacity * sizeof(int)); return queue; } //if queue is full int isFull(struct Queue* queue){ return (queue->size == queue->capacity); } // Queue is empty int isEmpty(struct Queue* queue){ return (queue->size == 0); } void Equeue(struct Queue* queue, int item){ if (isFull(queue)) return; queue->rear = (queue->rear + 1) % queue->capacity; queue->array[queue->rear] = item; queue->size = queue->size + 1; printf("%d entered into queue\n", item); } int Dqueue(struct Queue* queue){ if (isEmpty(queue)) return INT_MIN; int item = queue->array[queue->front]; queue->front = (queue->front + 1) % queue->capacity; queue->size = queue->size - 1; return item; } // Function to get front of queue int front(struct Queue* queue){ if (isEmpty(queue)) return INT_MIN; return queue->array[queue->front]; } // Function to get rear of queue int rear(struct Queue* queue){ if (isEmpty(queue)) return INT_MIN; return queue->array[queue->rear]; } int main(){ struct Queue* queue = createQueue(1000); Equeue(queue, 100); Equeue(queue, 200); Equeue(queue, 300); Equeue(queue, 400); printf("%d is deleted element from queue\n\n", Dqueue(queue)); printf("1st item in queue is %d\n", front(queue)); printf("last item in queue %d\n", rear(queue)); return 0; }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
100 entered into queue 200 entered into queue 300 entered into queue 400 entered into queue 100 is deleted element from queue 1st item in queue is 200 last item in queue 400