Exemplo n.º 1
0
int main (){
   
    Pilha *pilha;
    pilha = criaPilha(10);

    if (emptyPilha(pilha))
	{
		printf ("A pilha está vazia\n");
	}
    if (popPilha(pilha,NULL)==UNDERFLOW)
	{    
		printf ("Ocorreu UNDERFLOW da pilha\n");
	}
	
	for(long l = 0; ; l++)
	{	
		if(pushPilha(pilha, (int) l ) == OVERFLOW)
		{
			printf ("Ocorreu OVERFLOW da pilha no %ld-esimo elemento\n", l);
			break;
		}
	}
	
	imprimePilha(pilha);

    destroiPilha(&pilha);
    
    return 0;
}
Exemplo n.º 2
0
int main(){
    Pilha *posfixa = criaPilha();
    Pilha *operadores = criaPilha();
    Pilha *infixa = criaPilha();
    char inf[MAX],letra,t;
    int testes,n,i,j,f=0;
    scanf("%d",&testes);
    while(testes > 0){
        testes--;
        scanf("%s",&inf);
        n = strlen(inf);
        for(i = n-1;i>=0;i--){
            Push(infixa,inf[i]);
        }
        while(!isEmpty(infixa))
        {
            Pop(infixa,&letra);
            if(letra != '+' && letra != '-' && letra != '*' && letra != '/' && letra != '^' && letra != '(' && letra != ')'){
                Push(posfixa,letra);
            }else if(letra == '('){
                Push(operadores,letra);
            }else if(letra == ')'){
                desempilha(posfixa,operadores);
            }else{
                while(precedencia(Topo(operadores)) > precedencia(letra) || precedencia(Topo(operadores)) == precedencia(letra)){
                    Pop(operadores,&t);
                    Push(posfixa,t);
                }
                Push(operadores,letra);
            }
        }
            if(!isEmpty(operadores))
            {
                desempilha_op(posfixa,operadores);
            }
        exibe(posfixa);
        Empty(posfixa);
        Empty(operadores);
    };

    return 0;
}
Exemplo n.º 3
0
Pilha* menuCriaPilha(int* qde)
{
    std::string tmp;

    std::cout << "Informe a quantidade de itens na pilha: ";
    getline(std::cin, tmp);
    //Converte de forma segura para INT, evitando usar o CIN
    std::stringstream convOpcao(tmp);
    convOpcao >> *qde;

    return criaPilha(*qde);
}
Exemplo n.º 4
0
void exibe(Pilha* p){
    char letra;
    Pilha *inv = criaPilha();
    while(!isEmpty(p)){
        Pop(p,&letra);
        Push(inv,letra);
    }
    while(!isEmpty(inv)){
        Pop(inv,&letra);
        printf("%c",letra);
    }
    printf("\n");
}
Exemplo n.º 5
0
void imprimePilha(Pilha *pilha){
	Pilha *aux;
	int aux2;
	aux=criaPilha(sizePilha(pilha)); // tamanho atual da pilha
	while (!emptyPilha(pilha)){
			popPilha(pilha,&aux2);
			pushPilha(aux,aux2);
	}
	while (!emptyPilha(aux)){
			popPilha(aux,&aux2);
			pushPilha(pilha,aux2);
			printf("%3d", aux2);
	}
	printf("\n");
}
Exemplo n.º 6
0
void buscaProfundidade(int V, int grafo[V][V], int ini){
	LISTA lista;
	PILHA pilha;
	int i =0, j=0; //linha, coluna
	int aux, comp, k;

    lista.fim = 0;
	lista.vetor[0] = ini;
	lista.fim ++;

    InicializaPilha();
	criaPilha(&pilha);
	push(&pilha, ini);

	while( pilhaVazia(&pilha) != 1 ){ //enquanto a pilha nao for vazia
		for(j = 0; j < V; j++){
			if(grafo[i][j] == 1){ //se achou aresta

				comp = 0;
                k =0;

				for(k = 0; k < lista.fim; k++) //ok verifica se ja foi visitado
					if (j == lista.vetor[k])
						comp = 1;

				if(comp == 0){
					push(&pilha, j);
                }
			}
		}

		aux = pop(&pilha); //aux recebe o ultimo conteudo da pilha
        i = aux;

        for(k =0; k < lista.fim; k++){ //verifica se já foi visitado
            if(i == lista.vetor[k])
                aux = pop(&pilha);
                i = aux;
		}

		lista.vetor[lista.fim] = aux; //enfileira o ultimo conteudo
        lista.fim++;

	}
	for(i =0; i<V; i++)
		printf("%d ", lista.vetor[i]);

}
Exemplo n.º 7
0
void removerValor(pilha *p, int x){
    if(!pilhaVazia(*p)){
        pilha aux;
        if(p->conteudo[p->topo] == x){
            p->topo--;
        }else{
            int i = p->topo;
            criaPilha(&aux);
            while(p->conteudo[i] != x){
                empilha(&aux,p->conteudo[i]);
                desenpilha(p);
                i--;
            }
            i = aux.topo-1;
            while(i > 0){
                empilha(p,aux.conteudo[i]);
                i--;
            }
        }
    }
}
Exemplo n.º 8
0
int main(){
	PILHA *pilha;
	int escolha;
	int num;
	int flag;
	
	pilha = criaPilha();//pilha é topo
	

	for (;;){
		escolha=menu();
		switch (escolha){
			case 1:
				printf ("Informe o número que deseja empilhar:\n");
				scanf ("%d", &num);
				pilha=empilha(pilha, num);
				break;
			case 2:
				pilha=desempilha (pilha);
				break;
			case 3:
				tamanhoDaPilha(pilha);
				break;
			case 4:
				flag = mostraTopo(pilha);
				if (flag == -1){
					printf ("A pilha está vazia\n");
				}
				else{
					printf ("Elemento do Topo: %d\n", pilha->elemento);
				}
				break;
			case 5:
				return 0;;
			}
	}
	
	return 0;		
}
Exemplo n.º 9
0
int main(void)
{
    setlocale(LC_ALL, "Portuguese");
    node* Pilha = (node*) malloc(sizeof(node));

    if(!Pilha)
    {
        puts("Não há memória suficiente!");
        exit(1);
    }
    else
    {
        criaPilha(Pilha);
        int resposta;
        do
        {
            resposta = obtemResposta();
            escolhe(resposta, Pilha);
        }while(resposta);
    }
    free(Pilha);
    return 0;
}
Exemplo n.º 10
0
void escolhe(int resposta, node* Pilha)
{
    switch(resposta)
    {
        case 0:
            limpaPilha(Pilha);
            break;
        case 1:
            exibePilha(Pilha);
            break;
        case 2:
            insereItem(Pilha);
            break;
        case 3:
            removeItem(Pilha);
            break;
        case 4:
            criaPilha(Pilha);
            break;
        default:
            puts("\nOpção inválida! Verifique novamente as opções apresentadas.");
    }

}
Exemplo n.º 11
0
void coloracaoGulosa(Grafo g, int k)
{
	/*Cria um grafo de backup*/
	GBsalvaGrafo(g,"guardaGrafo.txt");
	Grafo grafo = GGcarregaGrafo("guardaGrafo.txt");
	remove("guardaGrafo.txt");

	/*Declaracao de variaveis e EDs*/
	int i, corVizinho, vertice, menorGrau, aresta, encontrouMenor,menorCor, verticeVizinho, tamanho = GInumeroVertices(grafo);
	Pilha pilha = criaPilha();
	VetVertice vertices = (VetVertice) malloc(sizeof(struct vetVertice)*tamanho);
	vertice = GVprimeiroVertice(grafo);
	/*Colore como neutro todos os vertices*/
	vertices[0].idVertice = vertice;
	vertices[0].cor = 0;
	for(i = 1; i < tamanho; i++)
	{
		vertices[i].idVertice = GVproximoVertice(grafo,vertice);
		vertices[i].cor = 0;
		vertice = GVproximoVertice(grafo,vertice);
	}

	/*Definicao da ordem de coloracao*/
	while(GInumeroVertices(grafo) != 0)
	{
		menorGrau = INT_MAX;
		for(i = GVprimeiroVertice(grafo); i != 0; i = GVproximoVertice(grafo,i))
		{
			if(GIpegaGrau(grafo,i) < menorGrau)
			{
				menorGrau = GIpegaGrau(grafo,i);
				vertice = i;
			}
		}
		GVdestroiVertice(grafo,vertice);
		inserePilha(pilha,vertice);
	}
	GGdestroiGrafo(grafo);

	/*Colore os vertices*/
	while(!vaziaPilha(pilha))
	{
		vertice = retirarPilha(pilha);
		if(GIpegaGrau(g,vertice) >= k)
		{
			printf("Não existe solução\n");
			return;
		}
		encontrouMenor = 0;
		menorCor = 1;
		int achouIgual = 0;
		while(!encontrouMenor)
		{
			achouIgual = 0;
			for(aresta = GAprimaAresta(g,vertice); aresta != 0; aresta = GAproxAresta(g,vertice,aresta))
			{
				verticeVizinho = GVvizinho(g,aresta,vertice);
				corVizinho = pegaCorVertice(vertices,tamanho,verticeVizinho);
				if(menorCor == corVizinho)
				{
					achouIgual = 1;
				}
			}
			if(achouIgual)
			{
				menorCor++;
			}
			else
			{
				encontrouMenor = 1;
			}
		}
		coloreVertice(vertices,tamanho,vertice,menorCor);
	}

	for(i = 0; i < tamanho; i++)
	{
		printf("Vertice %d possui a cor %d\n", vertices[i].idVertice, vertices[i].cor);
	}
}