queue data structure c with illustration
Кратки увод у ред чекања на Ц ++ са илустрацијом.
Ред је основна структура података, баш као и стек. За разлику од стека који користи ЛИФО приступ, ред користи ФИФО (први улаз, први излаз) приступ. Овим приступом, прва ставка која се додаје у ред је прва ставка која се уклања из реда. Баш као и Стацк, ред је такође линеарна структура података.
инсерт чвор у бинарном стаблу Јава
Аналогијом из стварног света можемо замислити ред аутобуса где путници чекају аутобус у реду или на реду. Први путник у реду први уђе у аутобус, јер је случајно тај путник први дошао.
=> Овде прочитајте популарне серије обуке за Ц ++.
Шта ћете научити:
Ред у Ц ++
У софтверском смислу, ред се може посматрати као скуп или колекција елемената као што је приказано у наставку. Елементи су распоређени линеарно.
Имамо два краја, тј. „Предњи“ и „задњи“ ред. Када је ред празан, тада су оба показивача постављена на -1.
Показивач „задњи“ крај је место одакле се елементи убацују у ред. Операција додавања / уметања елемената у ред назива се „енкуеуе“.
Показивач „предњег“ краја је место одакле се елементи уклањају из реда. Операција уклањања / брисања елемената из реда назива се „уклањање из реда“.
Када је вредност задњег показивача величина-1, тада кажемо да је ред пун. Када је предња страна нулл, онда је ред празан.
Основне операције
Структура података о реду укључује следеће операције:
- ЕнКуеуе: Додаје ставку у ред. Додавање ставке у ред се увек врши на задњем делу реда.
- ДеКуеуе: Уклања ставку из реда. Ставка се уклања или уклања из реда увек са предње стране реда.
- Празно: Проверава да ли је ред празан.
- је пун: Проверава да ли је ред пун.
- завирити: Добија елемент на чекању реда без уклањања.
Енкуеуе
У овом процесу се изводе следећи кораци:
- Проверите да ли је ред пун.
- Ако је пун, произведите грешку преливања и изађите.
- У супротном, повећајте „назад“.
- Додајте елемент на локацију означену са „назад“.
- Врати успех.
Декуеуе
Операција опозива се састоји из следећих корака:
- Проверите да ли је ред празан.
- Ако је празно, прикажите грешку подливања и изађите.
- Иначе, на приступни елемент истиче „фронт“.
- Повећајте „фронт“ да бисте указали на следеће доступне податке.
- Врати успех.
Даље ћемо видети детаљну илустрацију операција уметања и брисања у реду.
Илустрација
Ово је празан ред, тако да смо задати и празни поставили на -1.
Даље, у ред додајемо 1 и као резултат, задњи показивач се помера напред за једно место.
На следећој слици додајемо елемент 2 у ред померањем задњег показивача напред за још један корак.
На следећој слици додајемо елемент 3 и померамо задњи показивач за 1.
У овом тренутку, задњи показивач има вредност 2, док је предњи показивач на 0тхлокација.
Затим бришемо елемент на који је указао предњи показивач. Како је предњи показивач на 0, елемент који се брише је 1.
Тако је први елемент унет у ред, тј. 1, први елемент уклоњен из реда. Као резултат, након првог уклањања реда, предњи показивач сада ће бити померен напред т0 на следећу локацију која је 1.
Имплементација низа за ред
Применимо структуру података о реду користећи Ц ++.
#include #define MAX_SIZE 5 using namespace std; class Queue { private: int myqueue(MAX_SIZE), front, rear; public: Queue(){ front = -1; rear = -1; } boolisFull(){ if(front == 0 && rear == MAX_SIZE - 1){ return true; } return false; } boolisEmpty(){ if(front == -1) return true; else return false; } void enQueue(int value){ if(isFull()){ cout << endl<< 'Queue is full!!'; } else { if(front == -1) front = 0; rear++; myqueue(rear) = value; cout << value << ' '; } } int deQueue(){ int value; if(isEmpty()){ cout << 'Queue is empty!!' <= rear){ //only one element in queue front = -1; rear = -1; } else { front++; } cout << endl < ' << value << ' from myqueue'; return(value); } } /* Function to display elements of Queue */ void displayQueue() { int i; if(isEmpty()) { cout << endl << 'Queue is Empty!!' << endl; } else { cout << endl << 'Front = ' << front; cout << endl << 'Queue elements : '; for(i=front; i<=rear; i++) cout << myqueue(i) << ' '; cout << endl << 'Rear = ' << rear << endl; } } }; int main() { Queue myq; myq.deQueue(); //deQueue cout<<'Queue created:'< queue is full myq.enQueue(60); myq.displayQueue(); //deQueue =>removes 10 myq.deQueue(); //queue after dequeue myq.displayQueue(); return 0; }
Излаз:
Ред је празан !!
Ред је створен:
10 20 30 40 50
Ред је пун !!
Фронт = 0
Елементи реда: 10 20 30 40 50
Задњи = 4
Избрисано => 10 из микуеуе
Фронт = 1
Елементи реда: 20 30 40 50
Задњи = 4
Горња имплементација приказује ред представљен као низ. Наводимо мак_сизе за низ. Такође дефинишемо операције енкуеуе и декуеуе, као и операције исФулл и исЕмпти.
Доље је дата Јава имплементација структуре података о реду.
// A class representing a queue class Queue { int front, rear, size; int max_size; int myqueue(); public Queue(int max_size) { this.max_size = max_size; front = this.size = 0; rear = max_size - 1; myqueue = new int(this.max_size); } //if size = max_size , queue is full boolean isFull(Queue queue) { return (queue.size == queue.max_size); } // size = 0, queue is empty boolean isEmpty(Queue queue) { return (queue.size == 0); } // enqueue - add an element to the queue void enqueue( int item) { if (isFull(this)) return; this.rear = (this.rear + 1)%this.max_size; this.myqueue(this.rear) = item; this.size = this.size + 1; System.out.print(item + ' ' ); } // dequeue - remove an elment from the queue int dequeue() { if (isEmpty(this)) return Integer.MIN_VALUE; int item = this.myqueue(this.front); this.front = (this.front + 1)%this.max_size; this.size = this.size - 1; return item; } // move to front of the queue int front() { if (isEmpty(this)) return Integer.MIN_VALUE; return this.myqueue(this.front); } // move to the rear of the queue int rear() { if (isEmpty(this)) return Integer.MIN_VALUE; return this.myqueue(this.rear); } } // main class class Main { public static void main(String() args) { Queue queue = new Queue(1000); System.out.println('Queue created as:'); queue.enqueue(10); queue.enqueue(20); queue.enqueue(30); queue.enqueue(40); System.out.println('
Element ' + queue.dequeue() + ' dequeued from queue
'); System.out.println('Front item is ' + queue.front()); System.out.println('Rear item is ' + queue.rear()); } }
Излаз:
Ред је створен као:
10 20 30 40
Елемент 10 уклоњен из реда
Предња ставка је 20
Задњи део је 40
Изнад је примена слична примени Ц ++.
Даље, применимо ред у Ц ++ помоћу повезане листе.
Имплементација повезане листе за ред:
#include using namespace std; struct node { int data; struct node *next; }; struct node* front = NULL; struct node* rear = NULL; struct node* temp; void Insert(int val) { if (rear == NULL) { rear = new node; rear->next = NULL; rear->data = val; front = rear; } else { temp=new node; rear->next = temp; temp->data = val; temp->next = NULL; rear = temp; } } void Delete() { temp = front; if (front == NULL) { cout<<'Queue is empty!!'next; cout<<'Element deleted from queue is : ' Излаз:
Ред је створен:
10 20 30 40 50
Елемент избрисан из реда је: 10
Ред након једног брисања:
20 30 40 50
најбоље место за бесплатно гледање анимеа
Стацк вс. Ред чекања
Стекови и редови су секундарне структуре података које се могу користити за чување података. Могу се програмирати помоћу примарних структура података као што су низови и повезане листе. Након детаљног разматрања обе структуре података, време је да разговарамо о главним разликама између ове две структуре података.
Стацкс Редови Користи ЛИФО (Ласт ин, Фирст оут) приступ. Користи ФИФО (Фирст ин, Фирст оут) приступ. Ставке се додају или бришу са само једног краја који се назива „Врх“ стека. Ставке се додају са „задњег“ краја реда и уклањају се са „предње стране“ реда. Основне операције за стек су 'пусх' и 'Поп'. Основне операције за ред су „енкуеуе“ и „декуеуе“. Све радње на стеку можемо обавити задржавањем само једног показивача за приступ врху стека. У редовима треба да одржавамо два показивача, један за приступ предњем делу реда, а други за приступ задњем делу реда. Стек се углавном користи за решавање рекурзивних проблема. Редови се користе за решавање проблема у вези са нарученом обрадом.
Апплицатионс Оф Куеуе
Размотримо различите примене структуре података о реду у наставку.
- Структура података о реду се користи у различитим заказивањима ЦПУ-а и дискова. Овде имамо више задатака који захтевају ЦПУ или диск истовремено. Време процесора или диска предвиђено је за сваки задатак помоћу реда.
- Ред се такође може користити за споол штампање при чему је број задатака за штампу смештен у ред.
- Руковање прекидима у системима у реалном времену врши се коришћењем структуре података о реду. Прекиди се обрађују редоследом којим стижу.
- Претрага прва у ширину у којој се прелазе суседни чворови дрвета пре преласка на следећи ниво користи ред за имплементацију.
- Телефонски системи позивног центра користе редове за задржавање позива док на њих не одговоре представници услуга.
Генерално, можемо рећи да се структура података о реду користи кад год нам је потребно да се ресурси или ставке сервисирају редоследом који стигну, тј. Прво у, прво изашло.
Закључак
Ред је ФИФО (Фирст Ин, Фирст Оут) структура података која се углавном користи у ресурсима где је потребно распоређивање. Има два показивача позади и са предње стране на два краја и они се користе за уметање елемента и уклањање елемента у / из реда.
У нашем следећем упутству научићемо о неким проширењима реда као што су приоритетни ред и кружни ред.
=> Погледајте овде како бисте истражили целу листу водича за Ц ++.
Препоручено читање
- Структура података приоритетног реда у Ц ++ са илустрацијом
- Редослед приоритета у СТЛ-у
- Структура података стека у Ц ++ са илустрацијом
- Структура података кружно повезане листе на Ц ++ са илустрацијом
- Повезана структура података листе на Ц ++ са илустрацијом
- Структура података двоструко повезане листе у Ц ++ са илустрацијом
- Увод у структуре података на језику Ц ++
- ЈМетер параметризација података коришћењем кориснички дефинисаних променљивих