برنامه نویسی

ساختار داده ها: صف ایمن ، عمومی و دوتایی را اجرا کنید.

امروز یک صف دو پایان در جاوا را پیاده سازی خواهیم کرد. ما از ژنرال ها استفاده خواهیم کرد تا صف ما بتواند با هرگونه داده ای مانند عدد صحیح ، دو برابر ، رشته ، اتومبیل ، کامیون ، گربه ، سگ و غیره کار کند … 🙂

کد منبع در این مخزن GitHub است. https://github.com/khadija-ashraf/data-structure-algorithm.git

در گره یک کلاس عمومی است. این بدان معناست که این کلاس می تواند داده های مختلفی را بگیرد. بوها گره Object دارای نوع “داده” عمومی و دو اشاره گر “Prev” و “Next” است. “Prev” به گره قبلی اشاره می کند ، و نشانگر “Next” به گره بعدی در صف اشاره می کند.

گره ها در یک deque

package com.deque;


class Node{
    T data;
    Node prev;
    Node next;

    public Node(T data){
        this.data = data;
        this.prev = null;
        this.next = null;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

عیاش رابط deque است. این رفتار deque را چیدمان می کند.

package com.deque;

// A custom Double Ended Queue (Deque) implementation:

public interface MyDeque {

    public  T addHead(T data);
    public  T addTail(T data);

    public T getHead();
    public T getTail();

    public  boolean contains(T data);

    public T removeHead();
    public T removeTail();

    public T peekHead();
    public T peekTail();

    public T pollHead();
    public T pollTail();

    public T pop();

    public int size();
    public void printDequq() ;

}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Deque یک صف است که در آن می توانیم از انتهای جلو و عقب آن را درج و حذف کنیم. برعکس ، در یک صف اصلی ما در جلو قرار می دهیم و از انتهای عقب خارج می شویم.

در یک deque ، ما یک گره سر و یک گره دم داریم که به ترتیب شروع و پایان صف را نشان می دهد. ما از انتهای جلو و عقب از سر و گره های ارجاع شده استفاده می کنیم.

class MyDequeImpl implements MyDeque{
    private Node head;
    private Node tail;
    private int size;

    public MyDequeImpl(){
        head = null;
        tail = null;
        size = 0;
    }

    public  T addHead(T data) {
        Node current = new Node<>(data);
        if(head == null) {
            head = current;
            tail = current;
            size++;
            return data;
        }
        current.next = head;
        head.prev = current;
        head = current;
        size++;

        return data;
    }

    public  T addTail(T data) {
        Node current = new Node(data);

        if(tail == null) {
            head = current;
            tail = current;
            size++;
            return data;
        }
        tail.next = current;
        current.prev = tail;
        tail = current;
        size++;
        return data;
    }

    public T getHead() {
        if (head == null)
            return null;
        return head.data;
    }

    public T getTail() {
        if(tail == null)
            return null;
        return tail.data;
    }

    public  boolean contains(T data) {
        if(head == null)
            return false;

        if(head.data == data) {
            return true;
        }

        if(tail.data == data) {
            return true;
        }

        Node current = head;

        while(current != null) {
            if(current.data == data) {
                return true;
            }
            current = current.next;
        }
        return false;
    }

    public T removeHead() {
        if(head == null) {
            return null;
        }

        T removedData = head.data;

        head = head.next;

        if(head == null) {
            tail = null;
        } else {
            head.prev = null;
        }
        size--;
        return removedData;
    }

    public T removeTail() {
        if(tail == null) {
            return null;
        }
        if(tail.prev == null) {
            return null;
        }
        T removedData = tail.data;
        tail = tail.prev;
        if(tail == null) {
            head = null;
        } else {
            tail.next = null;
        }
        size--;
        return removedData;
    }

    public T peekHead() {
        if(head == null)
            return null;

        return head.data;
    }

    public T peekTail() {
        if(tail == null)
            return null;

        return tail.data;
    }

    public T pollHead() {
        if(head == null)
            return null;

        T polledData = head.data;

        head = head.next;

        if(head == null) {
            tail = null;
        } else {
            head.prev = null;
        }
        size--;

        return polledData;
    }

    @Override
    public T pollTail() {
        if(tail == null) {
            return null;
        }
        T pollData = tail.data;

        tail = tail.prev;

        if(tail == null)
            head = null;
        else {
            tail.next = null;
        }

        size--;
        return pollData;
    }

    public T pop() {
        if(tail == null)
            return null;

        T popedData = tail.data;

        tail = tail.prev;

        if(tail == null)
            head = null;
        else {
            tail.next = null;
        }
        size--;
        return popedData;
    }

    public int size() {
        return size;
    }
    public void printDequq() {
        System.out.println("Printing the deque of size: "+size());
        if (head == null) {
            System.out.println("Dequq is empty.");
        }
        Node current = head;
        while(current != null) {
            System.out.println(current.data);
            current = current.next;
        }
    }

}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در زیر برخی درج های آزمایش ، حذف ، نظرسنجی ، نگاه کردن و پاپ وجود دارد.

package com.deque;

public class TestDeque{
    public static void main(String arg[]) {
        MyDeque deque = new MyDequeImpl<>();
        deque.addHead("cat");
        deque.printDequq();
        deque.addHead("dog");
        deque.printDequq();
        deque.addHead("rabbit");
        deque.printDequq();
        deque.addHead("elephant");
        deque.printDequq();
        deque.addTail("squirrel");
        deque.printDequq();

        System.out.println("=============");
        System.out.println(deque.getHead());
        System.out.println(deque.getTail());
        System.out.println(deque.contains("monkey"));
        System.out.println(deque.contains("rabbit"));
        System.out.println(deque.removeHead());
        System.out.println(deque.removeTail());
        System.out.println("=======");

        System.out.println(deque.getHead());
        System.out.println(deque.getTail());
        System.out.println("=======");
        System.out.println(deque.peekHead());
        System.out.println(deque.peekTail());
        System.out.println("========");
        System.out.println(deque.pollHead());
        System.out.println(deque.pollTail());
        deque.printDequq();

        System.out.println("========");
        System.out.println(deque.pop());
        deque.printDequq();

        deque.addHead("birds");

        deque.printDequq();
    }
}


حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا