quinta-feira, 29 de setembro de 2011

Inclusão e exclusão de elementos em uma pilha

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

int empilhar(int *pilha, int elemento, int tam, int *pont)
{
    if(tam==*pont)
    {
        printf("\nPilha cheia!\n");
        return 0;
    }
    else{
        pilha[*pont]=elemento;
        *pont=*pont+1;
        return 1;
    }
}

int desempilhar(int *pilha, int tam, int *pont){
    if(*pont==0)
    {
        printf("\nPilha ja vazia!\n");
        return 0;
    }
    else{
        *pont=*pont-1;
        pilha[*pont]=NULL;
        return 1;
    }
}
int main() {

    char op;
    int ok, tam, *pilha, elemento,pont=0,i;
    printf("Informe o tamanho desejado para a pilha: ");
    scanf("%d",&tam);
    if((pilha=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
    do{
        printf("\n(e)mpilhar (d)esempilhar (s)air: ");
        getchar();
        scanf("%c",&op);
        switch (op){
            case 'e':
                printf("\nInforme o elemento a ser inserido: ");
                scanf("%d",&elemento);
                ok=empilhar(pilha,elemento,tam,&pont);
                if(ok)printf("\nEmpilhamento feito com sucesso!\n");
                else printf("\nNao foi possivel inserir o novo elemento\n");
                for(i=0;i<tam;i++){
                printf("%d\t",pilha[i]);}
                printf("\n");
                break;
            case 'd':
                ok=desempilhar(pilha,tam,&pont);
                if(ok)printf("\nElemento retirado com sucesso!\n");
                else printf("\nNao foi possivel retirar o elemento\n");
                for(i=0;i<tam;i++){
                printf("%d\t",pilha[i]);}
                printf("\n");
                break;
        }
    }while(op!='s');
    return 0;
}

Inclusão e exclusão de elementos em uma fila circular

#include <stdio.h>
#include <stdlib.h>
void entrar(int *fila,int v,int tam,int *ini,int *fim)
{
    int prov = (*fim+1) % (tam);
    if(prov != *ini)
    {
        *fim=prov;
        fila[*fim]=v;
        if(*ini==-1) *ini=0;
    }
    else printf("\nFila cheia!\n");
}
int sair(int *fila,int tam, int *ini,int *fim) {
    int v;
    if( *ini != -1 )
    {
        v=fila[*ini];
        if(*ini==*fim)
        {
            fila[*ini]=NULL;
            *ini=*fim=-1;
        }
        else
        {
            fila[*ini]=NULL;
            *ini = (*ini+1) % tam;
        }
        return v;
    }
    else {
        printf("\nFila vazia!\n");
        return -1;
    }
}

int main() {

    char op;
    int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
    printf("Informe o tamanho desejado para a fila: ");
    scanf("%d",&tam);
    if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
    do{
        printf("\n(e)ntrar (s)air (f)echar: ");
        getchar();
        scanf("%c",&op);
        switch (op){
            case 'e':
                printf("\nInforme o elemento a ser inserido: ");
                scanf("%d",&elemento);
                entrar(fila,elemento,tam,&ini,&fim);
                break;
            case 's':
                ok=sair(fila,tam,&ini,&fim);
                printf("\nO elemento retirado foi: %d.\n",ok);
                break;
        }
        for(i=0;i<tam;i++) printf("%d\t",fila[i]);
        printf("\n");
    }while(op!='f');
    return 0;
}

quinta-feira, 1 de setembro de 2011

Busca binária em uma struct


Lembrando que quando o usuário for entrar com as chaves (int), elas deverão estar em ordem, ou a busca binária não funcionará.

#include<stdio.h>
struct TPessoa{
int chave;
char nome[40];
};
struct TPessoa v[10];

int buscaBin(int tam,struct TPessoa v[], int pesq)
{
int ini=0,fim=tam-1,meio;
while(ini<=fim)
{
meio=(ini+fim)/2;
if(pesq==v[meio].chave) return meio;
else if(v[meio].chave<pesq) ini=meio+1;
else fim=meio-1;
}
return -1;

}
int main ()
{
int busca, i;
char ret;
printf("Informe os dados a serem armazenados:\n");
for(i=0;i<10;i++)
{
printf("\nChave: ");
scanf("%d",&v[i].chave);
getchar();
printf("Nome: ");
gets(v[i].nome);
}
printf("\nInforme a chave a ser encontrada: ");
scanf("%d",&busca);
ret=buscaBin(10,v,busca);
if(ret==-1)
printf("\nNao encontrado!\n\n");
else
printf("\nA chave foi encontrada e o %cndice correspondente %c %d. O nome que se encontra neste %cndice %c %s.\n\n",161,130,ret,161,130,v[ret].nome);

return 0;
}

Inclusão e exclusão em uma lista sequencial - modo fila

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

int inserir(int *fila, int elemento, int tam, int *ini,int *fim)
{
    if(*ini==*fim && *fim==-1)
    {
        fila[++*fim]=elemento;
        *ini=0;
        return 1;
    }
    if(*fim==(tam-1) && *ini==0)
    {
        printf("\nFila cheia!\n");
        return 0;
    }
    if(*fim==(tam-1))
    {
        int i;
        *fim=-1;
        for(int k=*ini;k<tam;k++)
        {
            fila[i++]=fila[k];
            fila[k]=NULL;
            *fim=*fim+1;
        }
        *ini=0;
    }
    fila[++*fim]=elemento;
    return 1;
}
  
int retirar(int *fila, int tam, int *ini,int *fim)
{
    if(*fim==*ini && *fim==-1)
        {
            printf("\nFila ja vazia!\n");
            return 0;
        }
    if(*fim==*ini)
        {
            fila[*ini]=NULL;
            *ini=-1;
            *fim=-1;
            return 1;
        }
    fila[*ini]=NULL;
    *ini=*ini+1;
    return 1;
}
int main() {

    char op;
    int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
    printf("Informe o tamanho desejado para a fila: ");
    scanf("%d",&tam);
    if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
    do{
        printf("\n(i)nserir (r)etirar (s)air: ");
        getchar();
        scanf("%c",&op);
        switch (op){
            case 'i':
                printf("\nInforme o elemento a ser inserido: ");
                scanf("%d",&elemento);
                ok=inserir(fila,elemento,tam,&ini,&fim);
                if(ok)printf("\nElemento inserido com sucesso!\n");
                else printf("\nNao foi possivel inserir o novo elemento\n");
                break;
            case 'r':
                ok=retirar(fila,tam,&ini,&fim);
                if(ok)printf("\nElemento retirado com sucesso!\n");
                else printf("\nNao foi possivel retirar o elemento\n");
                break;
        }
        for(i=0;i<tam;i++) printf("%d\t",fila[i]);
        printf("\n");
    }while(op!='s');
    return 0;
}