Diferencia entre una cola estática y una lista enlazada individualmente

Cola estática : una cola es una lista ordenada de elementos. Siempre funciona en el modo primero en entrar, primero en salir (FIFO). Todos los elementos se insertan en la PARTE TRASERA y se eliminan en la PARTE DELANTERA de la cola. En la implementación de la Cola estática, se usará una array para que todas las operaciones de la cola estén basadas en índices, lo que hace que todas las operaciones sean más rápidas, excepto la eliminación, ya que la eliminación requiere el desplazamiento de todos los elementos restantes al frente en una posición.
Una cola estática es una cola de tamaño fijo implementada usando una array .
 

Lista enlazada individualmente : una lista enlazada también es una lista ordenada de elementos. Puede agregar un elemento en cualquier lugar de la lista, cambiar un elemento en cualquier lugar de la lista o eliminar un elemento de cualquier posición en la lista. Cada Node de la lista almacena el contenido y un puntero o referencia al siguiente Node de la lista. Para almacenar una sola lista enlazada, solo se debe almacenar la referencia o el puntero al primer Node de esa lista. El último Node en una sola lista enlazada apunta a nada (o nulo).
 

Estas son algunas de las principales diferencias entre una cola estática y una lista enlazada individualmente 
 

cola estática Lista de enlaces individuales
La cola es una colección de uno o más elementos dispuestos en la memoria de manera contigua. 
 
Una lista enlazada es una colección de uno o más elementos dispuestos en la memoria de forma no contigua. 
 
La cola estática siempre tiene un tamaño fijo. 
 
El tamaño de la lista nunca es fijo. 
 
En Queue, solo se almacena un único tipo de información porque la implementación de Queue estática es a través de Array. 
 
La lista también almacenó la dirección del siguiente Node junto con su contenido. 
 
Static Queue está basado en índices. 
 
La lista de enlaces únicos se basa en referencias. 
 
La inserción siempre se puede realizar en un único extremo denominado REAR y la eliminación en el otro extremo denominado FRONT
 
Tanto la inserción como la eliminación se pueden realizar en cualquier lugar dentro de la lista. 
 
La cola siempre se basa en FIFO. 
 
La lista puede estar basada en FIFI o LIFO, etc. 
 
La cola tiene dos punteros DELANTERO y TRASERO. 
 
Mientras que List tiene solo un puntero llamado básicamente HEAD. 
 

A continuación se muestra la implementación de una cola estática
 

Java

// Java program to implement a queue using an array
class Queue {
    private static int front, rear, capacity;
    private static int queue[];
 
    Queue(int c)
    {
        front = rear = 0;
        capacity = c;
        queue = new int[capacity];
    }
 
    // function to insert an element
    // at the rear of the queue
    static void queueEnqueue(int data)
    {
        // check queue is full or not
        if (capacity == rear) {
            System.out.printf("\nQueue is full\n");
            return;
        }
 
        // insert element at the rear
        else {
            queue[rear] = data;
            rear++;
        }
        return;
    }
 
    // function to delete an element
    // from the front of the queue
    static void queueDequeue()
    {
        // if queue is empty
        if (front == rear) {
            System.out.printf("\nQueue is empty\n");
            return;
        }
 
        // shift all the elements from index 2 till rear
        // to the right by one
        else {
            for (int i = 0; i < rear - 1; i++) {
                queue[i] = queue[i + 1];
            }
 
            // store 0 at rear indicating there's no element
            if (rear < capacity)
                queue[rear] = 0;
 
            // decrement rear
            rear--;
        }
        return;
    }
 
    // print queue elements
    static void queueDisplay()
    {
        int i;
        if (front == rear) {
            System.out.printf("\nQueue is Empty\n");
            return;
        }
 
        // traverse front to rear and print elements
        for (i = front; i < rear; i++) {
            System.out.printf(" %d <-- ", queue[i]);
        }
        return;
    }
 
    // print front of queue
    static void queueFront()
    {
        if (front == rear) {
            System.out.printf("\nQueue is Empty\n");
            return;
        }
        System.out.printf("\nFront Element is: %d", queue[front]);
        return;
    }
}
 
public class StaticQueueinjava {
 
    // Driver code
    public static void main(String[] args)
    {
        // Create a queue of capacity 4
        Queue q = new Queue(4);
 
        // print Queue elements
        q.queueDisplay();
 
        // inserting elements in the queue
        q.queueEnqueue(20);
        q.queueEnqueue(30);
        q.queueEnqueue(40);
        q.queueEnqueue(50);
 
        // print Queue elements
        q.queueDisplay();
 
        // insert element in the queue
        q.queueEnqueue(60);
 
        // print Queue elements
        q.queueDisplay();
 
        q.queueDequeue();
        q.queueDequeue();
        System.out.printf("\n\nafter two node deletion\n\n");
 
        // print Queue elements
        q.queueDisplay();
 
        // print front of the queue
        q.queueFront();
    }
}

C#

// C# program to implement a queue using an array
using System;
     
public class Queue
{
    private static int front, rear, capacity;
    private static int []queue;
 
    public Queue(int c)
    {
        front = rear = 0;
        capacity = c;
        queue = new int[capacity];
    }
 
    // function to insert an element
    // at the rear of the queue
    public void queueEnqueue(int data)
    {
        // check queue is full or not
        if (capacity == rear)
        {
            Console.Write("\nQueue is full\n");
            return;
        }
 
        // insert element at the rear
        else
        {
            queue[rear] = data;
            rear++;
        }
        return;
    }
 
    // function to delete an element
    // from the front of the queue
    public void queueDequeue()
    {
        // if queue is empty
        if (front == rear)
        {
            Console.Write("\nQueue is empty\n");
            return;
        }
 
        // shift all the elements from index 2 till rear
        // to the right by one
        else
        {
            for (int i = 0; i < rear - 1; i++)
            {
                queue[i] = queue[i + 1];
            }
 
            // store 0 at rear indicating there's no element
            if (rear < capacity)
                queue[rear] = 0;
 
            // decrement rear
            rear--;
        }
        return;
    }
 
    // print queue elements
    public void queueDisplay()
    {
        int i;
        if (front == rear)
        {
            Console.Write("\nQueue is Empty\n");
            return;
        }
 
        // traverse front to rear and print elements
        for (i = front; i < rear; i++)
        {
            Console.Write(" {0} <-- ", queue[i]);
        }
        return;
    }
 
    // print front of queue
    public void queueFront()
    {
        if (front == rear)
        {
            Console.Write("\nQueue is Empty\n");
            return;
        }
        Console.Write("\nFront Element is: {0}", queue[front]);
        return;
    }
}
 
public class StaticQueueinjava
{
 
    // Driver code
    public static void Main(String[] args)
    {
        // Create a queue of capacity 4
        Queue q = new Queue(4);
 
        // print Queue elements
        q.queueDisplay();
 
        // inserting elements in the queue
        q.queueEnqueue(20);
        q.queueEnqueue(30);
        q.queueEnqueue(40);
        q.queueEnqueue(50);
 
        // print Queue elements
        q.queueDisplay();
 
        // insert element in the queue
        q.queueEnqueue(60);
 
        // print Queue elements
        q.queueDisplay();
 
        q.queueDequeue();
        q.queueDequeue();
        Console.Write("\n\nafter two node deletion\n\n");
 
        // print Queue elements
        q.queueDisplay();
 
        // print front of the queue
        q.queueFront();
    }
}
 
/* This code contributed by PrinciRaj1992 */
Producción: 

Queue is Empty
 20 <--  30 <--  40 <--  50 <-- 
Queue is full
 20 <--  30 <--  40 <--  50 <-- 

after two node deletion

 40 <--  50 <-- 
Front Element is: 40

 

A continuación se muestra la implementación de una lista enlazada individual
 

Java

// Java program to implement singly linked list
class SinglyLList {
 
    class Node {
 
        // node variables
        int data;
        Node next;
 
        public Node(int data)
        {
            this.data = data;
            this.next = null;
        }
    }
 
    // create reference variable of Node
    Node head;
 
    // function to insert a node
    // at the beginning of the list
    void InsertAtStart(int data)
    {
        // create a node
        Node new_node = new Node(data);
 
        new_node.next = head;
        head = new_node;
    }
 
