#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;
}
Este blog foi criado devido à dificuldade que estou tendo de encontrar alguns códigos de algoritmos na net. Sei que, assim como eu, outros procuram o mesmo conteúdo. Espero estar ajudando. Todas as contribuições serão bem-vindas.
quinta-feira, 29 de setembro de 2011
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;
}
#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;
}
#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;
}
Assinar:
Postagens (Atom)