#include #include typedef struct element_ { int broj; struct element_ *sledeci; } element; #define alociraj(x) (x = (element *) malloc(sizeof(element))) void duplirajK( element **p, int k ) { element *novi; if ( !*p ) { alociraj(novi); novi -> broj = k; novi -> sledeci = NULL; *p = novi; } else { element *pom = *p; while( pom ) { if ( pom -> broj == k ) { alociraj( novi ); novi -> broj = k; novi -> sledeci = NULL; novi -> sledeci = pom -> sledeci; pom -> sledeci = novi; pom = pom -> sledeci; } pom = pom -> sledeci; } } } void dodajNaPocetak( element **p, int broj ) { element *novi; alociraj( novi ); novi -> broj = broj; novi -> sledeci = NULL; if ( !*p ) *p = novi; else { novi -> sledeci = *p; *p = novi; } } void formirajListu( element **p ) { int broj; scanf("%d", &broj ); while ( broj ) { dodajNaPocetak( p, broj ); scanf("%d", &broj ); } } void ispis( element *p ) { while ( p ) { printf("%d ", p -> broj ); p = p -> sledeci; } putchar('\n'); } void obrisiVeceOdK( element **p, int k ) { element *pom = *p; while( pom && pom -> broj > k ) { *p = pom -> sledeci; free( pom ); pom = *p; } element *pom_pr = *p; pom = pom_pr -> sledeci; while ( pom ) { if ( pom -> broj > k ) { pom_pr -> sledeci = pom -> sledeci; free( pom ); pom = pom_pr -> sledeci; } else { pom_pr = pom; pom = pom -> sledeci; } } } void dodajSortirano( element **p, int broj ) { element *novi; alociraj( novi ); novi -> broj = broj; novi -> sledeci = NULL; if ( !*p ) *p = novi; else { if ( (*p)->broj > novi -> broj ) { novi -> sledeci = *p; *p = novi; } else { element *pom_pr = *p; element *pom = *p; while ( pom && pom -> broj < broj ) { pom_pr = pom; pom = pom -> sledeci; } pom_pr -> sledeci = novi; novi -> sledeci = pom; } } } int main() { element *p = NULL; formirajListu( &p ); ispis( p ); duplirajK( &p, 5 ); ispis( p ); obrisiVeceOdK( &p, 5 ); ispis( p ); dodajSortirano( &p, 4 ); ispis( p ); return 0; }