    // function to insert node
    // at the end of the list
    void InsertAtLast(int data)
    {
 
        Node new_node = new Node(data);
        if (head == null) {
            head = new_node;
            return;
        }
 
        new_node.next = null;
 
        Node last = head;
        while (last.next != null) {
            last = last.next;
        }
 
        last.next = new_node;
    }
 
    // function to delete a node
    // at the beginning of the list
    void DeleteAtStart()
    {
        if (head == null) {
            System.out.println("List is empty");
            return;
        }
        head = head.next;
    }
 
    // function to delete a node at
    // a given position in the list
    void DeleteAtPos(int pos) throws Exception
    {
        int position = 0;
        if (pos > Count() || pos < 0) {
            throw new Exception("Incorrect position exception");
        }
        Node temp = head;
        while (position != pos - 1) {
            temp = temp.next;
            position++;
        }
        temp.next = temp.next.next;
    }
 
    // function to delete a node
    // from the end of the list
    void DeleteAtLast()
    {
        Node delete = head;
        while (delete.next != null
               && delete.next.next != null) {
            delete = delete.next;
        }
        delete.next = null;
    }
 
    // function to display all the nodes of the list
    void Display()
    {
        Node disp = head;
        while (disp != null) {
            System.out.print(disp.data + "->");
            disp = disp.next;
        }
    }
 
    // function to return the total nodes in the list
    int Count()
    {
        int elements = 0;
        Node count = head;
        while (count != null) {
            count = count.next;
            elements++;
        }
        return elements;
    }
}
 
public class GFG {
 
    // Driver code
    public static void main(String[] args) throws Exception
    {
        // create object of class singlyList
        SinglyLList list = new SinglyLList();
 
        // insert elements of singly linked list
        // at beginning
        list.InsertAtStart(3);
        list.InsertAtStart(2);
        list.InsertAtStart(1);
 
        // print linked list elements
        list.Display();
 
        // insert element at the end of list
 
        list.InsertAtLast(1);
        System.out.println("\nafter inserting node at the end\n ");
 
        // print linked list elements
        list.Display();
 
        // delete an element at the given position
        list.DeleteAtPos(1);
 
        // delete starting element
        list.DeleteAtStart();
 
        // delete last element
        list.DeleteAtLast();
 
        System.out.println("\nafter deleting node: second, first and last\n ");
 
        // print linked list elements
        list.Display();
    }
}

C#

// C# program to implement singly linked list
using System;
 
public class SinglyLList
{
 
    public class Node
    {
 
        // node variables
        public int data;
        public Node next;
 
        public Node(int data)
        {
            this.data = data;
            this.next = null;
        }
    }
 
    // create reference variable of Node
    public Node head;
 
    // function to insert a node
    // at the beginning of the list
    public void InsertAtStart(int data)
    {
        // create a node
        Node new_node = new Node(data);
 
        new_node.next = head;
        head = new_node;
    }
 
    // function to insert node
    // at the end of the list
    public void InsertAtLast(int data)
    {
 
        Node new_node = new Node(data);
        if (head == null)
        {
            head = new_node;
            return;
        }
 
        new_node.next = null;
 
        Node last = head;
        while (last.next != null)
        {
            last = last.next;
        }
 
        last.next = new_node;
    }
 
    // function to delete a node
    // at the beginning of the list
    public void DeleteAtStart()
    {
        if (head == null)
        {
            Console.WriteLine("List is empty");
            return;
        }
        head = head.next;
    }
 
    // function to delete a node at
    // a given position in the list
    public void DeleteAtPos(int pos)
    {
        int position = 0;
        if (pos > Count() || pos < 0)
        {
            throw new Exception("Incorrect position exception");
        }
        Node temp = head;
        while (position != pos - 1)
        {
            temp = temp.next;
            position++;
        }
        temp.next = temp.next.next;
    }
 
    // function to delete a node
    // from the end of the list
    public void DeleteAtLast()
    {
        Node delete = head;
        while (delete.next != null
            && delete.next.next != null)
        {
            delete = delete.next;
        }
        delete.next = null;
    }
 
