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 */
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>
1->2->3-> after inserting node at the end 1->2->3->1-> after deleting node: second, first and last 3->