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; }
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; }
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); }
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"); }
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"); }
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]); }
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--; } } } }
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; }
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; }
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."); } }
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); } }