    // function to display all the nodes of the list
    public void Display()
    {
        Node disp = head;
        while (disp != null)
        {
            Console.Write(disp.data + "->");
            disp = disp.next;
        }
    }
 
    // function to return the total nodes in the list
    public int Count()
    {
        int elements = 0;
        Node count = head;
        while (count != null)
        {
            count = count.next;
            elements++;
        }
        return elements;
    }
}
 
class GFG
{
 
    // Driver code
    public static void Main(String[] args)
    {
        // create object of class singlyList
        SinglyLList list = new SinglyLList();
 
        // insert elements of singly linked list
        // at beginning
        list.InsertAtStart(3);
        list.InsertAtStart(2);
        list.InsertAtStart(1);
 
        // print linked list elements
        list.Display();
 
        // insert element at the end of list
 
        list.InsertAtLast(1);
        Console.WriteLine("\nafter inserting node at the end\n ");
 
        // print linked list elements
        list.Display();
 
        // delete an element at the given position
        list.DeleteAtPos(1);
 
        // delete starting element
        list.DeleteAtStart();
 
        // delete last element
        list.DeleteAtLast();
 
        Console.WriteLine("\nafter deleting node: second, first and last\n ");
 
        // print linked list elements
        list.Display();
    }
}
 
// This code has been contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript program to implement
// singly linked list
 
     class Node {
            constructor(val) {
                this.data = val;
                this.next = null;
            }
        }
 
    // create reference variable of Node
    var head;
 
    // function to insert a node
    // at the beginning of the list
    function InsertAtStart(data) {
        // create a node
    var new_node = new Node(data);
 
        new_node.next = head;
        head = new_node;
    }
 
    // function to insert node
    // at the end of the list
    function InsertAtLast(data) {
 
     var new_node = new Node(data);
        if (head == null) {
            head = new_node;
            return;
        }
 
        new_node.next = null;
 
        var last = head;
        while (last.next != null) {
            last = last.next;
        }
 
        last.next = new_node;
    }
 
    // function to delete a node
    // at the beginning of the list
    function DeleteAtStart() {
        if (head == null) {
            document.write("List is empty");
            return;
        }
        head = head.next;
    }
 
    // function to delete a node at
    // a given position in the list
    function DeleteAtPos(pos) {
        var position = 0;
        if (pos > Count() || pos < 0) {
             
        }
        var temp = head;
        while (position != pos - 1) {
            temp = temp.next;
            position++;
        }
        temp.next = temp.next.next;
    }
 
    // function to delete a node
    // from the end of the list
    function DeleteAtLast() {
     var deletenode = head;
        while (deletenode.next != null &&
        deletenode.next.next != null) {
            deletenode = deletenode.next;
        }
        deletenode.next = null;
    }
 
    // function to display all the nodes of the list
    function Display() {
    var disp = head;
        while (disp != null) {
            document.write(disp.data + "->");
            disp = disp.next;
        }
    }
 
    // function to return the total nodes in the list
    function Count() {
        var elements = 0;
        var count = head;
        while (count != null) {
            count = count.next;
            elements++;
        }
        return elements;
    }
 
 
  
 
    // Driver code
        // create object of class singlyList
         
 
        // insert elements of singly linked list
        // at beginning
        InsertAtStart(3);
        InsertAtStart(2);
        InsertAtStart(1);
 
        // print linked list elements
        Display();
 
        // insert element at the end of list
 
        InsertAtLast(1);
        document.write(
        "<br/>after inserting node at the end<br/><br/> "
        );
 
        // print linked list elements
        Display();
 
        // delete an element at the given position
        DeleteAtPos(1);
 
        // delete starting element
        DeleteAtStart();
 
        // delete last element
        DeleteAtLast();
 
        document.write(
        "<br/>after deleting node: second, first and last<br/>"
        );
 
        // print linked list elements
        Display();
 
// This code is contributed by todaysgaurav
 
</script>
Producción: 

1->2->3->
after inserting node at the end
 
1->2->3->1->
after deleting node: second, first and last
 
3->

 

Publicación traducida automáticamente

Artículo escrito por Rajput-Ji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *