[ ftn @ 10.01.2006. 13:53 ] @
/*Imam problem sa ispisom liste inace program treba da radi sledece: Treba da demonstrira realizaciju osnovnih operacija sa dinamickom strukturom podataka oblika jednostruko spregnute liste. Elementi liste sastoje se od dva polja:podatak koji predstavlja proizvoljan karakter i pokazivac na sledeci element liste.Treba realizovati sledece operacije sa ovom listom:unos novog karaktera, umesto jednog treba upisati drugi,trazenje karaktera u listi i brisanje karaktera iz liste*/ # include<stdio.h> # include<stdlib.h> # include<malloc.h> # include<curses.h> //strukrura podataka koja predstavlja slog(element) liste typedef struct cvor{ char znak; struct cvor *sledeci; }Tcvor; //Definicija novog tipa podataka koji predstavlja pokazivac na slog liste typedef Tcvor *Pcvor; //Prototipovi funkcija void Inicijalizacija(Pcvor *glava); void Osnovni_meni(char *izbor); void Ispisi(char *izbor); void Unos(Pcvor *glava); void Brisanje(Pcvor *glava); void Listanje(Pcvor *glava); void Oslobodi_memoriju(Pcvor *glava); main() { //Deklaracija promenljivih Pcvor glava; char izbor; Inicijalizacija(&glava); do{ Osnovni_meni(&izbor); switch(izbor) { case'1':Ispisi(&izbor); Unos(&glava); break; case'2':Ispisi(&izbor); Brisanje(&glava); break; case'3':Ispisi(&izbor); Listanje(&glava); case'4': ; } }while(izbor!='4'); Oslobodi_memoriju(&glava); } void Inicijalizacija(Pcvor *glava) { *glava=NULL; } void Osnovni_meni(char *izbor) { char c; //Deklaracija lokalnih promenljivih //unsigned x,y; printf("1)Dodaj 2)Brisi 3)Listaj 4)Kraj?\n"); do{ scanf("%c",&c); *izbor=c; }while((*izbor>'4')||(*izbor<'1')); } void Ispisi(char *izbor) { char c; *izbor=c; printf("1)dodaj 2)Brisi 3)Listaj 4)Kraj ? %c",*izbor); } void Unos(Pcvor *glava) { //Deklaracija lokalnih promenljivih Pcvor tek,pret,novi; char c; *glava=NULL; //Unos novog znaka printf(" Unesite znak\n"); scanf("%c",&c); novi=(Tcvor *)malloc(sizeof(Tcvor)); //printf(" Unesite znak\n"); //scanf("%c",&c); novi->znak=c; novi->sledeci=NULL; //Unos novog sloga u listu if(*glava==NULL) { *glava=novi; return; } tek=*glava; pret=*glava; while(tek!=NULL) { pret=tek; tek=tek->sledeci; } pret->sledeci=novi; } void Brisanje(Pcvor *glava) { //Deklaracija lokalnih promenljivih Pcvor tek,pret; char c; printf("Unesite znak koji hocete da obrisete\n"); scanf("%c",&c); //Utvrdjivanje da li je lista prazna if(*glava==NULL) { printf("1)dodaj 2)Brisi 3)Listaj 4)Kraj ?"); printf(" Lista je prazna "); return; } //Trazenje znaka u listi tek=*glava; pret=*glava; while((tek!=NULL) && (tek->znak!=c)) { pret=tek; tek=tek->sledeci; } //Utvrdjivanje da li je znak u listi i ako jeste njegovo brisanje if(tek==NULL) { printf("Znaka nema u listi\n"); }else{ if(tek==*glava) { *glava=tek->sledeci; tek->sledeci=NULL; }else{ pret->sledeci=tek->sledeci; tek->sledeci=NULL; } free(tek); } } void Listanje(Pcvor *glava) { //Deklaracija lokalnoh promenljivih Pcvor tek; //Prvo se utvrdjije da li je lista prazna if(*glava==NULL) { printf("1)dodaj 2)Brisi 3)Listaj 4)Kraj ? %"); printf(" Lista je prazna"); return; } //Ako lista nije prazna vrsi se prikaz elemenata liste printf(" Prikaz liste\n"); tek=*glava; while(tek!=NULL) { printf(" %c",tek->znak); tek=tek->sledeci; } } void Oslobodi_memoriju(Pcvor *glava) { //Deklaracija lokalne promenljive Pcvor tek; while(*glava!=NULL) { tek=*glava; *glava=tek->sledeci; free(tek); } } |