Deque ကို သုံး၍ Stack နှင့် Queue ကိုအကောင်အထည်ဖော်ပါ


ခက်ခဲအဆင့် လွယ်ကူသော
မကြာခဏမေးတယ် ဝါသနာရှင်များ GE Healthcare MAQ Myntra Qualcomm မှ
နှစ်ဖက် ဆံပင်ကြိုး စုပုံထား

ပြProbleနာဖော်ပြချက်

“ Deque ကိုသုံးပြီး Implementation Stack and Queue” ပြproblemနာက Deque (Doubly Ended Queue) သုံးပြီး Stack နှင့် Queue ကိုအကောင်အထည်ဖော်ရန် algorithm ကိုရေးရန်ဖော်ပြသည်။

ဥပမာ (ပုံ)

Push(1)
Push(2)
Push(3)
Pop()
isEmpty()
Pop()
Size()
3
false
2
1

ဥပမာ (တန်းစီ)

Enqueue(1)
Enqueue(2)
Enqueue(3)
Dequeue
isEmpty()
Size()
Dequeue()
1
false
2
2

 

algorithm

A deque(Doubly Ended Queue) သည်အထူးတန်းတန်းဖြစ်သည်။ သူသည်အစွန်းနှစ်ဖက်လုံးတွင်သွင်းခြင်းနှင့်ဖျက်ခြင်းကိုပြုလုပ်နိုင်သည်။ Deque ၏ဤစိတ်ဝင်စားဖွယ်ကောင်းသောဂုဏ်သတ္တိကို stack တစ်ခုသို့မဟုတ် Queue တစ်ခုမှအကောင်အထည်ဖော်ရန်အသုံးပြုနိုင်သည်။
အောက်ကပုံက Deque ကိုပြတယ်။

Deque ကို သုံး၍ Stack နှင့် Queue ကိုအကောင်အထည်ဖော်ပါ

စုပုံထား

စုပုံထား LIFO ၏နောက်ဆုံးဖွဲ့စည်းမှုဒေတာဖွဲ့စည်းတည်ဆောက်ပုံဖြစ်သည်။ ဆိုလိုသည်မှာ၎င်းဒြပ်စင်များသည်၎င်းတို့တွန်းချသည့်နေရာနှင့်တူညီသည်။ stack အတွက် push နှင့် pop စစ်ဆင်ရေးကိုပြုလုပ်ရန် Deque ၏ရှေ့ကိုကျွန်ုပ်တို့သုံးကြစို့။

တွန်း (x)

element x တစ်ခုကို stack သို့တွန်းရန် Deque ၏ရှေ့တွင် element x ကိုထည့်ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

ပေါ့ပ် ()

Pop စစ်ဆင်ရေးသည် Push ကဲ့သို့ပင်ဖြစ်သည်။ ဆိုလိုသည်မှာ stack မှ element တစ်ခုကို pop မှ deque ၏ရှေ့မှောက်ရှိ element ကို ဖျက်၍ ပြန်ပို့ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

ဘာမှမရှိပါ()

အကယ်၍ Deque သည်ဗလာလျှင် stack သည်အခြားတစ်ခုမဟုတ်ပါ။ ဒါကြောင့် isEmpty of Deque ကိုပြန်ပို့ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

အရွယ်အစား ()

stack ၏အရွယ်အစားသည် Deque ၏အရွယ်အစားနှင့်တူညီသည်၊ ထို့ကြောင့် deque ၏အရွယ်အစားကိုပြန်သွားပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

ကုဒ်

deque ကို သုံး၍ stack ကိုအကောင်အထည်ဖော်ရန် JAVA Code
import java.util.Deque;
import java.util.LinkedList;
class StackUsingDeque {
    // deque used to implement stack
    private static Deque<Integer> deque;

    private static void push(int x) {
        // Add the element x to the front of Deque
        deque.addFirst(x);
    }

    private static int pop() {
        // if deque is not empty remove an element from the front of deque
        if (!deque.isEmpty()) {
            return deque.removeFirst();
        }
        return -1;
    }

    private static boolean isEmpty() {
        // stack is empty if deque is empty
        return deque.isEmpty();
    }

    private static int size() {
        // size of stack is same as size of Deque
        return deque.size();
    }

    public static void main(String[] args) {
        deque = new LinkedList<>();

        // Example
        push(1);
        push(2);
        push(3);
        System.out.println(pop());
        System.out.println(isEmpty());
        System.out.println(pop());
        System.out.println(size());
    }
}
3
false
2
1
de ++ သုံး၍ stack ကိုအကောင်အထည်ဖော်ရန် C ++ Code
#include <bits/stdc++.h>
using namespace std;

// deque used to implement stack
deque<int> dq;

void push(int x) {
    // Add the element x to the front of Deque
    dq.push_front(x);
}

int pop() {
    // if deque is not empty remove an element from the front of deque
    if (!dq.empty()) {
        int top = dq.front();
        dq.pop_front();
        return top;
    }
    return -1;
}

int size() {
    // size of stack is same as size of Deque
    return dq.size();
}

bool isEmpty() {
    // stack is empty if deque is empty
    return dq.empty();
}

int main() {
    // Example
    push(1);
    push(2);
    push(3);
    cout<<pop()<<endl;
    if (isEmpty()) {
        cout<<"true"<<endl;
    } else {
        cout<<"false"<<endl;
    }
    cout<<pop()<<endl;
    cout<<size()<<endl;
    
    return 0;
}
3
false
2
1

ဆံပင်ကြိုး

Queue သည် First In First Out (FIFO) အချက်အလက်များဖွဲ့စည်းတည်ဆောက်မှုဖြစ်သည်။ dequeue စစ်ဆင်ရေးအတွက် Deque ၏ရှေ့နှင့် Deque ၏နောက်ကို dequeue စစ်ဆင်ရေးအတွက်အသုံးပြုကြပါစို့။

စုစုပေါင်း (x)

Queue တွင် Element တစ်ခုထပ်တိုးရန် Deque ၏ရှေ့တွင် Element ကိုထည့်ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

Dequeue ()

element တစ်ခုအား Queue မှ dequeue ပြုလုပ်ရန် Deque ၏နောက်ဘက်ရှိ element ကိုဖယ်ရှား။ ၎င်းကိုပြန်ပို့ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

ဘာမှမရှိပါ()

အဆိုပါ ဆံပင်ကြိုး အဆိုပါ Deque ဗလာလျှင်အချည်းနှီးဖြစ်လျှင်, မဟုတ်ရင်ဖြစ်ပါတယ်။ ဒါကြောင့် isEmpty of Deque ကိုပြန်ပို့ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

အရွယ်အစား ()

Queue ၏အရွယ်အစားသည် Deque အရွယ်အစားနှင့်တူညီပြီး deque size ကိုပြန်ပို့ပါ။

အချိန်ရှုပ်ထွေး = အို (၁)

ကုဒ်

deque သုံး၍ တန်းစီမှုကိုအကောင်အထည်ဖော်ရန် JAVA Code
import java.util.Deque;
import java.util.LinkedList;
class QueueUsingDeque {
    // deque used to implement queue
    private static Deque<Integer> deque;

    private static void enqueue(int x) {
        // add the element x at the front of deque
        deque.addFirst(x);
    }

    private static int dequeue() {
        // if deque is not empty remove and return the rear of deque
        if (!deque.isEmpty()) {
            return deque.removeLast();
        }
        return -1;
    }

    private static boolean isEmpty() {
        // queue is empty if deque is empty
        return deque.isEmpty();
    }

    private static int size() {
        // size of queue is same as size of deque
        return deque.size();
    }

    public static void main(String[] args) {
        deque = new LinkedList<>();

        // Example
        enqueue(1);
        enqueue(2);
        enqueue(3);
        System.out.println(dequeue());
        System.out.println(isEmpty());
        System.out.println(size());
        System.out.println(dequeue());
    }
}
1
false
2
2
deque သုံးပြီးတန်းစီအကောင်အထည်ဖော်ရန် C ++ Code
#include <bits/stdc++.h>
using namespace std;

// deque used to implement queue
deque<int> dq;

void enqueue(int x) {
    // add the element x at the front of deque
    dq.push_front(x);
}

int dequeue() {
    // if deque is not empty remove and return the rear of deque
    if (!dq.empty()) {
        int front = dq.back();
        dq.pop_back();
        return front;
    }
    return -1;
}

int size() {
    // size of queue is same as size of deque
    return dq.size();
}

bool isEmpty() {
    // queue is empty if deque is empty
    return dq.empty();
}

int main() {
    // Example
    enqueue(1);
    enqueue(2);
    enqueue(3);
    cout<<dequeue()<<endl;
    if (isEmpty()) {
        cout<<"true"<<endl;
    } else {
        cout<<"false"<<endl;
    }
    cout<<size()<<endl;
    cout<<dequeue()<<endl;
    
    return 0;
}
1
false
2
2