Jump to content
Fórum Script Brasil
  • 0

Passar estrutura como argumento para uma função


luizhk

Question

2 answers to this question

Recommended Posts

  • 0

então, tenho que ler passar cada caso do switch para procediementos e ler os dados, acrescentar na pilha.

/*******************************************************************************

* Implementação de Lista dinâmica encadeada não ordenada *

* Opções: 1 - Inserir no inicio *

* 2 - Inserir no final *

* 3 - Consultar toda lista *

* 4 - Remover da Lista *

* 5 - esvaziar a lista *

* 6 - sai do programa *

*******************************************************************************/

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

main()

{

//definindo o registro que representará a lista

struct LISTA

{

int num;

struct LISTA *prox;

};

// criação do ponteiro para lista

//a lista está vazia, logo o ponteiro inicio tem valor NULL

//o ponteiro inicio conterá o endereço do primeiro elemento da lista

struct LISTA *inicio = NULL;

//o ponteiro fim conterá o endereço do último elemento da lista

struct LISTA *fim = NULL;

//o ponteiro aux é um ponteiro auxiliar

struct LISTA *aux;

//o ponteiro anterior é um ponteiro auxiliar

struct LISTA *anterior;

//menu de opções

int op, numero, achou;

do

{

printf("\n========================================================================\n");

printf(" Insercao e remocao de numeros em uma Lista Encadeada (não ordenada) \n");

printf("========================================================================\n");

printf("\n 1 - Inserir no inicio");

printf("\n 2 - Inserir no final");

printf("\n 3 - Consultar toda lista");

printf("\n 4 - Remover da Lista");

printf("\n 5 - Esvaziar a lista");

printf("\n 6 - Sair");

printf("\n\n Escolha a operacao: ");

scanf("%d",&op);

switch(op)

{

case 1:

{

struct LISTA *novo;

novo = (struct LISTA*) malloc(sizeof(struct LISTA));

printf("\nDigite um numero a ser inserido");

scanf("%d", &novo->num);

//testa se foi alocado espaço

if (novo == NULL)

{

exit(0);

}

else

{

if (inicio == NULL)

{

//a lista está vazia e o elemento inserido será o primeiro e o último

inicio = novo;

fim = novo;

fim->prox = NULL;

}

else

{

// a lista já contem elementos e o novo elemento será inserido no inicio da lista

novo->prox = inicio;

inicio = novo;

}

printf("\nNumero inserido no inicio da lista");

}

break;

}

case 2:

{

struct LISTA *novo;

novo = (struct LISTA*) malloc(sizeof(struct LISTA));

printf("\nDigite um numero a ser inserido");

scanf("%d", &novo->num);

//testa se foi alocado espaço

if (novo == NULL)

{

exit(0);

}

else

{

if (inicio == NULL)

{

// a lista estava vazia e o elemento inserido será o primeiro e o último

inicio = novo;

fim = novo;

fim->prox = NULL;

}

else

{

// a lista já contem elementos e o novo elemento será inserido no fim da lista

fim->prox = novo;

fim = novo;

fim->prox = NULL;

}

printf("\nNumero inserido no fim da lista");

}

break;

}

case 3:

{

if (inicio == NULL)

{

// a lista está vazia

printf("\nLista vazia");

}

else

{

//a lista contém elementos e estes serão mostrados do inicio ao fim

printf("\nConsultando toda a lista");

aux = inicio;

while(aux != NULL)

{

printf("\nnum = %d",aux->num);

aux = aux->prox;

}

}

break;

}

case 4:

{

if (inicio == NULL)

{

// a lista está vazia

printf("\nLista vazia");

}

else

{

//a lista contém elementos e o elemento a ser removido será digitado

printf("\nDigite um numero a ser removido");

scanf("%d", &numero);

//todas as ocorrencias da lista, iguais ao número digitado, serão removidas

aux = inicio;

anterior = NULL;

achou = 0;

while(aux != NULL)

{

//o numero digitado foi encontrado na lista e será removido

if(aux->num == numero)

{

achou++;

if(aux == inicio)

{

//o numero a ser removido é o primeiro da lista

inicio = aux->prox;

free(aux);

aux = inicio;

}

else if (aux ==fim)

{

//o numero a ser removido é o último da lista

anterior->prox = NULL;

fim = anterior;

free(aux);

aux = NULL;

}

else

{

//o numero a ser removido está no meio da lista

anterior-> prox = aux->prox;

free(aux);

aux = anterior->prox;

}

}

else

{

anterior = aux;

aux = aux->prox;

}

}

if(achou == 0)

printf("\nNumero não encontrado");

else if (achou == 1)

printf("\nNumero removido 1 vez");

else

printf("\nNumero removido %d vezes",achou);

}

break;

}

case 5:

{

if (inicio == NULL)

{

// a lista está vazia

printf("\nLista vazia");

}

else

{

// a lista será esvaziada

aux = inicio;

while(aux != NULL)

{

inicio = inicio->prox;

free(aux);

aux = inicio;

}

printf("\nLista esvaziada");

}

break;

}

}

}while(op != 6);

getch();

}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...