All pastes #886061 Raw Edit

Mine

public text v1 · immutable
#886061 ·published 2008-01-31 12:10 UTC
rendered paste body
/*
Opis: Osnovni operacii so linearno povrzani listi
Avtor: 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 prostor

typedef struct element //struktura za opishuvanje na jazelot
{
	int info;
	struct element *sleden;
}jazel;

typedef jazel* jazelp; //pokazuvac kon listata

jazel *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 main()
{
    jazel *proba;
    proba=napravi_linearna_lista();
    pecati_linearna_lista(proba);
    pecati_linearna_lista_obratno(proba);
    system("PAUSE");
    return 0;
}