All pastes #886205 Raw Edit

Someone

public c v1 · immutable
#886205 ·published 2008-01-31 14:57 UTC
rendered paste body
/*Opis: Osnovni operacii so linearno povrzani listiAvtor: Viktor Stojanovski (stojanovski.viktor@gmail.com, 071350009)*/#include <stdio.h>#include <malloc.h>#define MEMCHECK(x) if (x==NULL){printf("Nema dovolno memorija!\n"); exit(-1);} //makro za proverka na sloboden memoriski prostortypedef struct element //struktura za opishuvanje na jazelot{	int info; //vrednost na poleto	struct element *sleden; //vrska kon sledniot element}jazel;typedef jazel* jazelp; //pokazuvac kon listatajazel *napravi_linearna_lista() //funkcija za vmetnuvanje na elementi vo linearno povrzana lista{	jazel *p=NULL; //pokazuvac kon prviot element od listata	jazel *q=NULL; //pomosen pokazuvac koj se koristi za dvizenje niz listata	jazel *r=NULL; //pomosen pokazuvac za kreiranje na jazlite	int n; //promenliva koja se cita od standradniot vlez	while((scanf("%d",&n))&&(getchar()!='q'))		{			r=(jazel*)malloc(sizeof(jazel)); //obezbeduvame memoriski prostor za noviot jazel			MEMCHECK(r); //proveruvame dali ima dovolno memorija za noviot jazel;			r->info=n; //ja dodeluvame vrednosta na promenlivata "n" vo noviot jazel			r->sleden=NULL; //noviot jazel go prikacuvame na krajot od listata			if (p==NULL) p=r; //ovaj uslov e ispolnet samo pri kreiranjeto na prviot clen od listata i ostanuva na prviot zatoa i nego go vrakame na izlez od funkcijata			else q->sleden=r; //odkako ke se kreira barem eden clen od listata  se koristi ovaj uslov za ostanatite clenovi			q=r; //pokazuvacot "q" sekogash e na istoto mesto kade shto e i r, odnosno pri kreiranje na novo "r" pokazuvacot "q" e na prethodnikot od "r"		}	return (p);}void brishi_linearna_lista(jazel *p) //funkcija koja gi brishi site jazli od listata koja sto se prosleduva so pokazuvac{	jazel *q; //pomosen pokazuvac	while (p!=NULL) //izminuvaj gi jazlite na listata dodeka ne stignesh do krajot odnosno do NULL		{			q=p; //pokazuvacot "q" donesi go na isto mesto so "p"			p=p->sleden; //pomesti go "p" za da moze da se izbrishe "q"			free(q); //oslobodi go "q"		}}void pecati_linearna_lista(jazel *p) //funkcija za pecatenje na linearna lista{	while(p!=NULL) //izminuvaj gi jazlite na listata dodeka ne stignesh do krajot odnosno do NULL		{			printf("%d->",p->info); //ispecati go info poleto od momentalniot jazel kade sto pokazuva "p"			p=p->sleden; //premini na naredniot clen		}}void pecati_linearna_lista_obratno(jazel *p) //funkcija za pecatenje na linearna lista vo obraten redosled bez promena na nivnite mesta {	if (p!=NULL) //dodeka ne go najdesh posledniot clen		{			pecati_linearna_lista_obratno(p->sleden); //rekurzivno povikuvanje za da se ispecati prven poslednit pa pretposledniot			printf("%d->",p->info); //ispecati go info poleto od momentalniot jazel kade sto pokazuva "p"		}}int dolzina_na_linearna_lista(jazel *p) //funkcija za broenje na jazlite vo linearna povrzana lista{	int brojac=0; //brojac koj ke go koristime za da gi broime jazlite	while (p!=NULL) //izminuvaj ja listata dodeka ne stignesh do krajot		{			brojac++; //zgolemi go brojacot koga ke najdesh jazel			p=p->sleden; //premini na drugiot jazel		}	return brojac; //vrati ja izbrojanata vrednost}int main(){    jazel *proba;    printf("Vnesete gi elementite za da se napravi linearnata lista, za kraj vnesete 'q'. \n");    proba=napravi_linearna_lista();    printf("Ja pecatam linearnata lista onaka kako sto e vnesenea vo pravilen redosled: \n");    pecati_linearna_lista(proba);    printf("\n");    printf("Ja pecatam linearnata lista vo obraten redosled: \n");    pecati_linearna_lista_obratno(proba);    printf("\n");	printf("Dolzinata na linearnata lista e: %d",dolzina_na_linearna_lista(proba));	printf("\n");	printf("Sega ja brisham linearnata lista");	brishi_linearna_lista(proba);    return 0;}