0% acharam este documento útil (0 voto)
4 visualizações4 páginas

Codigo

O documento apresenta a implementação de uma lista encadeada em C para gerenciar produtos, incluindo suas estruturas, funções para manipulação e impressão da lista. As funções permitem instanciar produtos, inserir na lista de forma ordenada, verificar se a lista está vazia e liberar a memória utilizada. O programa principal demonstra a criação de produtos e sua inserção na lista, seguida da impressão dos produtos e liberação da memória.

Enviado por

jessika.je19
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações4 páginas

Codigo

O documento apresenta a implementação de uma lista encadeada em C para gerenciar produtos, incluindo suas estruturas, funções para manipulação e impressão da lista. As funções permitem instanciar produtos, inserir na lista de forma ordenada, verificar se a lista está vazia e liberar a memória utilizada. O programa principal demonstra a criação de produtos e sua inserção na lista, seguida da impressão dos produtos e liberação da memória.

Enviado por

jessika.je19
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Declaração das bibliotecas, da estrutura da lista de produtos e dos protótipos das

funções implementadas:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
char codigoBarras[8];
char descricao[20];
float preco;
int categoria;
} Produto;

struct Nodo{
Produto dado;
struct Nodo *prox;
};
typedef struct Nodo nodo;

void instancia(Produto *, char *, char *, float, int);


void iniciar(nodo *);
int estaVazia(nodo *);
void inserirOrdenado(nodo *, Produto *);
void imprimir(nodo *);
void liberar(nodo *);

Implementação da função instância que insere os dados na estrutura Produto:

void instancia(Produto *produto, char *codigoBarras, char *descricao,


float preco, int categoria){
strcpy(produto->codigoBarras, codigoBarras);
strcpy(produto->descricao, descricao);
produto->preco= preco;
produto->categoria= categoria;
}

Implementação da função que inicia a lista:

void iniciar(nodo *L) {


L->prox= NULL;
}

Implementação da função que verifica se a lista está vazia:

int estaVazia(nodo *L) {


if (L->prox == NULL)
return 1;
else
return 0;
}
Implementação da função que imprime a lista de produtos:

void imprimir(nodo *L) {


if (estaVazia(L)) {
printf("Lista vazia!\n\n");
return;
}

nodo *no= L->prox;


printf("%-8s %s \t%s %s \n",
"Codigo", "Descricao", "Valor", "Categoria");
while(no != NULL){
printf("%-8s %s \t%-6.2f %d \n",
no->[Link], no->[Link],
no->[Link], no->[Link]);
no= no->prox;
}
printf("\n\n");
}

Implementação da função que exclui a lista depois da execução do programa:

void liberar(nodo *L) {


nodo *proximo;
nodo *atual;
atual= L;
while(atual->prox != NULL){
proximo= atual->prox;
atual->prox= NULL;
free(atual);
atual= proximo;
}
}

Implementação da função que insere os dados ordenados na lista:

Inicialmente esse método verifica se a lista está vazia para inserir no início e, caso negativo,
realiza uma varredura na lista para identificar a posição correta de inserção do elemento na ordem
classificada.
Na sequência, identifica se o novo elemento será inserido no início da lista ou em qualquer
outra posição.

void inserirOrdenado(nodo *L, Produto *dado) {


nodo *novo= (nodo *) malloc(sizeof(nodo));

strcpy(novo->[Link], dado->codigoBarras);
strcpy(novo->[Link], dado->descricao);
novo->[Link] = dado->categoria;
novo->[Link] = dado->preco;

if (estaVazia(L)) {
novo->prox= NULL;
L->prox= novo;
} else {
nodo *tmp= NULL;
nodo *ant= NULL;
nodo *no= L->prox;
char desc[20];
int pos= 0;
while(no != NULL) {
if (dado->preco > no->[Link]) {
pos++;
}
no= no->prox;
}

if (pos == 0) {
tmp= L->prox;
L->prox= novo;
novo->prox= tmp;
} else {
int p= 0;
no= L->prox;
while(no != NULL) {
p++;
if (p == pos) {
tmp= no->prox;
no->prox= novo;
novo->prox= tmp;
break;
}
no= no->prox;
}
}
}
}

Implementação do método principal:

main() {
Produto produto;

nodo *L= (nodo *) malloc(sizeof(nodo));


iniciar(L);

instancia(&produto, "9874811", "Alcatra", 30.00, 3);


inserirOrdenado(L, &produto);

instancia(&produto, "9874651", "Alvejante", 2.50, 2);


inserirOrdenado(L, &produto);

instancia(&produto, "9878145", "Massa fina", 2.95, 1);


inserirOrdenado(L, &produto);

instancia(&produto, "9878145", "Massa grossa", 3.94, 1);


inserirOrdenado(L, &produto);

instancia(&produto, "9878145", "Batata doce", 2.55, 1);


inserirOrdenado(L, &produto);

instancia(&produto, "9878145", "Batata branca", 1.59, 1);


inserirOrdenado(L, &produto);

imprimir(L);
liberar(L);
}

Você também pode gostar