Autorizada Pela Portaria do MEC Nº 366 de 12/03/1997 – D.O.U. de 13/03/1997 Faculdade Regional do Vale do Aço – FARV Rua Salermo n.º 299 – Bethânia – Ipatinga - MG – Fone: (31) 3824 2992
CURSO: Ciência da Computação PERÍODO: 2º TURNO: Noturno
DISCIPLINA: Algoritmos e Estruturas de Dados I PROFESSOR: Christiano Colen Venancio
Pilhas Estáticas #define MAX 50 struct pilha { int n; float vet[MAX]; };
typedef struct pilha Pilha;
int vazia (Pilha* p);
void libera (Pilha* p);
Pilha* cria (void)
{ Pilha* p = (Pilha*) malloc(sizeof(Pilha)); p->n = 0; /* inicializa com zero elementos */ return p; }
void push (Pilha* p, float v)
{ if (p->n == MAX) { /* capacidade esgotada */ printf("Capacidade da pilha estourou.\n"); exit(1); /* aborta programa */ } /* insere elemento na próxima posição livre */ p->vet[p->n] = v; p->n++; }
float pop (Pilha* p)
{ float v; if (vazia(p)) { printf("Pilha vazia.\n"); exit(1); /* aborta programa */ } /* retira elemento do topo */ v = p->vet[p->n-1]; p->n--; return v; }
int vazia (Pilha* p)
{ return (p->n == 0); UNIPAC – CAMPUS Ipatinga. 1 Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio } void libera (Pilha* p) { free(p); }
/* imprime: versão com vetor */
void imprime (Pilha* p) { int i; for (i=p->n-1; i>=0; i--) printf("%f\n",p->vet[i]); }
UNIPAC – CAMPUS Ipatinga. 2
Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio Pilhas Dinâmicas struct no { float info; struct no* prox; }; typedef struct no No;
{ p->prim = ins_ini(p->prim,v); } float pop (Pilha* p) { float v; if (vazia(p)) { printf("Pilha vazia.\n"); exit(1); /* aborta programa */ } v = p->prim->info; p->prim = ret_ini(p->prim); return v; }
int vazia (Pilha* p)
{ return (p->prim==NULL); }
void libera (Pilha* p)
{ No* q = p->prim; while (q!=NULL) { No* t = q->prox; free(q); q = t; } UNIPAC – CAMPUS Ipatinga. 3 Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio free(p); } /* imprime: versão com lista */ void imprime (Pilha* p) { No* q; for (q=p->prim; q!=NULL; q=q->prox) printf("%f\n",q->info); }
UNIPAC – CAMPUS Ipatinga. 4
Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio Filas Estáticas #define N 100 struct fila { int ini, fim; float vet[N]; };
No* ins_fim (No* fim, float v) { No* p = (No*) malloc(sizeof(No)); p->info = v; p->prox = NULL; if (fim != NULL) /* verifica se lista não estava vazia */ fim->prox = p; return p; } /* função auxiliar: retira do início */ No* ret_ini (No* ini) { No* p = ini->prox; free(ini); return p; }
void insere (Fila* f, float v)
{ f->fim = ins_fim(f->fim,v); if (f->ini==NULL) /* fila antes vazia? */ f->ini = f->fim; } float retira (Fila* f) { float v; if (vazia(f)) { printf("Fila vazia.\n"); exit(1); /* aborta programa */ } v = f->ini->info; f->ini = ret_ini(f->ini); if (f->ini == NULL) /* fila ficou vazia? */ f->fim = NULL; return v; }
int vazia (Fila* f)
{ return (f->ini==NULL); }
UNIPAC – CAMPUS Ipatinga. 6
Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio void libera (Fila* f) { No* q = f->ini; while (q!=NULL) { No* t = q->prox; free(q); q = t; } free(f); }