34
Algoritmos y estructuras de datos Memoria, apuntadores y arreglos Francisco Javier Zaragoza Mart´ ınez Universidad Aut´onoma Metropolitana Unidad Azcapotzalco Departamento de Sistemas 6 de mayo de 2015 Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 1 / 22

Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Algoritmos y estructuras de datosMemoria, apuntadores y arreglos

Francisco Javier Zaragoza Martınez

Universidad Autonoma Metropolitana Unidad AzcapotzalcoDepartamento de Sistemas

6 de mayo de 2015

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 1 / 22

Page 2: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Memoria y direcciones

Memoria y direcciones

La memoria de una computadora es un arreglo de celdas numeradasconsecutivamente. Cada celda contiene un byte y esta numerada por unadireccion (de d bits). Las direcciones inician en la 0 y terminan en laM − 1 (donde M = 2d es el tamano de la memoria).

Ejemplo (con d = 4)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 2 / 22

Page 3: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Memoria y direcciones

Memoria y direcciones

La memoria de una computadora es un arreglo de celdas numeradasconsecutivamente. Cada celda contiene un byte y esta numerada por unadireccion (de d bits). Las direcciones inician en la 0 y terminan en laM − 1 (donde M = 2d es el tamano de la memoria).

Ejemplo (con d = 4)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 2 / 22

Page 4: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Interpretacion de la memoria

Ejemplo (con d = 4)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Como enteros de 4 bytes (int)

Los procesadores de Intel son little endian: El primer entero del ejemplo secalcularıa como 69 + 74 × 256 + 69 × 2562 + 77 × 2563 = 1296386629:

bytes 0 a 3 bytes 4 a 7 bytes 8 a 11 bytes 12 a 15

1296386629 1397705808 541410336 5062997

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 3 / 22

Page 5: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Interpretacion de la memoria

Ejemplo (con d = 4)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Como caracteres (char)

El juego de caracteres estandar de C es ASCII:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

E J E M P L O S ’ ’ D E ’ ’ U A M ’\0’

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 4 / 22

Page 6: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Interpretacion de la memoria

Un ejemplo mas complicado

Suponga que se hicieron las siguientes declaraciones de variables:

char a, b, c, d;

int n, m;

char w, x, y, z;

entonces las variables a, b, c y d podrıan ocupar las direcciones 0, 1, 2 y 3,las variables n y m las direcciones 4 a 7 y 8 a 11, y las variables w, x, y y z

las direcciones 12, 13, 14 y 15.

En este caso, los valores de las variables serıan los siguientes:

char a = ’E’, b = ’J’, c = ’E’, d = ’M’;

int n = 1397705808 , m = 541410336;

char w = ’U’, x = ’A’, y = ’M’, z = ’\0’;

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 5 / 22

Page 7: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Interpretacion de la memoria

Un ejemplo mas complicado

Suponga que se hicieron las siguientes declaraciones de variables:

char a, b, c, d;

int n, m;

char w, x, y, z;

entonces las variables a, b, c y d podrıan ocupar las direcciones 0, 1, 2 y 3,las variables n y m las direcciones 4 a 7 y 8 a 11, y las variables w, x, y y z

las direcciones 12, 13, 14 y 15.

En este caso, los valores de las variables serıan los siguientes:

char a = ’E’, b = ’J’, c = ’E’, d = ’M’;

int n = 1397705808 , m = 541410336;

char w = ’U’, x = ’A’, y = ’M’, z = ’\0’;

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 5 / 22

Page 8: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Operadores de referencia y desreferencia

Operador de referencia

El operador prefijo & obtiene la direccion de inicio de una variable. A estotambien se le llama una referencia a la variable. Si declaramos int n

entonces &n es una referencia a n.

Operador de desreferencia

El operador prefijo * obtiene la variable a la que se hace referencia. A estotambien se le llama una desreferencia. En otras palabras, *&n es n.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 6 / 22

Page 9: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Operadores de referencia y desreferencia

Operador de referencia

El operador prefijo & obtiene la direccion de inicio de una variable. A estotambien se le llama una referencia a la variable. Si declaramos int n

entonces &n es una referencia a n.

Operador de desreferencia

El operador prefijo * obtiene la variable a la que se hace referencia. A estotambien se le llama una desreferencia. En otras palabras, *&n es n.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 6 / 22

Page 10: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Direcciones y apuntadores

Direcciones

Las direcciones donde quedan almacenadas las variables en la memoria sondeterminadas por el compilador y el sistema operativo. Esto nos obliga ausar el operador & para obtener referencias a las variables.

Variables de tipo apuntador

Un apuntador es una variable que puede almacenar una referencia a unavariable de tipo especıfico. Los apuntadores se declaran ası:

char *s, *t;

int *p, *q;

Toda variable puede contener basura y los apuntadores no son excepcion.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 7 / 22

Page 11: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Direcciones y apuntadores

Direcciones

Las direcciones donde quedan almacenadas las variables en la memoria sondeterminadas por el compilador y el sistema operativo. Esto nos obliga ausar el operador & para obtener referencias a las variables.

Variables de tipo apuntador

Un apuntador es una variable que puede almacenar una referencia a unavariable de tipo especıfico. Los apuntadores se declaran ası:

char *s, *t;

int *p, *q;

Toda variable puede contener basura y los apuntadores no son excepcion.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 7 / 22

Page 12: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo de uso de apuntadores

Ejemplo

Considere la declaracion de variables y apuntadores:

int n=1, m=2;

int *p, *q;

Si ahora hacemos

p = &n; /* direccion de n */

q = &m; /* direccion de m */

diremos que p apunta a n y que q apunta a m (*p es n y *q es m).

*p = 3; /* n vale 3 */

m = *p; /* m vale 3 */

q = p; /* q apunta a n */

*q = 4; /* n vale 4 */

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 8 / 22

Page 13: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo de uso de apuntadores

Ejemplo

Considere la declaracion de variables y apuntadores:

int n=1, m=2;

int *p, *q;

Si ahora hacemos

p = &n; /* direccion de n */

q = &m; /* direccion de m */

diremos que p apunta a n y que q apunta a m (*p es n y *q es m).

*p = 3; /* n vale 3 */

m = *p; /* m vale 3 */

q = p; /* q apunta a n */

*q = 4; /* n vale 4 */

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 8 / 22

Page 14: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo de uso de apuntadores

Ejemplo

Considere la declaracion de variables y apuntadores:

int n=1, m=2;

int *p, *q;

Si ahora hacemos

p = &n; /* direccion de n */

q = &m; /* direccion de m */

diremos que p apunta a n y que q apunta a m (*p es n y *q es m).

*p = 3; /* n vale 3 */

m = *p; /* m vale 3 */

q = p; /* q apunta a n */

*q = 4; /* n vale 4 */

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 8 / 22

Page 15: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Funciones y referencias

Funciones en C

Todas las funciones en C reciben sus parametros por valor. Esto significaque internamente se hace una copia y se trabaja con ella.

Funciones que modifican sus parametros

Es evidente que algunas funciones deben poder modificar sus parametros(y no copias de ellos). Por ejemplo, la funcion de biblioteca scanf debepoder leer datos de la entrada para colocarlos en variables del programa.Esto se hace ası:

int n;

scanf(" %d", &n);

Observe que scanf recibio una referencia a n (y no una copia de n).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 9 / 22

Page 16: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Funciones y referencias

Funciones en C

Todas las funciones en C reciben sus parametros por valor. Esto significaque internamente se hace una copia y se trabaja con ella.

Funciones que modifican sus parametros

Es evidente que algunas funciones deben poder modificar sus parametros(y no copias de ellos). Por ejemplo, la funcion de biblioteca scanf debepoder leer datos de la entrada para colocarlos en variables del programa.Esto se hace ası:

int n;

scanf(" %d", &n);

Observe que scanf recibio una referencia a n (y no una copia de n).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 9 / 22

Page 17: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo (mal hecho)

Funcion de intercambio

void intercambia(int a, int b)

{

int t;

t = a;

a = b;

b = t;

}

¿Por que no funciona?

Cuando llamamos a esa funcion de esta manera

int n=3, m=4;

intercambia(n, m);

lo que ocurre es que se hacen copias de n y m (ahora a=3 y b=4) y seintercambian los valores de a y b (ahora a=4 y b=3).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 10 / 22

Page 18: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo (mal hecho)

Funcion de intercambio

void intercambia(int a, int b)

{

int t;

t = a;

a = b;

b = t;

}

¿Por que no funciona?

Cuando llamamos a esa funcion de esta manera

int n=3, m=4;

intercambia(n, m);

lo que ocurre es que se hacen copias de n y m (ahora a=3 y b=4) y seintercambian los valores de a y b (ahora a=4 y b=3).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 10 / 22

Page 19: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo (bien hecho)

Funcion de intercambio

void intercambia(int *a, int *b)

{

int t;

t = *a;

*a = *b;

*b = t;

}

¿Por que sı funciona?

Cuando llamamos a esa funcion de esta manera

int n=3, m=4;

intercambia (&n, &m);

lo que ocurre es que a = &n y b = &m y se intercambian los valores de *a y*b (es decir, de n y m).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 11 / 22

Page 20: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejemplo (bien hecho)

Funcion de intercambio

void intercambia(int *a, int *b)

{

int t;

t = *a;

*a = *b;

*b = t;

}

¿Por que sı funciona?

Cuando llamamos a esa funcion de esta manera

int n=3, m=4;

intercambia (&n, &m);

lo que ocurre es que a = &n y b = &m y se intercambian los valores de *a y*b (es decir, de n y m).

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 11 / 22

Page 21: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Memoria y arreglos

Un arreglo en la memoria

Considere la declaracion del arreglo int a[4] y el contenido de memoria:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Como vimos antes, esto se interpreta como cuatro enteros de esta forma:

a[0] (0 a 3) a[1] (4 a 7) a[2] (8 a 11) a[3] (12 a 15)

1296386629 1397705808 541410336 5062997

Arreglos en la memoria

T a[N] declara un arreglo de N variables de tipo T. Si el tipo T requiere B

bytes, entonces el arreglo a ocupa N*B bytes consecutivos.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 12 / 22

Page 22: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Memoria y arreglos

Un arreglo en la memoria

Considere la declaracion del arreglo int a[4] y el contenido de memoria:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

69 74 69 77 80 76 79 83 32 68 69 32 85 65 77 0

Como vimos antes, esto se interpreta como cuatro enteros de esta forma:

a[0] (0 a 3) a[1] (4 a 7) a[2] (8 a 11) a[3] (12 a 15)

1296386629 1397705808 541410336 5062997

Arreglos en la memoria

T a[N] declara un arreglo de N variables de tipo T. Si el tipo T requiere B

bytes, entonces el arreglo a ocupa N*B bytes consecutivos.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 12 / 22

Page 23: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Elementos de un arreglo

Direccion de los elementos

Si declaramos int a[4] entonces las direcciones de sus elementos son&a[0], &a[1], &a[2] y &a[3].

El nombre del arreglo

El nombre del arreglo a es un sinonimo de la direccion de su primerelemento. De esta manera, hacer p = &a[0] es lo mismo que hacer p = a.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 13 / 22

Page 24: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Moviendose en un arreglo

Apuntadores e ındices

Si declaramos int *p y p = &a[0], entonces p+1 apunta a a[1], p+2apunta a a[2] y en general, si i es un int, entonces p+i apunta a a[i].En otras palabras p+i vale &a[i] y *(p+i) es a[i].

Incremento y decremento

Si p apunta a un elemento del arreglo, entonces p++ hace que p apunte alsiguiente elemento, mientras que p-- hace que p apunte al anterior.

Comparacion

Si p y q apuntan a elementos del mismo arreglo, entonces se puedencomparar. El resultado de la comparacion es el mismo que el resultado dela comparacion de los ındices correspondientes.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 14 / 22

Page 25: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Moviendose en un arreglo

Apuntadores e ındices

Si declaramos int *p y p = &a[0], entonces p+1 apunta a a[1], p+2apunta a a[2] y en general, si i es un int, entonces p+i apunta a a[i].En otras palabras p+i vale &a[i] y *(p+i) es a[i].

Incremento y decremento

Si p apunta a un elemento del arreglo, entonces p++ hace que p apunte alsiguiente elemento, mientras que p-- hace que p apunte al anterior.

Comparacion

Si p y q apuntan a elementos del mismo arreglo, entonces se puedencomparar. El resultado de la comparacion es el mismo que el resultado dela comparacion de los ındices correspondientes.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 14 / 22

Page 26: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Moviendose en un arreglo

Apuntadores e ındices

