Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <malloc.h>
- struct Pilha {
- int valor;
- struct Pilha *proximaPilha;
- };
- typedef struct Pilha pilha;
- /*// variavel para armazenar endereço de memoria de uma lista encadeada*/
- pilha *p, *inicio = NULL, *aux, *ultima;
- int i = 1;
- void adicionar(int valor) {
- p = (pilha *) malloc(sizeof(pilha));
- if (p == NULL) {
- printf("\nmemoria cheia.\n");
- } else {
- p->valor = valor;
- p->proximaPilha = NULL;
- i++;
- if (inicio == NULL) {
- inicio = p;
- } else {
- aux = inicio;
- while (aux->proximaPilha != NULL) {
- aux = inicio->proximaPilha;
- }
- aux->proximaPilha = p;
- }
- }
- }
- void adicionar_inicio(int value) {
- p = (pilha *) malloc(sizeof(pilha));
- if (p != NULL) {
- p->valor = value;
- p->proximaPilha = NULL;
- i++;
- if(inicio == NULL){
- inicio = p;
- }else{
- p->proximaPilha = inicio;
- inicio = p;
- }
- }
- }
- void remover_inicio() {
- aux = inicio;
- aux = aux->proximaPilha;
- free(inicio);
- inicio = aux;
- i--;
- }
- void remover_final() {
- aux = inicio;
- while (aux != NULL) {
- if (aux->proximaPilha->proximaPilha == NULL) {
- free(aux->proximaPilha);
- aux->proximaPilha = NULL;
- i--;
- }
- aux = aux->proximaPilha;
- }
- }
- void consultaPorValor(int valor) {
- aux = inicio;
- int j;
- for (j = 0; j < i; ++j) {
- if (valor == aux->valor) {
- printf("\nINDICE DO VALOR %i = %i\n", aux->valor, j);
- break;
- }
- aux = aux->proximaPilha;
- }
- }
- void consultaPorIndice(int indice) {
- aux = inicio;
- int j;
- for (j = 0; j < i; ++j) {
- if (indice == j) {
- printf("\nVALOR DO INDICE %i = %i\n", j, aux->valor);
- break;
- }
- aux = aux->proximaPilha;
- }
- }
- void imprimir() {
- aux = inicio;
- while (aux != NULL) {
- printf("%i - ", aux->valor);
- aux = aux->proximaPilha;
- }
- }
- void adicionar_index(int indice, int valor) {
- p = (pilha *) malloc(sizeof(pilha));
- if (p != NULL) {
- p->valor = valor;
- p->proximaPilha = NULL;
- if(inicio == NULL){
- inicio = p;
- }else{
- aux = inicio;
- for (int j = 0; j < i; ++j) {
- if (indice == j) {
- p->proximaPilha = aux->proximaPilha;
- aux->proximaPilha = p;
- i++;
- break;
- }
- aux = aux->proximaPilha;
- }
- }
- }
- }
- /* void remover_index(){}*/
- int main() {
- int resp;
- int valor;
- do {
- printf("1. Adicionar_direita\n");
- printf("2. Adicionar_esquerda\n");
- printf("3. Adicionar_indice\n");
- printf("4. Remover_inicio\n");
- printf("5. Remover_final\n");
- printf("6. Remover_indice\n");
- printf("7. Consultar_valor\n");
- printf("8. Consultar_indice\n");
- printf("9. Imprimir\n");
- printf("10. Sair\n");
- printf("Escolha uma das opcoes acima: ");
- scanf("%i", &resp);
- switch(resp){
- case 1:
- printf("\nInforme o valor a ser adicionado: ");
- scanf("%i", &valor);
- adicionar(valor);
- printf("\nValor adicionado com sucesso.\n\n");
- break;
- case 2:
- printf("\nInforme o valor a ser adicionado: ");
- scanf("%i", &valor);
- adicionar_inicio(valor);
- printf("\nValor adicionado com sucesso.\n\n");
- break;
- case 3:
- printf("\nInforme o valor a ser adicionado: ");
- scanf("%i", &valor);
- printf("\nInforme o indice: ");
- int indice;
- scanf("%i", &indice);
- adicionar_index(indice, valor);
- printf("\nValor adicionado com sucesso.\n\n");
- break;
- case 4:
- remover_inicio();
- printf("\nValor no inicio removido com sucesso!\n\n");
- break;
- case 5:
- remover_final();
- printf("\nValor no final removido com sucesso!\n\n");
- break;
- case 6:
- printf("\nainda falta colocar\n");
- break;
- case 7:
- printf("\nInforme o valor a ser consultado: ");
- scanf("%i", &valor);
- consultaPorValor(valor);
- break;
- case 8:
- printf("\nInforme o indice a ser consultado: ");
- scanf("%i", &valor);
- consultaPorIndice(valor);
- break;
- case 9:
- printf("\n#########IMPRIMIR#########\n");
- imprimir();
- printf("\n\n");
- break;
- }
- } while (resp != 10);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement