Anda di halaman 1dari 9

rimeras paginas

13/6/05

10:17

Pgina I

C
Algoritmos, programacin
y estructuras de datos

rimeras paginas

13/6/05

10:17

Pgina III

C
Algoritmos, programacin
y estructuras de datos

LUIS JOYANES AGUILAR


ANDRS CASTILLO SANZ
LUCAS SNCHEZ GARCA
IGNACIO ZAHONERO MARTNEZ
Departamento de Lenguajes y Sistemas Informticos e Ingeniera del Software
Facultad de Informtica/Escuela Universitaria de Informtica
Universidad Pontificia de Salamanca campus Madrid

MADRID BOGOT BUENOS AIRES CARACAS GUATEMALA LISBOA MXICO


NUEVA YORK PANAM SAN JUAN SANTIAGO S O PAULO
AUCKLAND HAMBURGO LONDRES MILN MONTREAL NUEVA DELHI PARS
SAN FRANCISCO SIDNEY SINGAPUR ST. LOUIS TOKIO TORONTO

rimeras paginas

13/6/05

10:17

Pgina IV

La informacin contenida en este libro procede de una obra original entregada por los autores. No obstante, McGrawHill/Interamericana de Espaa no garantiza la exactitud o perfeccin de la informacin publicada. Tampoco asume ningn tipo de
garanta sobre los contenidos y las opiniones vertidas en dichos textos.
Este trabajo se publica con el reconocimiento expreso de que se est proporcionando una informacin, pero no tratando de prestar
ningn tipo de servicio profesional o tcnico. Los procedimientos y la informacin que se presentan en este libro tienen slo la intencin de servir como gua general.
McGraw-Hill ha solicitado los permisos oportunos para la realizacin y el desarrollo de esta obra.

C. Algoritmos, programacin y estructuras de datos. Serie Schaum


No est permitida la reproduccin total o parcial de este libro, ni su tratamiento informtico, ni la transmisin de ninguna forma o por
cualquier medio, ya sea electrnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo y por escrito de los
titulares del Copyright.

McGraw-Hill/Interamericana
de de Espaa, S. A. U.
DERECHOS RESERVADOS 2005, respecto a la primera edicin en espaol, por
McGRAW-HILL/INTERAMERICANA DE ESPAA, S. A. U.
Edificio Valrealty, 1 planta
Basauri, 17
28023 Aravaca (Madrid)
www.mcgraw-hill.es
universidad@mcgraw-hill.com

ISBN: 84-481-4514-3
Depsito legal: M.

Editor: Carmelo Snchez Gonzlez


Compuesto en CD-FORM, S.L.
Impreso en
IMPRESO EN ESPAA - PRINTED IN SPAIN

rimeras paginas

13/6/05

10:17

Pgina V

Contenido

Prlogo .............................................................................................................................................................................

XI

Captulo 1 Introduccin a las computadoras y a los lenguajes de programacin ..........................................................


1.1 Organizacion fsica de una computadora .........................................................................................................
1.2 Redes ................................................................................................................................................................
1.3 El software (los programas) .............................................................................................................................
1.4 Lenguajes de programacin .............................................................................................................................
1.5 El lenguaje C: historia y caractersticas...........................................................................................................
Referencias bibliogrficas y lecturas suplementarias .............................................................................................
Ejercicios de repaso ................................................................................................................................................

1
1
5
6
7
10
11
12

Captulo 2 Fundamentos de programacin.....................................................................................................................


2.1 Fases en la resolucin de problemas................................................................................................................
2.1.1 Anlisis del problema ............................................................................................................................
2.1.2 Diseo del algoritmo..............................................................................................................................
2.1.3 Codificacin de un programa.................................................................................................................
2.1.4 Compilacin y ejecucin de un programa .............................................................................................
2.1.5 Verificacin y depuracin......................................................................................................................
2.1.6 Documentacin y mantenimiento ..........................................................................................................
2.2 Programacin estructurada...............................................................................................................................
2.2.1 Recursos abstractos ................................................................................................................................
2.2.2 Diseo descendente (Top Down) ...........................................................................................................
2.2.3 Estructuras de control ............................................................................................................................
2.2.4 Teorema de la programacin estructurada.............................................................................................
2.3 Mtodos formales de verificacin de programas.............................................................................................
2.4 Factores de calidad del software ......................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

13
13
14
14
14
14
15
15
16
16
16
16
16
16
17
18
24

Captulo 3 El lenguaje C: elementos bsicos .................................................................................................................


3.1 Estructura general de un programa en C..........................................................................................................
3.1.1 Directivas del preprocesador..................................................................................................................
3.1.2 Declaraciones globales...........................................................................................................................
3.1.3 Funcin main() .....................................................................................................................................
3.1.4 Funciones definidas por el usuario ........................................................................................................
3.2 Los elementos de un programa C ...................................................................................................................
3.3 Tipos de datos en C..........................................................................................................................................
3.3.1 Enteros (int) .......................................................................................................................................
3.3.2 Tipos de coma flotante (float/double) .............................................................................................
3.3.3 Caracteres (char) ..................................................................................................................................
3.4 El tipo de dato lgico .......................................................................................................................................
3.5 Constantes ........................................................................................................................................................
3.6 Variables ...........................................................................................................................................................
3.7 Entradas y salidas.............................................................................................................................................

25
25
25
25
26
26
27
27
27
28
29
29
29
30
30

rimeras paginas

VI

13/6/05

10:17

Pgina VI

CONTENIDO

Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

31
35

Captulo 4 Operadores y expresiones .............................................................................................................................


4.1 Operadores y expresiones ................................................................................................................................
4.2 El operador de asignaci ..................................................................................................................................
4.3 Operadores aritmticos.....................................................................................................................................
4.4 Operadores de incrementacin y decrementacin ...........................................................................................
4.5 Operadores relacionales ...................................................................................................................................
4.6 Operadores lgicos...........................................................................................................................................
4.7 Operadores de manipulacin de bits ................................................................................................................
4.7.1 Operadores de asignacin adicionales ...................................................................................................
4.7.2 Operadores de desplazamiento de bits (>>, <<)....................................................................................
4.8 Operador condicional .......................................................................................................................................
4.9 Operador coma , .............................................................................................................................................
4.10 Operadores especiales (), [] ............................................................................................................
4.11 El operador sizeof .................................................................................................................................
4.12 Conversiones de tipos .............................................................................................................................
4.13 Prioridad y asociatividad.........................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

37
37
37
38
39
39
40
40
41
41
41
42
42
42
42
43
44
53

Captulo 5 Estructuras de seleccin: sentencias if y switch........................................................................................


5.1 Estructuras de control.......................................................................................................................................
5.2 La sentencia if con una alternativa.................................................................................................................
5.3 Sentencia if de dos alternativas: if-else ......................................................................................................
5.4 Sentencia de control switch ............................................................................................................................
5.5 Expresiones condicionales: el operador ?:.....................................................................................................
5.6 Evaluacin en cortocircuito de expresiones lgicas .......................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

55
55
55
56
57
57
58
58
69

Captulo 6 Estructuras de control: bucles.......................................................................................................................


6.1 La sentencia while ..........................................................................................................................................
6.1.1 Miscelnea de control de bucles while .................................................................................................
6.2 Repeticin: el bucle for .................................................................................................................................
6.3 Repeticin: el bucle do...while ....................................................................................................................
6.4 Comparacin de bucles while, for y do-while .........................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

71
71
72
73
74
74
75
92

Captulo 7 Funciones ......................................................................................................................................................


7.1 Concepto de funcin ........................................................................................................................................
7.2 Estructura de una funcin ................................................................................................................................
7.3 Prototipos de las funciones ..............................................................................................................................
7.4 Parmetros de una funcin...............................................................................................................................
7.5 Funciones en lnea, macros con argumentos ...................................................................................................
7.6 mbito (alcance) ..............................................................................................................................................
7.7 Clases de almacenamiento ...............................................................................................................................
7.8 Concepto y uso de funciones de biblioteca......................................................................................................
7.9 Miscelnea de funciones ..................................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

95
95
95
96
97
98
98
99
100
100
101
121

rimeras paginas

13/6/05

10:17

Pgina VII

CONTENIDO

VII

Captulo 8 Recursividad .................................................................................................................................................


8.1 La naturaleza de la recursividad ......................................................................................................................
8.2 Funciones recursivas ........................................................................................................................................
8.3 Recursin versus iteracin ..............................................................................................................................
8.4 Recursin infinita .............................................................................................................................................
8.5 Algoritmos divide y vencers ..........................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

123
123
123
124
125
125
125
135

Captulo 9 Arrays (listas y tablas) ..................................................................................................................................


9.1 Arrays ...............................................................................................................................................................
9.2 Inicializacin de un array.................................................................................................................................
9.3 Arrays de caracteres y cadenas de texto ..........................................................................................................
9.4 Arrays multidimensionales...............................................................................................................................
9.5 Utilizacin de arrays como parmetros............................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

137
137
138
138
139
140
140
159

Captulo 10 Algoritmos de ordenacin y bsqueda .......................................................................................................


10.1 Ordenacin .....................................................................................................................................................
10.2 Ordenacin por burbuja .................................................................................................................................
10.3 Ordenacin por seleccin...............................................................................................................................
10.4 Ordenacin por insercin ...............................................................................................................................
10.5 Ordenacin Shell ............................................................................................................................................
10.6 Ordenacin rapida (QuickSort) ......................................................................................................................
10.7 Bsqueda en listas: bsqueda secuencial y binaria........................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

161
161
161
162
162
163
163
163
165
170

Captulo 11 Estructuras y uniones ..................................................................................................................................


11.1 Estructuras ......................................................................................................................................................
11.2 Uniones...........................................................................................................................................................
11.3 Enumeraciones ...............................................................................................................................................
11.4 Sinonimo de un tipo de datos: Typedef ........................................................................................................
11.5 Campos de bit.................................................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................
Problemas de programacin de gestin ..................................................................................................................

173
173
175
176
177
179
180
190
190

Captulo 12 Punteros (apuntadores) ...............................................................................................................................


12.1 Concepto de puntero (apuntador)...................................................................................................................
12.2 Punteros NULL y VOID ...................................................................................................................................
12.3 Punteros y arrays ............................................................................................................................................
12.4 Aritmtica de punteros ...................................................................................................................................
12.5 Punteros como argumentos de funciones.......................................................................................................
12.6 Punteros a funciones ......................................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

191
191
192
192
194
195
196
197
209

Captulo 13 Asignacin dinmica de memoria ..............................................................................................................


13.1 Gestin dinmica de la memoria....................................................................................................................
13.2 Funcin malloc( ) .......................................................................................................................................
13.3 Liberacin de memoria, funcin free( ) .....................................................................................................
13.4 Funciones calloc( ) y realloc( ) ...........................................................................................................
Problemas resueltos.................................................................................................................................................

211
211
212
213
213
214

rimeras paginas

VIII

13/6/05

10:17

Pgina VIII

CONTENIDO

Problemas propuestos..............................................................................................................................................

223

Captulo 14 Cadenas .......................................................................................................................................................


14.1 Concepto de cadena .......................................................................................................................................
14.2 Inicializacin de variables de cadena.............................................................................................................
14.3 Lectura de cadenas .........................................................................................................................................
14.4 Las funciones de STRING.H ...........................................................................................................................
14.5 Conversin de cadenas a nmeros .................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

225
225
226
226
227
229
231
240

Captulo 15 Entrada y salida por archivos .....................................................................................................................


15.1 Flujos..............................................................................................................................................................
15.2 Apertura de un archivo...................................................................................................................................
15.3 Funciones de lectura y escritura.....................................................................................................................
15.4 Archivos binarios de C...................................................................................................................................
15.5 Datos externos al programa con argumentos de main() ...............................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

243
243
244
244
246
248
249
265

Captulo 16 Organizacin de datos en un archivo..........................................................................................................


16.1 Registros.........................................................................................................................................................
16.2 Organizacin de archivos ...............................................................................................................................
16.2.1 Organizacin secuencial .....................................................................................................................
16.2.2 Organizacin directa...........................................................................................................................
16.3 Archivos con direccionamiento hash ............................................................................................................
16.4 Archivos secuenciales indexados ..................................................................................................................
16.5 Ordenacin de archivos: ordenacin externa .................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

267
267
268
268
270
271
272
274
277
293

Captulo 17 Tipos abstractos de datos TAD/objetos ......................................................................................................


17.1 Tipos de datos.................................................................................................................................................
17.2 Tipos abstractos de datos ...............................................................................................................................
17.3 Especificacin de los TAD ............................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

295
295
296
298
298
309

Captulo 18 Listas enlazadas ..........................................................................................................................................


18.1 Fundamentos tericos.....................................................................................................................................
18.2 Clasificacin de las listas enlazadas ..............................................................................................................
18.3 Operaciones en listas enlazadas .....................................................................................................................
18.3.1 Insercin de un elemento en una lista ...............................................................................................
18.3.2 Eliminacin de un nodo en una lista .................................................................................................
18.4 Lista doblemente enlazada .............................................................................................................................
18.4.1 Insercin de un elemento en una lista doblemente enlazada ............................................................
18.4.2 Eliminacin de un elemento en una lista doblemente enlazada........................................................
18.5 Listas circulares..............................................................................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

311
311
311
312
313
313
314
314
315
316
317
344

Captulo 19 Pilas y colas ................................................................................................................................................


19.1 Concepto de pila.............................................................................................................................................
19.2 Concepto de cola ............................................................................................................................................

347
347
348

rimeras paginas

13/6/05

10:17

Pgina IX

CONTENIDO

IX

Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

350
366

Captulo 20 rboles........................................................................................................................................................
20.1 rboles generales ...........................................................................................................................................
20.2 rboles binarios .............................................................................................................................................
20.3 Estructura y representacin de un rbol binario ............................................................................................
20.4 rboles de expresin......................................................................................................................................
20.5 Recorridos de un rbol ...................................................................................................................................
20.6 rbol binario de busqueda .............................................................................................................................
20.7 Operaciones en rboles binarios de bsqueda ...............................................................................................
Problemas resueltos.................................................................................................................................................
Problemas propuestos..............................................................................................................................................

369
369
370
371
371
372
372
373
374
389

Apndice A. Compilacin de programas C en UNIX y LINUX.....................................................................................


Apndice B. Compilacin de programas C en Windows ................................................................................................
Apndice C. Recursos Web de programacin .................................................................................................................

391
395
399

ndice................................................................................................................................................................................

405

Anda mungkin juga menyukai