Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- typedef struct{
- int cod;
- char nome[40];
- }SDado;
- struct SNodo{
- SDado info;
- struct SNodo *pNext;
- };
- typedef struct{
- struct SNodo *pFirst;
- }SLista;
- void Clear(struct SNodo *pFirst)
- {
- struct SNodo *pAtual, *pAnterior;
- if (pFirst->pNext == NULL)
- return;
- pAtual = pFirst;
- for (; pAtual->pNext != NULL;)
- {
- pAnterior = pAtual;
- pAtual = pAtual->pNext;
- }
- free(pAtual);
- pAnterior->pNext = NULL;
- return;
- }
- void Reset(SLista *pLista)
- {
- while (pLista->pFirst->pNext != NULL)
- Clear(pLista->pFirst);
- free(pLista);
- }
- bool PUSH(SLista *pLista, struct SNodo *pNodo, unsigned int nIndex)
- {
- struct SNodo *pAtual, *pAnterior;
- int nPos;
- if (pLista->pFirst == NULL && nIndex !=0)
- return 0; /* erro: nIndex invalido */
- if (pLista->pFirst == NULL && nIndex == 0)
- {
- pLista->pFirst = pNodo;
- pLista->pFirst->pNext = NULL;
- return 1;
- }
- if (nIndex == 0)
- {
- pNodo->pNext = pLista->pFirst;
- pLista->pFirst = pNodo;
- return 1;
- }
- pAtual = pLista->pFirst;
- for (nPos=0; nPos < nIndex && pAtual != NULL; nPos++)
- {
- pAnterior = pAtual;
- pAtual = pAtual->pNext;
- }
- if (!pAtual) return 0;
- pNodo->pNext = pAtual->pNext;
- pAtual->pNext = pNodo;
- return 1;
- }
- bool POP(SLista *pLista, struct SNodo *pNodo, unsigned int nIndex)
- {
- struct SNodo *pAnterior, *pAtual;
- int nPos;
- if (pLista->pFirst == NULL) return 0; /* erro: lista vazia */
- if (nIndex == 0)
- {
- pNodo = pLista->pFirst;
- pLista->pFirst = pLista->pFirst->pNext;
- return 1;
- }
- pAtual = pLista->pFirst;
- for (nPos = 0; nPos < nIndex && pAtual != NULL; nPos++)
- {
- pAnterior = pAtual;
- pAtual = pAtual->pNext;
- }
- if (!pAtual) return 0; // erro nIndex invalido
- pAnterior->pNext = pAtual->pNext;
- pNodo = pAtual;
- return 1;
- }
- void Imprime(SLista *pLista)
- {
- struct SNodo *pAnterior, *pAtual=pLista->pFirst;
- for (; pAtual->pNext != NULL; )
- {
- printf("Nome: %s - Cod.: %d\n", pAtual->info.nome, pAtual->info.cod);
- pAnterior = pAtual;
- pAtual = pAtual->pNext;
- }
- }
- void main()
- {
- SLista *Encadeada=malloc(sizeof(SLista));
- Encadeada->pFirst=NULL;
- struct SNodo *Nodo;
- unsigned int i=0, j, a;
- bool confere;
- Inicio: printf("\nSelecione a sua escolha...\n0: Insere pessoa\n1: Deleta pessoa\n2: Limpa a lista\n3: Lista na tela as pessoas\n4: Sair do programa\nDigite: ");
- scanf("%lu", &a);
- switch(a)
- {
- case 0:
- if (i > 0)
- {
- printf("Digite o índice: ");
- scanf("%lu", &j);
- }
- Nodo=malloc(sizeof(struct SNodo));
- printf("Digite o nome: ");
- getchar();
- fgets(Nodo->info.nome,40,stdin);
- Nodo->info.cod = (int) *(Nodo->info.nome);
- confere=PUSH(Encadeada,Nodo,j);
- if (confere == true)
- {
- printf("Adicionado com sucesso!\n");
- i++;
- }
- else
- printf("Erro.\n");
- goto Inicio;
- break;
- case 1:
- if (i > 1)
- {
- printf("Digite o índice: ");
- scanf("%lu", &j);
- }
- confere=POP(Encadeada,Nodo,j);
- free(Nodo);
- if (confere == true)
- {
- printf("Removido com sucesso!\n");
- i--;
- }
- else
- printf("Erro.\n");
- goto Inicio;
- break;
- case 2:
- Reset(Encadeada);
- Encadeada=malloc(sizeof(SLista));
- printf("Lista limpa!\n");
- goto Inicio;
- break;
- case 3:
- Imprime(Encadeada);
- goto Inicio;
- break;
- case 4:
- Reset(Encadeada);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement