Ir para conteúdo
Fórum Script Brasil
  • 0

Passar estrutura como argumento para uma função


luizhk

Pergunta

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...