You are on page 1of 24

INSTITUTO

TECNOLÓGICOSUPERIOR DE
SAN ANDRÉSTUXTLA
INGENIERÍA EN SISTEMAS COMPUTACIONALES
ESTRUCTURA DE DATOS
MTI ANGELINA MÁRQUEZ JIMÉNEZ.
REPORTE DE PRÁCTICA NO. 4.
INTEGRANTES: ISAAC CHAGA CHAGALA
LEONARDO HERNÁNDEZ AZAMAR
GRUPO 304B
PERIODO: SEPTIEMBRE 2023- ENERO2024
SAN ANDRÉS TUXTLA, VERACRUZ.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

PRÁCTICA NO. 4
NOMBRE DE LA Solución de problemas con TDA´S
PRÁCTICA
OBJETIVO El estudiante resolverá identificará si una palabra es
palíndromo o no, mediante la aplicación de TDA´S lineales con
listas enlazadas.
FUNDAMENTO TEÓRICO

LISTAS ENLAZADAS
Una lista enlazada consta de una serie de elementos, llamados nodos, que se conectan
entre sí mediante punteros o referencias. Cada nodo contiene dos partes principales: el
valor del dato almacenado y un puntero al siguiente nodo de la lista. El último nodo de la
lista apunta a nil, lo que indica el final de la secuencia.

1. Existen varios tipos de listas enlazadas, como las listas enlazadas simples, las listas
enlazadas dobles y las listas enlazadas circulares. La principal diferencia entre estos
tipos radica en la forma en que los nodos están conectados entre sí. Listas
enlazadas simples: En estas listas, cada nodo tiene un puntero al siguiente nodo de
la lista.
2. Listas enlazadas dobles: Cada nodo tiene un puntero al siguiente nodo y otro al nodo
anterior, lo que facilita la navegación en ambas direcciones.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

3. Listas enlazadas circulares: El último nodo de la lista apunta al primer nodo en lugar
de nil, lo que crea un bucle circular.[1]

Aplicaciones de las listas enlazadas


Las listas enlazadas son una estructura de datos versátil que se utiliza en diversos
escenarios y aplicaciones. Algunos ejemplos de uso incluyen:

Manejo de memoria: Las listas enlazadas pueden ser útiles en la implementación de


sistemas de gestión de memoria, como el mantenimiento de bloques de memoria libres en
un sistema operativo, ya que permiten agregar y eliminar elementos de manera eficiente.[1]

Implementación de otras estructuras de datos: Las listas enlazadas pueden utilizarse


como base para construir estructuras de datos más complejas, como pilas, colas, colas de
prioridad y árboles.[1]

Listas de adyacencia: En teoría de grafos, las listas enlazadas pueden emplearse para
representar listas de adyacencia, que son una forma de almacenar grafos en memoria.
Cada nodo de la lista enlazada representa un vértice del grafo, y sus nodos adyacentes se
almacenan como una lista enlazada asociada a ese vértice.[1]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

Gestión de procesos: Los sistemas operativos utilizan listas enlazadas para mantener y
gestionar listas de procesos, lo que permite agregar, eliminar y reorganizar procesos de
manera eficiente.[1]

Algoritmos de manipulación de texto: Las listas enlazadas son útiles en aplicaciones y


algoritmos de procesamiento de texto, como editores de texto, donde la inserción y
eliminación de caracteres o líneas se realizan con frecuencia.[1]

Recorridos en listas: En ciertas aplicaciones, como videojuegos o simulaciones, las listas


enlazadas pueden utilizarse para recorrer objetos y actualizar su estado o posición en
tiempo real.[1]

Undo y redo en aplicaciones: Las listas enlazadas dobles son útiles para implementar
funciones de deshacer y rehacer en aplicaciones de software, ya que permiten navegar
hacia adelante y hacia atrás en el historial de acciones realizadas.[1]

Cabe destacar que, aunque las listas enlazadas son una herramienta valiosa en ciertos
casos de uso, no siempre son la estructura de datos más eficiente. En algunos escenarios,
otras estructuras como arrays, slices o árboles pueden ser más apropiadas. La elección de
la estructura de datos adecuada dependerá de los requisitos específicos de la aplicación y
las operaciones que se realicen con mayor frecuencia.[1]
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

TIPO DE DATO ABSTRACTO(TDA)


Con mucha frecuencia se utilizan los términos TDA y Abstracción de Datos de manera
equivalente, y esto es debido a la similitud e interdependencia de ambos. Sin embargo, es
importante definir por separado los dos conceptos.[2]
Como ya se mencionó, los lenguajes de programación orientados a objetos son lenguajes
formados por diferentes métodos o funciones y que son llamados en el orden en que el
programa lo requiere, o el usuario lo desea. La abstracción de datos consiste en ocultar las
características de un objeto y obviarlas, de manera que solamente utilizamos el nombre del
objeto en nuestro programa. Esto es similar a una situación de la vida cotidiana. Cuando
yo digo la palabra “perro”, usted no necesita que yo le diga lo que hace el perro. Usted ya
sabe la forma que tiene un perro y también sabe que los perros ladran. De manera que yo
abstraigo todas las características de todos los perros en un solo término, al cual llamó
“perro”. A esto se le llama ‘abstracción’ y es un concepto muy útil en la programación, ya
que un usuario no necesita mencionar todas las características y funciones de un objeto
cada vez que este se utiliza, sino que son declaradas por separado en el programa y
simplemente se utiliza el término abstracto (“perro”) para mencionarlo.[2]
En el ejemplo anterior, “perro” es un Tipo de Dato Abstracto y todo el proceso de definirlo,
implementarlo y mencionarlo es a lo que llamamos Abstracción de Datos.
Vamos a poner un ejemplo real de la programación. Supongamos que en algún lenguaje
de POO un pequeño programa saca el área de un rectángulo de las dimensiones que un
usuario decida. Pensemos también que el usuario probablemente quiera saber el área de
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

varios rectángulos. Sería muy tedioso para el programador definir la multiplicación de ‘base’
por ‘altura’ varias veces en el programa, además que limitaría al usuario a sacar un número
determinado de áreas. Por ello, el programador puede crear una función denominada
‘Área’, la cual va a ser llamada, con los parámetros correspondientes, el número de veces
que sean necesitadas por el usuario y así el programador se evita mucho trabajo, el
programa resulta más rápido, más eficiente y de menor longitud. Para lograr esto, se crea
el método Área de una manera separada de la interfaz gráfica presentada al usuario y se
estipula ahí la operación a realizar, devolviendo el valor de la multiplicación. En el método
principal solamente se llama a la función Área y el programa hace el resto.[2]
Al hecho de guardar todas las características y habilidades de un objeto por separado se
le llama Encapsulamiento y es también un concepto importante para entender la
estructuración de datos. Es frecuente que el Encapsulamiento sea usado como un sinónimo
del Ocultación de información, aunque algunos creen que no es así.[2]

LOS METODOS MAS COMUNES DE LAS LISTAS ENLAZADAS


A continuación, se muestra una implementación de una lista enlazada simple con métodos
para operaciones básicas como insertar, eliminar y buscar elementos:
package main

import "fmt"

type Node struct {


data int
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

next *Node
}

type LinkedList struct {


head *Node
size int
}

// Insertar un elemento al final de la lista enlazada


func (list *LinkedList) Append(value int) {
newNode := &Node{data: value, next: nil}

if list.head == nil {
list.head = newNode
} else {
current := list.head
for current.next != nil {
current = current.next
}
current.next = newNode
}

list.size++
}

// Eliminar un elemento de la lista enlazada por valor


func (list *LinkedList) Remove(value int) bool {
if list.head == nil {
return false
}
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

if list.head.data == value {
list.head = list.head.next
list.size--
return true
}

current := list.head
for current.next != nil {
if current.next.data == value {
current.next = current.next.next
list.size--
return true
}
current = current.next
}

return false
}

// Buscar un elemento en la lista enlazada por valor


func (list *LinkedList) Search(value int) *Node {
current := list.head
for current != nil {
if current.data == value {
return current
}
current = current.next
}
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

return nil
}

// Imprimir la lista enlazada


func (list *LinkedList) Print() {
current := list.head
for current != nil {
fmt.Printf("%d ", current.data)
current = current.next
}
fmt.Println()
}

func main() {
list := LinkedList{}

list.Append(1)
list.Append(2)
list.Append(3)
list.Append(4)

fmt.Println("Lista enlazada:")
list.Print()

list.Remove(3)
fmt.Println("Lista enlazada después de eliminar el valor 3:")
list.Print()

node := list.Search(2)
if node != nil {
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

fmt.Println("Elemento encontrado:", node.data)


} else {
fmt.Println("Elemento no encontrado")
}
}
Este código incluye los siguientes métodos:
Append(): Inserta un elemento al final de la lista enlazada.
Remove(): Elimina un elemento de la lista enlazada dado su valor. Si el elemento se
encuentra en la lista, lo elimina y devuelve true. Si no se encuentra, devuelve false.
Search(): Busca un elemento en la lista enlazada por su valor y devuelve un puntero al
nodo encontrado o nil si no se encuentra.
Print(): Imprime los elementos de la lista enlazada en orden.
Simples vs Doblemente Enlazadas
Las listas enlazadas simples y las listas doblemente enlazadas son variantes de la
estructura de datos de listas enlazadas, y su principal diferencia radica en la forma en que
los nodos están conectados entre sí. A continuación, se explica la diferencia entre ambas:
Listas enlazadas simples: En una lista enlazada simple, cada nodo contiene un puntero
al siguiente nodo de la lista. Esto permite recorrer la lista en una sola dirección, desde el
inicio hasta el final. La principal ventaja de las listas enlazadas simples es su simplicidad y
menor consumo de memoria, ya que solo se necesita un puntero por nodo. Sin embargo,
dado que solo se puede navegar en una dirección, algunas operaciones pueden resultar
ineficientes o complicadas de implementar.
Listas doblemente enlazadas: En una lista doblemente enlazada, cada nodo tiene dos
punteros: uno al siguiente nodo y otro al nodo anterior. Esto permite recorrer la lista en
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

ambas direcciones, lo que facilita la implementación de ciertas operaciones, como la


eliminación de nodos o el acceso a elementos adyacentes. La principal desventaja de las
listas doblemente enlazadas es el mayor consumo de memoria, ya que se requieren dos
punteros por nodo, y una mayor complejidad en la manipulación de punteros durante las
operaciones de inserción y eliminación.
El siguiente tema que recomendamos aprender es cómo implementar y utilizar listas
doblemente enlazadas. Al dominar las listas doblemente enlazadas, podrás manejar una
estructura de datos más flexible y adecuada para ciertos casos de uso, como la
implementación de algoritmos de acceso aleatorio, la manipulación de listas en ambas
direcciones, o la implementación de funciones de deshacer y rehacer en aplicaciones de
software.
Lista enlazada simple:
[Head] -> [Nodo 1] -> [Nodo 2] -> ... -> [Nodo n] -> nil
Cada nodo en una lista enlazada simple contiene un puntero al siguiente nodo. El último
nodo de la lista apunta a nil, indicando el final de la lista.
Lista doblemente enlazada:
[Head] <-> [Nodo 1] <-> [Nodo 2] <-> ... <-> [Nodo n] <-> nil
En una lista doblemente enlazada, cada nodo contiene dos punteros: uno al siguiente nodo
y otro al nodo anterior. El primer nodo de la lista tiene su puntero anterior apuntando a nil,
y el último nodo tiene su puntero siguiente apuntando a nil.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

as listas al igual que las pilas y las colas, son una estructura de datos de tipo
lineal diferenciándose de las anteriores en el hecho de que pueden las inserciones y
eliminaciones se en cualquier parte de la lista. Esto hace que tengan mayor aplicabilidad
en el entorno real. Se abordan los temas relacionados con los conceptos básicos de las
listas, así como tipos de listas y las operaciones que se pueden realizar con las listas, todo
conjugado en programas de aplicación, implementados con apuntadores. Es importante
tener en cuenta que una estructura de datos lineal puede representarse en memoria ya sea
a través de arreglos o a través de listas enlazadas implementadas haciendo uso de los
apuntadores y por ende con la gestión de memoria dinámica que se asigna en tiempo de
ejecución.
Conceptos básicos de Listas
Una lista puede considerarse como una colección o secuencia de elementos del mismo tipo
que van en una posición uno de tras del otro, a este tipo de lista se le conoce como lista
continua, esta es una definición general, que incluye los ficheros y vectores.
Las entradas de una guía o directorio telefónico, por ejemplo, están en líneas sucesivas,
excepto en las partes superior e inferior de cada columna. Una lista lineal se almacena en
la memoria principal de una computadora en posiciones sucesivas de memoria; en el caso
cuando se almacenan en cinta magnética, los elementos sucesivos se presentan en
sucesión en la cinta. Esta asignación de memoria se denomina almacenamiento
secuencial.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

Una lista lineal se almacena en la memoria de la computadora en posiciones sucesivas o


adyacentes y se procesa como un arreglo unidimensional. En este caso, el acceso a
cualquier elemento de la lista es fácil; sin embargo, la inserción o borrado requiere un
desplazamiento de lugar de los elementos que le siguen y en consecuencia el diseño de
un algoritmo específico.
Para permitir operaciones con las listas como arreglos se deben dimensionar éstos con
tamaño suficiente para que contengan todos los posibles elementos de la lista.
La inserción o eliminación de un elemento, excepto en la cabecera o final de la lista,
necesita una traslación de un parte de los elementos de la misma: la que precede o sigue
a la posición del elemento modificado.
Las operaciones directas de añadir y eliminar se efectúan únicamente en los extremos de
la lista. Esta limitación es una de las razones por las que esta estructura de lista continua
es poco utilizada.

Como se puede apreciar en la figura 1, se trata de una lista contigua de elementos de tipo
entero representados en un arreglo unidimensional de 6 campos, de tal manera que no es
posible insertar un nuevo elemento por que la lista está completa, esta es una de las
desventajas de este tipo de lista.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

Posteriormente, se verá que existe otro tipo de almacenamiento denominado encadenado


o enlazado. Naciendo así el concepto de las listas enlazadas, veamos en que consiste.
Listas enlazadas: es una colección o secuencia de elementos del mismo tipo dispuestos
uno detrás de otro, en el que cada elemento se liga al siguiente elemento por un enlace
que no es más que un puntero previamente definido dentro de los miembros de la
estructura.
Las listas según su estructura se han dividido en cuatro grandes categorías:
• Listas Simplemente enlazadas
• Listas Doblemente enlazadas
• Listas Circular simplemente enlazada
• Lista circular doblemente enlazada
Las listas enlazadas o de almacenamiento enlazado son mucho más flexibles y potentes,
su uso es mucho más amplio comparado con la lista contigua.
Una lista enlazada o encadenada es un conjunto de elementos del mismo tipo en los que
cada elemento contiene la posición o dirección del siguiente elemento de la lista. Cada
elemento de la lista enlazada debe tener al menos dos campos: un campo que tiene el valor
del elemento y un campo (enlace o liga) que contiene la posición del siguiente elemento,
es decir, su conexión, enlace o encadenamiento. Los elementos de una lista son enlazados
por medio de los campos enlaces.
Una lista enlazada sin ningún elemento se llama lista vacía. Su puntero inicial o de
cabecera tiene el valor nulo, es decir apunta a NULL.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

*puntero ->NULL; haciendo uso de la sintaxis de C++ puede expresarse


como: *puntero=NULL;

Operaciones con las listas enlazadas

Generalmente las operaciones básicas que se pueden realizar en una lista enlazada son
las siguientes:
Operación de Inserción. Esta operación consiste en agregar un nuevo elemento a la lista.
Se pueden considerar tres casos especiales:
• Insertar un elemento al inicio de la lista.
• Insertar un elemento antes o después de un determinado elemento o nodo de la
lista.
• Insertar un elemento al final de la lista.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

Operación de Visualización. Esta operación consiste en mostrar o visualizar los


elementos de la lista que han sido insertados o almacenados previamente en la estructura,
para lo cual se hace el recorrido para ir mostrando en pantalla cada elemento de la lista
iniciando desde la cabeza hasta llegar al último nodo, es decir, cuando el nodo siguiente es
igual a NULL.
Operación de Recorrido. Esta operación consiste en visitar cada uno de los elementos
que forman la lista. Para ello se comienza con el primer elemento, se toma el valor del
campo enlace para avanzar al segundo elemento, el campo enlace de este elemento dará
la dirección del tercer elemento y así sucesivamente hasta que la información del campo
enlace sea NULL, lo que indica que el recorrido llegó a su final.
Operación de Búsqueda. Esta operación consiste en buscar un determinado elemento en
la lista, que es solicitado por el usuario en tiempo de ejecución, se procede a hacer la
comparación entre el elemento a buscar con cada uno de los elementos previamente
ingresados a la lista, el recorrido se hace tomando al campo enlace como puntero al
siguiente elemento a visitar en la lista, una vez se encuentre el elemento se procede a
mostrarlo en pantalla.[1]
Operación de Borrado. La operación de borrado consiste en eliminar un elemento de la
lista, se pueden presentar cuatro casos básicos:
• Eliminar el primer elemento de la lista.
• Eliminar el último elemento de la lista.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

• Eliminar de la lista un elemento específico, es decir, que tenga cierta información


independientemente de su ubicación.
Implementación de una lista enlazada con punteros
El siguiente programa se plantea como ejemplo guía para implementar una lista
simplemente enlazada con punteros, para gestionar números enteros, ingresados por
teclado con funciones de insertar, eliminar, recorrer y buscar.
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

Puede usar el método StringBuffer.reverse para verificar si una cadena es un palíndromo.


Hagamos la versión más simple sin buscar símbolos no alfanuméricos y mayúsculas y
minúsculas.

MATERIAL Y EQUIPO

Intel(R) Core(TM) i3-5005U CPU @ 2.00GHz 2.00 GHz

4.00 GB

VISUAL STUDIE CODE


INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

DESARROLLO

//Clase Nodo
public class NodoChar {
private char letra;
private NodoChar referencia;

//Constructor por defecto


public NodoChar() {
this.letra = ' ';
this.referencia = null;
}
//constructor con parametros
public NodoChar(char dato, NodoChar sigte) {
this.letra = dato;
this.referencia = sigte;
}
//Metodo para establecer el enlace con el siguiente nodo
public NodoChar setEnlace(NodoChar sigte) {
return this.referencia = sigte; // aqui this es nuevo
}
//Metodo para obtener el dato del nodo
public char getDato() {
return letra;
}
//Método pata obtener la referezia al siguiente nodo
public NodoChar getSigte() {
return referencia;
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

}
}

//Clase PilaEnzPalindro
import java.util.Scanner;

public class PilaEnlazPalindro {


static NodoChar tope1 = null;//tope de la pila original
static NodoChar tope2 = null; // tope de la pila copiado
static NodoChar aux = null;//Nodo auxiliar para correr la pila original

//Metoo para copiar una palabra ala pila


public static void copiar() {
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

try (Scanner sc = new Scanner(System.in)) {


System.out.print("Ingresa una palabra: ");
String palabra = sc.nextLine();
int i = 0;
while ((palabra.length() != 0) && (i < palabra.length())) {
insertar(palabra.charAt(i));
i++;
}
}
}
//Metodo para insertar un nuevo nodo con datos en l piila
public static void insertar(char datos) {
NodoChar nuevo = new NodoChar(datos, null);
if (tope1 == null) {
tope1 = nuevo;
} else {
nuevo.setEnlace(tope1);
tope1 = nuevo;
}
}
//Metodo para copiar la pila original a una nueva pila(Tope 2)
public static void copiar_pila2() {
aux = tope1;
while (aux != null) {
NodoChar nuevo = new NodoChar(aux.getDato(), null);
if (tope2 == null) {
tope2 = nuevo;
} else {
nuevo.setEnlace(tope2);
tope2 = nuevo;
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

}
aux = aux.getSigte();
}
}

//Metodo para verificar si la palabra es un palindromo


public static void verificarPalindromo() {
boolean esPalindromo = true;
while (tope1 != null && tope2 != null) {
char cima1 = tope1.getDato();
char cima2 = tope2.getDato();
if (cima1 == cima2) {
tope1 = tope1.getSigte();
tope2 = tope2.getSigte();
} else {
esPalindromo = false;
break;
}
}

if (esPalindromo && tope1 == null && tope2 == null) {


System.out.println("La palabra ingresada es un palíndromo.");
} else {
System.out.printf("La palabra ingresada no es un palíndromo.");
}
}

// Método principal
public static void main(String args[]) {
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

copiar();
copiar_pila2();
verificarPalindromo();
}
}

RESULTADOS

Capturas
Aquí se ingresó la palabra luna y
nos mostró que no es palíndromo

Aquí ingresamos la palabra anula


Y nos mostró que esta palabra
no es palíndromo

Ingresamos la palabra casa y al


momento de ejecutarlo nos
mostró que no es palíndromo
INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

MANUAL DE PRÁCTICAS DE CÓDIGO: AED-1026


LABORATORIO
ESTRUCTURA DE DATOS REVISIÓN: 1

REFERENCIAS
[1] TEMA 3: Tipos Abstractos de Datos: Árboles, Grafos. (s.f.). Departamento de
Lenguajes y Sistemas Informáticos - Departamento de Lenguajes y Sistemas
Informáticos. https://www.dlsi.ua.es/asignaturas/p2ir/teoria/l03/lessonh.html
[2] Colaboradores de los proyectos Wikimedia. (2004, 17 de junio). Tipo de dato abstracto
- Wikipedia, la enciclopedia libre. Wikipedia, la enciclopedia
libre. https://es.wikipedia.org/wiki/Tipo_de_dato_abstracto

You might also like