Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ilovepdf Merged
Ilovepdf Merged
main:
1.1 Definición de arreglos
Mediante la instrucción: int ae[40]; se está declarando un arreglo de 40
elementos cuyo nombre de variable es ae. Para acceder a cada
elemento del arreglo se debe especificar su posición en el arreglo dentro
de los corchetes que preceden al nombre de la variable. Esta posición se
conoce como índice del elemento. Por ejemplo, para acceder al tercer
elemento del arreglo de enteros anteriormente definido debería
añadirse la siguiente instrucción considerando que el índice se
contabiliza desde cero:
ae[2]=5;
1.1 Definición de arreglos
Cada elemento del arreglo puede ser tratado como una variable
individual. De modo que el elemento ae[2] puede ser utilizado para
almacenar un valor particular y también para realizar operaciones con su
contenido.
El siguiente código muestra el uso del elemento ae[2] para almacenar la
suma de dos valores y su respectivo despliegue en pantalla:
Imagen - Código
1.1 Definición de arreglos
Una forma sencilla de ejecutar este código es mediante el uso de un
compilador en línea. En Internet puede encontrar varios servicios es este
tipo. También puede descargarse las versiones del compilador para
computadora de escritorio como por ejemplo CodeBlocks.
La siguiente imagen muestra la ejecución del programa anterior en un
compilador en línea:
Imagen -
Compilador
en línea
1.1 Definición de arreglos
Para acceder en forma general a todos los elementos del arreglo se
pueden usar estructuras de control repetitivas como: for o while.
El código siguiente muestra el uso de la estructura for para asignar un
valor a cada elemento del arreglo ae. En cada elemento del arreglo se
almacena un número similar al índice multiplicado por 2. El valor
almacenado se muestra en pantalla.
Imagen - Código
1.1 Definición de arreglos
El código anterior muestra como se asigna un valor a cada elemento del
arreglo mientras se imprime su contenido. La siguiente ilustración
muestra el resultado de la ejecución del código.
Imagen - Código
Imagen - Código
Observe que en este caso cada elemento del arreglo debe ser accedido
mediante dos índices: uno que identifique la fila y otro que identifique la
columna.
1.2 Manejo de arreglos multidimensionales
También pueden definirse arreglos multidimensionales con elementos
fijos, es decir, elementos cuyo valor no puede ser modificado:
Imagen - Código
Imagen - Código
1.4 Relación entre arreglos y punteros
La siguiente ilustración muestra la ejecución del código anterior:
Imagen - Código
1.4 Relación entre arreglos y punteros
La ejecución del código anterior se muestra en la siguiente ilustración:
Imagen - Programación
1.5 Operaciones con arreglos
Para realizar cada una de estas operaciones es necesario utilizar alguna
estrategia. Por ejemplo, para buscar un elemento dentro de un arreglo
puede ser necesario realizar un recorrido secuencial del arreglo hasta
encontrar el elemento almacenado. De igual manera pueden añadirse
nuevos elementos al final del último elemento almacenado. Pero para
eliminar un elemento es necesario recorrer los elementos del arreglo
sobre el espacio dejado por el elemento descartado. De igual manera,
cuando se inserta un elemento se requiere recorrer el resto de
elementos para dejar libre el espacio que ocupará el nuevo elemento.
1.5 Operaciones con arreglos
El siguiente código muestra cómo se realiza la búsqueda secuencial del
elemento b dentro de un arreglo ae:
Imagen - Código
1.5 Operaciones con arreglos
La siguiente ilustración muestra la ejecución del código anterior:
Imagen - Código
1.5 Operaciones con arreglos
Al eliminar un elemento de un arreglo es necesario recorrer todos los
elementos que se encuentran a la derecha hacia la izquierda para
compactar el arreglo. El siguiente código muestra un ejemplo de ello:
Imagen - Código
1.5 Operaciones con arreglos
De igual manera, para insertar un elemento en el arreglo es necesario
dejar una localidad libre desplazando todos los elementos hacia la
derecha de la localidad donde se produce la inserción. Observe el código
siguiente:
Imagen - Código
1.6 Recorrido de los elementos de un arreglo
Un arreglo puede ser recorrido de distintas maneras, dependiendo de lo
que se desee hacer con su contenido. Por ejemplo, un arreglo puede ser
recorrido de adelante hacia atrás o de atrás hacia adelante.
El siguiente código muestra como un arreglo es recorrido de las dos
maneras indicadas anteriormente:
Imagen - Código
La educación es el arma más
poderosa que puedas usar
para cambiar el mundo.
Nelson Mandela
FIN DE LA CLASE 1
UNIDAD 1
ARQUITECTURA DE DATOS
Grafica -Código
1.8 Creación de listas encadenadas
Un nodo dentro de una lista contiene una variable para almacenar el
valor del elemento y un puntero al siguiente elemento. El último
elemento de la lista debe contener un puntero nulo.
Imagen - Nodo.
Grafica -Código
1.9 Operaciones con listas encadenadas
Otra forma de crear la lista es definiendo un conjunto de operaciones
que faciliten su uso. El siguiente código muestra la implementación de
las funciones agregar e imprimir.
Grafica -Código
1.9 Operaciones con listas encadenadas
Grafica -Código
1.9 Operaciones con listas encadenadas
• El siguiente programa utiliza las funciones definidas anteriormente
para crear una lista:
int main(){
NODO *lista=NULL;
lista=agregar(lista, 3);
lista=imprimir(lista);
lista=agregar(lista, 4);
lista=imprimir(lista);
lista=agregar(lista, 5);
lista=imprimir(lista);
return(0);
}
Imagen - Código
1.9 Operaciones con listas encadenadas
Al igual que con los arreglos pueden implementarse además de las
operaciones de agregar e imprimir, operaciones como: insertar,
eliminar y buscar. La operación insertar requiere tener control del
puntero al elemento anterior al cual se desea insertar.
1.9 Operaciones con listas encadenadas
El siguiente código muestra la implementación de la función insertar:
Grafica -Código
1.9 Operaciones con listas encadenadas
La operación eliminar requiere tener control del puntero al elemento
anterior al cual se desea eliminar.
Grafica -Código
1.9 Operaciones con listas encadenadas
• La operación buscar requiere realizar una barrido secuencial por los
elementos de la lista.
Grafica -Código
1.10 Tipos de listas encadenadas
Utilizando las operaciones básicas descritas se pueden crear nuevas
operaciones y estructuras de datos basadas en listas.
Otros tipos de listas encadenadas son:
Grafica - tipos.
1.10 Tipos de listas encadenadas
Las listas encadenadas
simples
Grafica - Códigos.
1.10 Tipos de listas encadenadas
NODO *agregar(NODO *lista, int valor){
NODO *ant;
NODO *p=(NODO *) malloc (sizeof(NODO));
La función agregar para un if(p!=NULL){
lista circular doblemente p->valor=valor;
if(lista==NULL){
encadenada se muestra a lista=p;
continuación: p->a=p;
p->s=p;
}else{
ant=lista;
while(ant->s!=lista){
ant=ant->s;
}
p->s=lista;
p->a=ant;
ant->s=p;
lista->a=p;
}
}
return lista;
}
1.10 Tipos de listas encadenadas
NODO *imprimir(NODO *lista, int n){
NODO *p=lista;
int i=0;
if(lista!=NULL){
La función imprimir para un do {
lista circular doblemente if(n==0){
printf("%d ",p->valor);
encadenada permite indicar p=p->s;
if(p==lista) break;
el número de elementos a }else if(n>0){
desplegar. Si el número es printf("%d ",p->valor);
p=p->s;
negativo mostrará los i++;
elementos del último al if(i>=n) break;
}else if(n<0){
primero. Si el número es cero p=p->a;
printf("%d ",p->valor);
mostrará todos los i--;
elementos de la lista. if(i<=n) break;
}
}while(1);
printf("\n");
}
return lista;
}
1.10 Tipos de listas encadenadas NODO *insertar(NODO *lista, int n, int valor){
NODO *ant;
int i=0;
NODO *p=(NODO *)malloc(sizeof(NODO));
if(p!=NULL){
La función insertar para un p->valor=valor;
if(lista==NULL ){
lista circular doblemente lista=p;
p->s=p;
encadenada permite insertar p->a=p;
}else{
un elemento en una posición if(n==0){
p->s=lista;
dada dentro de la lista. Si el p->a=lista->a;
lista->a=p;
número de posición excede p->a->s=p;
lista=p;
su tamaño, inserta el }else{
ant=lista;
elemento al final. while(ant->s!=lista && i+1<n){
ant=ant->s;
i++;
}
p->a=ant;
p->s=ant->s;
ant->s=p;
p->s->a=p;
}
}
return lista;
}
}
1.10 Tipos de listas encadenadas NODO *eliminar(NODO *lista, int n){
NODO *ant,*p;
int i=0;
if(lista!=NULL ){
if(n==0){
ant=lista;
La función eliminar para un lista=lista->s;
if(lista==ant)
lista circular doblemente lista=NULL;
else{
encadenada permite eliminar lista->a=ant->a;
lista->a->s=lista;
un elemento en una posición }
free(ant);
dada dentro de la lista. Si el }else{
ant=lista;
número de posición excede su while(ant->s->s!=lista && i+1<n){
ant=ant->s;
tamaño, elimina el elemento i++;
}
del final. p=ant->s;
if(p==ant)
lista=NULL;
else{
ant->s=p->s;
ant->s->a=ant;
}
free(p);
}
}
return lista;
}
1.10 Tipos de listas encadenadas
int buscar(NODO *lista, int valor){
NODO *p=lista;
La función buscar para un lista int indice=0;
circular doblemente encadenada if(p!=NULL){
do {
tiene una implementación if(p->valor==valor)
similar a la función desarrollad break;
para listas encadenadas simples. else{
p=p->s;
indice++;
}
}while(p!=lista);
if(p==lista) indice=-1;
}
return indice;
}
1.11 Implementación de estructuras de datos
❑ A partir de la implementación de las operaciones básicas tanto de
listas encadenadas como de arreglos, es posible crear algunas
estructuras. Entre estas estructuras están Pilas, Colas, Conjuntos, y
Mapas.
❑ Las estructuras descritas tienen un comportamiento particular, sin
embargo, todas ellas pueden ser implementadas a partir de las
operaciones: buscar, agregar, insertar y eliminar.
❑ Estructuras de datos como árboles y grafos son más complejas de
implementar y sus operaciones difieren grandemente de la
operaciones relacionadas con listas y arreglos.
❑ Debido a la similitud entre las operaciones de listas encadenadas y
arreglos, es posible reproducir la implementación de las listas y sus
operaciones usando arreglos estáticos.
1.11 Implementación de estructuras de datos
❑ Por ejemplo, una lista de enteros puede tener su contraparte en un
arreglo de enteros y a su vez la lista de enteros puede ser almacenada
en un archivo de datos sin mayores complicaciones.
❑ Los punteros de las listas encadenadas pueden ser sustituidos por
índices dentro de un arreglo de datos. De tal manera que para facilitar
el traslado de la listas encadenadas a arreglos basta con crear
funciones que sustituyan a malloc y a free.
FIN DE LA CLASE 2
UNIDAD 1