Si declaramos int *p y p = &a[0], entonces p+1 apunta a a[1], p+2apunta a a[2] y en general, si i es un int, entonces p+i apunta a a[i].En otras palabras p+i vale &a[i] y *(p+i) es a[i].

Incremento y decremento

Si p apunta a un elemento del arreglo, entonces p++ hace que p apunte alsiguiente elemento, mientras que p-- hace que p apunte al anterior.

Comparacion

Si p y q apuntan a elementos del mismo arreglo, entonces se puedencomparar. El resultado de la comparacion es el mismo que el resultado dela comparacion de los ındices correspondientes.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 14 / 22

Page 27: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con arreglos e ındices, regresando el valor

Esta funcion encuentra el menor valor almacenado en el arreglo int a[]

de n elementos.

int minimo(int a[], int n)

{

int i;

int m = a[0]; /* el menor es el primero */

for (i = 1; i < n; i++)

if (a[i] < m)

m = a[i];

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 15 / 22

Page 28: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con arreglos e ındices, regresando el ındice

Esta funcion encuentra el ındice del menor valor almacenado en el arregloint a[] de n elementos.

int minimo(int a[], int n)

{

int i;

int m = 0; /* el menor es el primero */

for (i = 1; i < n; i++)

if (a[i] < a[m])

m = i;

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 16 / 22

Page 29: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con arreglos e ındices, regresando un apuntador

Esta funcion encuentra un apuntador al menor valor almacenado en elarreglo int a[] de n elementos.

int* minimo(int a[], int n)

{

int i;

int *m = &a[0]; /* el menor es el primero */

for (i = 1; i < n; i++)

if (a[i] < *m)

m = &a[i];

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 17 / 22

Page 30: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con apuntadores, regresando un apuntador

Esta funcion encuentra un apuntador al menor valor almacenado en elarreglo que empieza en int *a y tiene n elementos.

int* minimo(int *a, int n)

{

int i;

int *m = a; /* el menor es el primero */

for (i = 1; i < n; i++)

if (*(a+i) < *m)

m = a+i;

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 18 / 22

Page 31: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Solo con apuntadores, regresando un apuntador

Esta funcion encuentra un apuntador al menor valor almacenado en elarreglo que empieza en int *a y tiene n elementos.

int* minimo(int *a, int n)

{

int *i;

int *m = a; /* el menor es el primero */

for (i = a+1; i < a+n; i++)

if (*(a+i) < *m)

m = a+i;

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 19 / 22

Page 32: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con dos apuntadores, regresando un apuntador

Esta funcion encuentra un apuntador al menor valor almacenado en elarreglo que empieza en int *a y tiene n elementos.

int* minimo(int *a, int n)

{

int *b = a+n; /* uno despues del final */

int *m = a; /* el menor es el primero */

for (a++; a < b; a++)

if (*a < *m)

m = a;

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 20 / 22

Page 33: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Mınimo de un arreglo

Con dos apuntadores, regresando un apuntador

Esta funcion encuentra un apuntador al menor valor almacenado en elarreglo que empieza en int *a y tiene n elementos.

int* minimo(int *a, int n)

{

int *b = a+n; /* uno despues del final */

int *m = a; /* el menor es el primero */

while (++a < b)

if (*a < *m)

m = a;

return m;

}

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 21 / 22

Page 34: Algoritmos y estructuras de datos - Memoria, apuntadores y ...academicos.azc.uam.mx/franz/aed/docs/memoria.pdf · Algoritmos y estructuras de datos Memoria, apuntadores y arreglos

Ejercicios

Ordenando datos1 Escribe una funcion void dos(int *a, int *b) que ordene *a y *b

de modo que *a <= *b.

2 Escribe una funcion void tres(int *a, int *b, int *c) que ordene*a, *b y *c de modo que *a <= *b <= *c.

Mınimo y maximo

1 Escribe una funcion int* minimo(int *a, int *b) que regrese unapuntador al mınimo entero en el arreglo que empieza en a y acabajusto antes de b. Pista: modifica la ultima version de minimo.

2 Reescribe todas las versiones de minimo para procesar el arreglo deatras para adelante.

3 Reescribe todas las versiones de minimo pero para el maximo.

Francisco Zaragoza (UAM Azcapotzalco) Algoritmos y estructuras de datos 2015 Primavera 22 / 22