quarta-feira, 28 de outubro de 2015

Implementação de uma estrutura de tipo Fila usando TAD


arquivo.h


typedef struct sNO{
int num;
struct sNO *prox;
}NO;

typedef NO *FILA;

void iniciar(FILA *f);

void inserir(FILA *f, int num);

int remover(FILA *f);

void inicio(FILA *f);

void fim(FILA *f);

void exibir(FILA *f);

arquivo.c


#include"FilaDin.h"
#include<stdio.h>
#include<stdlib.h>

NO *memoria(){
return (FILA) malloc(sizeof(NO));
}

void iniciar(FILA *f){

*f = NULL;
}

void inserir(FILA *f, int num){

FILA temp = memoria();
temp->num = num;
temp->prox = NULL;
if(temp == NULL){

puts("Não foi possivel alocar memoria!");
}
if(*f == NULL){

*f = temp;
} else {
FILA fila = *f;
while(fila->prox != NULL){

fila = fila->prox;
}
fila->prox = temp;
}
}

int remover(FILA *f){

int num;
if(*f != NULL){

FILA temp = *f;
num = temp->num;
*f = temp->prox;
free(temp);
return num;

} else {

puts("fila vazia!");
}
}

void fim(FILA *f){

puts("Fim Fila:");
FILA temp = *f;
while(temp->prox != NULL){

temp =  temp->prox;
}
printf("%d\n\n", temp->num);
}

void inicio(FILA *f){

puts("Inicio Fila:");
FILA temp = *f;
printf("%d\n\n", temp->num);
}

void exibir(FILA *f){
if(*f != NULL){
puts("Fila:");
FILA temp = *f;
while(temp != NULL){

printf("%d\n", temp->num);
temp =  temp->prox;
}
puts("");
} else {
puts("fila vazia!");
}
}

terça-feira, 27 de outubro de 2015

Exemplo de Lista dinâmica usando TAD em linguagem C.
Esta lista possibilita a inserção de valores em qualquer posição da lista


arquivo.h


typedef struct sNO{

int num;
struct sNO *prox;
}NO;

typedef NO *LISTA;

void iniciar(LISTA *l);

void inserir_ini(LISTA *l, int num);
void inserir_pos(LISTA *l, int num, int pos);
void inserir_fim(LISTA *l, int num);

int remover_ini(LISTA *l);
int remover_pos(LISTA *l, int pos);
int remover_fim(LISTA *l);

void exibir(LISTA *l);

arquivo.c


#include"ListaDim.h"
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

LISTA memoria(){
//atribui memoria
return (LISTA) malloc(sizeof(NO));
}

void iniciar(LISTA *l){

*l = NULL;
}

void inserir_fim(LISTA *l, int num){
//inserir no fim
LISTA temp = memoria();

if(temp == NULL){

puts("Não foi possivel alocar memoria!");
}

temp->num = num;
temp->prox = NULL;

if(*l != NULL){

LISTA lista = *l;
while(lista->prox != NULL){

lista = lista->prox;
}
lista->prox = temp;
} else {

*l = temp;

}
}

void inserir_pos(LISTA *l, int num, int pos){

LISTA temp = memoria();
if(temp == NULL){ //verifica se alocou memoria

puts("Não foi possivel alocar memoria!");
}

temp->num = num; //recebe o valor de num
if(*l != NULL && pos == 1){

temp->prox = *l;
*l = temp;
} else 
if(*l != NULL && pos > 1){ //se a lista não estiver vazia

LISTA lista = *l; //ponteiro recebe lista
while(pos-1 > 1 && lista->prox != NULL){ //bo
pos--;
lista = lista->prox; //iteração
}
temp->prox = lista->prox;
lista->prox = temp;

} else { //se a lista estiver vazia

temp->prox = NULL;
*l = temp;
}
}

void inserir_ini(LISTA *l, int num){
//inserir no inicio
LISTA temp = memoria();
if(temp == NULL){

puts("Não foi possivel alocar memoria!");
}

temp->num = num;

if(*l != NULL){

temp->prox = *l;
*l = temp;
} else {

temp->prox = NULL;
*l = temp;
}
}

int remover_ini(LISTA *l){
//remover do inicio
int num;

if(*l != NULL){

LISTA temp = *l;
*l = temp->prox;
num = temp->num;
free(temp);
}
return num;
}

int remover_pos(LISTA *l, int pos){
//remover posiçao

int num;
if(*l != NULL){

LISTA temp;
LISTA lista = *l;
if(pos > 1){
pos--;
while(pos > 1 ){
if(lista->prox == NULL){
puts("Posicao vazia!");
return 0;
}
lista = lista->prox;
pos--;
}

temp = lista->prox;
num = temp->num;
lista->prox = temp->prox;
free(temp);

} else if(pos == 1){

temp = *l;
num = temp->num;
*l = temp->prox;
free(temp);
}

return num;
} else {

printf("lista vazia!");
}
}

int remover_fim(LISTA *l){
//remover fim
int num;
if(*l != NULL){
  
LISTA temp = *l;
*l = temp->prox;
  num = temp->num;
free(temp);
return num; 
} else {
  
  return 0; 
}
}

void exibir(LISTA *l){
//exibir lista
if(*l != NULL){
LISTA temp = *l;
puts("Lista:");
while(temp != NULL){
printf("%d\n", temp->num);
temp = temp->prox;
}
puts("");
} else {
puts("Lista vazia!");
puts("");
}
}

segunda-feira, 26 de outubro de 2015

Estrutura Dinâmica de uma Pilha básica em C.

Um modo pratico de implementar uma estrutura pilha é incorpora-la a um TAD, criamos dois arquivos sendo um .h (head) e um .c para implementação do algoritmo.


arquivo.h



#include<stdbool.h>

typedef struct sNO{
int num;
struct sNO *prox;
}NO;

typedef NO *PILHA;

void iniciar(PILHA *p);

void inserir(PILHA *p, int num);

int remover(PILHA *p);

void exibir(PILHA *p);

arquivo.c


#include<stdlib.h>
#include<stdio.h>
#include"PilhaDin.h"

void iniciar(PILHA *p){

*p = NULL;
}

NO *memoria(){
return (PILHA) malloc(sizeof(NO));
}

void inserir(PILHA *p, int num){

PILHA temp = memoria(); //aloca memoria num ponteiro temporario
temp->num = num; //temp recebe um numero
temp->prox = NULL;
if(temp == NULL){
puts("Nao foi possivel alocar memoria!");
}
if(*p == NULL){

*p = temp; //se p for vazio tem recebe null

} else {

PILHA Pilha = *p;
while(Pilha->prox != NULL){

Pilha = Pilha->prox;
}

Pilha->prox = temp;
}
}

int remover(PILHA *p){

if(*p != NULL){

PILHA temp = *p, pilha = NULL;
if(temp->prox == NULL){
int num = temp->num;
free(temp);
*p = NULL;
return num;
}
while(temp->prox != NULL){
pilha = temp;
temp = temp->prox;
}

int num = temp->num;
pilha->prox = NULL;
free(temp);
return num;
} else {

puts("pilha vazia!");
}
}

void exibir(PILHA *p){

if(*p != NULL){
puts("pilha:");
PILHA temp = *p;
while(temp != NULL){

  printf("%d\n", temp->num);
    temp =  temp->prox;  
  }
  puts(""); 
  } else {
  puts("pilha vazia!");
  }

}