Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Vazby dynamických proměnných,databázové systémy Přednáška č. 10
2
Vazby dynamických proměnných (1) Fiat 2007 Renault 2005 Skoda 2001 BMW 2008 ukazatel Přístup s polem ukazatelů: Pole může být: statické (nevýhoda pevné velikosti) dynamické (nutno volat realloc, při vložení jinde než nakonec, nutno ukazatele v poli přeskládat) dynam. prom
3
Vazby dynamických proměnných (2) Přístup s využitím lineárního seznamu: statický ukazatel na začátek seznamu přidány ukazatele do dynamické struktury poslední prvek neukazuje nikam (NULL) velikost seznamu omezena pouze velikostí paměti snadné přidávání i vkládání do seznamu nemožnost indexace ( pro získání prvku uprostřed seznamu, musíme projít celý seznam, i když známe jeho pořadové číslo (index) ) Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom
4
Vazby dynamických proměnných (3) Přidání prvku na konec lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom
5
Vazby dynamických proměnných (3) Přidání prvku na konec lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom Audi 2006 NULL dynam. prom
6
Vazby dynamických proměnných (3) Přidání prvku na konec lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 ukazatel dynam. prom Audi 2006 NULL dynam. prom
7
Vazby dynamických proměnných (4) Přidání prvku na konec lineárního seznamu: abychom nemuseli procházet celý seznam, je dobré pro rychlé přidávání na konec evidovat krom ukazatele na začátek, také ukazatel na konec Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom ukazatel na konec
8
Vazby dynamických proměnných (5) Vložení prvku do lineárního seznamu: abychom při vkládání zachovali uspořádanost seznamu – v našem příkladu třeba dle roku výroby vůz s rokem výroby 2006 musíme vložit mezi Renault a Fiat Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom
9
Vazby dynamických proměnných (6) Vložení prvku do lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom
10
Vazby dynamických proměnných (6) Vložení prvku do lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom Audi 2006 NULL dynam. prom
11
Vazby dynamických proměnných (6) Vložení prvku do lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom Audi 2006 NULL dynam. prom
12
Vazby dynamických proměnných (6) Vložení prvku do lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom Audi 2006 NULL dynam. prom
13
Vazby dynamických proměnných (6) Vložení prvku do lineárního seznamu: Renault 2005 ukazatel dynam. prom Skoda 2001 ukazatel dynam. prom ukazatel na začátek Fiat 2007 ukazatel dynam. prom BMW 2008 NULL dynam. prom Audi 2006 ukazatel dynam. prom
14
Vazby dynamických proměnných (7) struktura t_auto #include "stdafx.h" #include struct t_auto { char znacka[10]; int rok; t_auto * dalsi; }; struct t_auto * prvni = NULL; // globalni ukazatel na prvni auto
15
Vazby dynamických proměnných (8) funkce show() void show() // tisk aut { struct t_auto * aktAuto = prvni; // ukazatel na aktualni auto while ( aktAuto ) // prochazeni seznamu { printf( "%d: %s\n", aktAuto->rok, aktAuto->znacka ); // tisk radku aktAuto = aktAuto->dalsi; // posun na dalsi auto }
16
funkce add() void add( char * znacka, int rok ) // pridani auta { struct t_auto * noveAuto; // ukazatel pro nove vkladane auto // alokace dynamicke promenne noveAuto = ( struct t_auto * )malloc( sizeof( struct t_auto ) ); strcpy( noveAuto->znacka, znacka ); // naplneni struktury noveAuto->rok = rok; noveAuto->dalsi = NULL; if ( prvni == NULL ) // linearni seznam je prazdny { prvni = noveAuto; return; } else if ( noveAuto->rok rok ) // vlozime na zacatek { noveAuto->dalsi = prvni; prvni = noveAuto; return; } struct t_auto * aktAuto = prvni; // ukazatel na aktualni auto while ( aktAuto ) // prochazeni seznamu { if ( aktAuto->dalsi == NULL ) // jsme na poslednim aute { aktAuto->dalsi = noveAuto; // pridavame na konec return; } else if ( noveAuto->rok dalsi->rok ) { noveAuto->dalsi = aktAuto->dalsi; // vlozime za aktAuto aktAuto->dalsi = noveAuto; return; } aktAuto = aktAuto->dalsi; // posun na dalsi auto }
17
Vazby dynamických proměnných (9) příklad práce se seznamem add( "Fiat", 2007 ); add( "Skoda", 2001 ); add( "Renault", 2005 ); add( "BMW", 2008 ); add( "Audi", 2006 ); show(); getchar();
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.