Você está na página 1de 7

Recredenciada pelo Decreto de 17/10/2005

(Publicado no “Minas Gerais” de 18/10/2005)


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;

struct pilha {
No* prim;
};

Pilha* cria (void)


{
Pilha* p = (Pilha*) malloc(sizeof(Pilha));
p->prim = NULL;
return p;
}

/* função auxiliar: insere no início */


No* ins_ini (No* l, float v)
{
No* p = (No*) malloc(sizeof(No));
p->info = v;
p->prox = l;
return p;
}
/* função auxiliar: retira do início */
No* ret_ini (No* l)
{
No* p = l->prox;
free(l);
return p;
}

void push (Pilha* p, float v)


{
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];
};

Fila* cria (void)


{
Fila* f = (Fila*) malloc(sizeof(Fila));
f->ini = f->fim = 0; /* inicializa fila vazia */
return f;
}

void insere (Fila* f, float v)


{
if (incr(f->fim) == f->ini) { /* fila cheia: capacidade esgotada
*/
printf("Capacidade da fila estourou.\n");
exit(1); /* aborta programa */
}
/* insere elemento na próxima posição livre */
f->vet[f->fim] = v;
f->fim = incr(f->fim);
}

float retira (Fila* f)


{
float v;
if (vazia(f)) {
printf("Fila vazia.\n");
exit(1); /* aborta programa */
}
/* retira elemento do início */
v = f->vet[f->ini];
f->ini = incr(f->ini);
return v;
}

int vazia (Fila* f)


{
return (f->ini == f->fim);
}

void libera (Fila* f)


{
free(f);
}

/* imprime: versão com vetor */


void imprime (Fila* f)
{
int i;
for (i=f->ini; i!=f->fim; i=incr(i))
printf("%f\n",f->vet[i]);
}

UNIPAC – CAMPUS Ipatinga. 5


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio
Filas Dinâmicas

struct no {
float info;
struct no* prox;
};
typedef struct no No;

struct fila {
No* ini;
No* fim;
};

Fila* cria (void)


{
Fila* f = (Fila*) malloc(sizeof(Fila));
f->ini = f->fim = NULL;
return f;
}

/* função auxiliar: insere no fim */


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);
}

/* imprime: versão com lista */


void imprime (Fila* f)
{
No* q;
for (q=f->ini; q!=NULL; q=q->prox)
printf("%f\n",q->info);
}

UNIPAC – CAMPUS Ipatinga. 7


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio