Skip to content

Instantly share code, notes, and snippets.

@ericrocha97
Last active May 12, 2020 22:40
Show Gist options
  • Save ericrocha97/b83bed7f20be1837f93f47b0ea98079c to your computer and use it in GitHub Desktop.
Save ericrocha97/b83bed7f20be1837f93f47b0ea98079c to your computer and use it in GitHub Desktop.
implementação de uma fila de placas.
#include<stdio.h>
#include<stdlib.h>
//CODIGO ADAPTADO POR ERIC ROCHA - FILAS
struct Node{
int reg;
char placa[20];
struct Node *prox;
};
typedef struct Node node;
typedef node *LISTA;
int id;
LISTA* criarLista(){
LISTA *li =(LISTA*) malloc (sizeof(LISTA));
if(li != NULL){
*li=NULL;
}else{
printf("Erro na alocação...\n");
exit(0);
}
return li;
}
void exibe(LISTA* lista){
if( (*lista) == NULL){
printf("LISTA VAZIA...\n");
}else{
node *tmp;
tmp = (*lista);
printf("Placas cadastradas: \n");
while (tmp != NULL){
printf("%d - %s \n", tmp->reg, tmp->placa);
tmp = tmp->prox;
}
}
printf("\n");
}
void insereFinal(LISTA* lista){
node *novo = (node*) malloc (sizeof(node));
if(novo == NULL){
printf("Erro na alocação...\n");
exit(0);
}
id++;
printf("Informe a placa: \n");
scanf("%s",&novo->placa);
novo->reg = id;
novo->prox = NULL;
if ((*lista) == NULL){
*lista = novo;
}else{
node *tmp;
tmp = (*lista);
while (tmp->prox != NULL){
tmp = tmp->prox;
}
tmp->prox = novo;
}
}
void libera(LISTA* lista){
if((*lista) == NULL){
printf("LISTA VAZIA...\n");
}else{
node *tmp;
while ((*lista) != NULL){
tmp = *lista;
*lista = (*lista)->prox;
free(tmp);
}
*lista=NULL;
}
}
int removeInicio(LISTA* lista){
if((*lista) != NULL){
node *proxNode, *tmp;
tmp = *lista;
proxNode = tmp->prox;
*lista = proxNode;
free(tmp);
printf("Placa removida com sucesso...\n");
}else{
printf("Nao existe placas para remover... \n");
}
}
int main(){
id = 0;
LISTA *lista = criarLista();
int op;
do{
printf("O que deseja:\n");
printf("1 - INSERIR\n");
printf("2 - REMOVER\n");
printf("3 - EXIBIR\n");
printf("0 - SAIR\n");
scanf("%d",&op);
switch(op){
case 1:
insereFinal(lista);
break;
case 2:
removeInicio(lista);
break;
case 3:
exibe(lista);
break;
default:
if(op == 0){
printf("Obrigado por usar...\n");
}else{
printf("Opcao nao cadastrada...\n");
}
break;
}
}while(op != 0);
libera(lista);
free(lista);
}
#include<stdio.h>
#include<stdlib.h>
//Elemento
struct pilha{
int cod;
char produto[20];
};
//Criando o tipo do elemento da lista
struct Node{
struct pilha pil;
struct Node *prox;
};
//Apelido a lista
typedef struct Node node;
//Declaração ponteiro da cabeça da lista
typedef node *LISTA;
LISTA* criarLista(){
//Aloca cabeça da lista
LISTA *li =(LISTA*) malloc (sizeof(LISTA));
if(li != NULL){
*li=NULL;
}else{
//Caso de erro de alocação
printf("Erro na alocação...\n");
exit(0);
}
return li;
}
void inserir(LISTA* lista){
//Declara o novo e aloca
node *novo = (node*) malloc (sizeof(node));
if(novo == NULL){
//Caso de erro de alocação
printf("Erro na alocacao...\n");
exit(0);
}
//Pede os dados a serem incluidos
printf("Informe cód do produto\n");
scanf("%d", &novo->pil.cod);
printf("Informe nome do produto\n");
scanf("%s", novo->pil.produto);
//Cria o novo final da lista
novo->prox = NULL;
//Caso a lista esteja vazia
if ((*lista) == NULL){
*lista = novo;
}else{
node *tmp;
tmp = (*lista);
//busca o ultimo elemento
while (tmp->prox != NULL){
tmp = tmp->prox;
}
tmp->prox = novo;
}
printf("\n");
}
int remover(LISTA* lista){
if((*lista) != NULL){
//Declaração das listas temporárias
node *antNode, *tmp;
//Faz tmp receber a cabeça da lista
tmp = *lista;
//Caso tenha apenas um elemento na lista
if(tmp->prox == NULL){
*lista = NULL;
printf("Produto removido...\n");
free(tmp);
}else{
//Avança o tmp para o ultimo elemento da lista
//Garante que o anterior sempre seja o ultimo antes de null
while (tmp->prox !=NULL){
antNode = tmp;
tmp = tmp->prox;
}
//Aponta para onde anterior saiu do While acima
antNode->prox = NULL;
printf("Produto removido...\n");
free(tmp);
}
}else{
//Caso a lista esteja vazia
printf("Lista está vazia\n");
}
printf("\n");
}
void mostrar(LISTA* lista){
//Caso a lista esteja vazia
if((*lista) == NULL){
printf("Lista está vazia\n");
}else{
//Cria uma temporária para recer a lista por que não é bom trabalhar com a lista para isso
node *tmp;
tmp = (*lista);
//LOOP para mostrar
while (tmp != NULL){
printf("Produto cód: %d, nome: %s\n", tmp->pil.cod, tmp->pil.produto);
//printf(", nome:%s \n", tmp->pil.produto);
tmp = tmp->prox;
}
}
printf("\n");
}
int main(){
LISTA *lista = criarLista();
int op;
do{
printf("Informe a opção desejada:\n");
printf("1 - Inserir\n");
printf("2 - Remover\n");
printf("3 - Mostrar\n");
printf("0 - SAIR\n");
scanf("%d",&op);
switch(op){
case 1:
inserir(lista);
break;
case 2:
remover(lista);
break;
case 3:
mostrar(lista);
break;
}
}while(op != 0);
//Libera a memória na finalização do programa
free(lista);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment