Preciso de ajuda com essa lista escadeada, os erros são na parte de remoção o ultimo item não é removido da lista, é na parte de perquisar itens...
porfavor eu preciso pra amanhã;
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define dgetchar() getchar();getchar();
// Estrutura da LISTA
struct tipo_lista {
int cod;
char nome[30];
int qtd;
float valor;
struct tipo_lista *prox;
};
// Definição de um NOVO tipo de DADOS chamado Lista
typedef struct tipo_lista Lista;
/*******************************************************************************
Procedimento e Funções de Apoio
*******************************************************************************/
// Posiciona uma mensagem na coluna e linha especificada
void gotoxy(int coluna, int linha);
//Desenhar borda
void desenharBorda();
// Exibi o Menu Principal
void menuPrincipal();
/*******************************************************************************
Procedimento e Funções para Manipular a LISTA
*******************************************************************************/
// declara uma lista não inicalizada
Lista *listaRegistro;
//Inseri dados
Lista* inserirDados(Lista *lista);//declaração da função
//exibir dados
void LiberarLista(Lista *lista);
//exibir dados
void exibirDados(Lista *lista);
void excluir(Lista *lista, int v);
//Buscar
// void ListaBusca(Lista *lista);
//função de inicialização : retorna uma lista vazia
Lista *inicializa();
// Função de inicialização: retorna uma lista vazia
Lista *inicializa(void)
{
return NULL;
}
/*******************************************************************************
Programa PRINCIPAL
*******************************************************************************/
int main()
{
// Repetição Infinita
for (;;)
{
menuPrincipal();
}
return 0;
}
/*******************************************************************************
BORDAS
*******************************************************************************/
// Função para posicionar na coordenada X,Y
// (Coluna(X),Linha(Y)) da tela.
void gotoxy(int coluna, int linha)
{
COORD point;
point.X = coluna; point.Y = linha;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point);
}
// Desenhar borda
void desenharBorda()
{
int i = 0;
for (i=0;i<80;i++){
gotoxy(i,0);
printf("#");
gotoxy(i,3);
printf("#");
//-------------------
gotoxy(i,14);
printf("");
gotoxy(i,15);
printf("");
gotoxy(i,16);
printf("");
gotoxy(i,17);
printf("");
gotoxy(i,18);
printf("");
//---------------------
gotoxy(i,19);
printf("#");
gotoxy(i,24);
printf("#");
}
for (i=0;i<24;i++){
gotoxy(0,i);
printf("#");
gotoxy(79,i);
printf("#");
}
}
// Procedimento para exibir o Menu Principal
void menuPrincipal()
{
int op;
// Limpa a tela.
system("title INFORMATICA MCS");
system("cls");
// Alterar a cor do fundo da tela e a cor da fonte (fundo azul e fonte branca).
system("color 4F");
desenharBorda();
gotoxy(25,1);
printf("M C S I N F O R M A T I C A");
// LISTA *****************************************************************
gotoxy(25,5);
printf("CADASTRO");
gotoxy(25,8);
printf("[1] - INSERIR PRODUTO");
gotoxy(25,10);
printf("[2] - EXIBIR PRODUTOS");
gotoxy(25,12);
printf("[3] - BUSCAR PRODUTOS");
gotoxy(25,14);
printf("[4] - EXCLUIR PRODUTOS");
gotoxy(25,16);
printf("[5] - LIBERAR LISTA");
gotoxy(25,18);
// SAIR *****************************************************************
gotoxy(25,18);
printf("[0] - SAIR");
gotoxy(25,20);
printf("Digite a Operacao: ");
scanf("%d",&op);
switch(op){
int numero;
// LISTA ***************************************************************
case 1 :
// Inseri um elemento na Lista
listaRegistro = inserirDados(listaRegistro);
break;
case 2 :
// Exibir dados
exibirDados(listaRegistro);
break;
case 4:
gotoxy(25,26);
printf("Digite o codigo para retirar\n");
scanf("%d",&numero);
excluir(listaRegistro, numero);
break;
//Buscar em lista
case 3 :
gotoxy(25,26);
// ListaBusca(listaRegistro);
break;
case 5 :
// LIBERAR
LiberarLista(listaRegistro);
break;
// SAIR **************************************************************
// Finaliza o programa
case 0 :
exit(0);
break;
default:
printf("Opção Errada");
}
}
// Inseri Dados
Lista* inserirDados(Lista *lista)
{
int cod;
char nome[30];
int qtd;
float valor;
// Alocar memória para o novo registro da lista
//Lista *novo = (Lista*) malloc(sizeof(Lista));
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->prox = lista;
system("cls"); // Limpa a tela.
gotoxy(30,1);
printf("Inserir Dados");
gotoxy(5,4);
printf("Entre com o codigo do Produto: ");
scanf("%d",&cod);
gotoxy(5,5);
printf("Entre com o nome do Produto: ");
getchar();
gets(nome);
gotoxy(5,6);
printf("Entre com a Quantidade: ");
scanf("%d",&qtd);
gotoxy(5,7);
printf("Entre com o Valor: ");
scanf("%f",&valor);
// Atribuir os valores lido
// para o novo elemento da lista
novo->cod = cod;
sprintf(novo->nome, " %s", nome);
novo->qtd = qtd;
novo->valor = valor;
// Associar o novo elemento a lista
//novo->prox = lista;
gotoxy(30,20);
printf("Pressione uma tecla para continuar...");
getchar();
getchar();
return novo;
}
// Exibir Dados
void exibirDados(Lista *lista)
{
int i=0;
// Variável (ponteiro) auxiliar para percorrer a lista
Lista* p;
system("cls"); // Limpa a tela.
gotoxy(30,1);
printf("Exibir Dados");
gotoxy(5,5);
printf("Codigo");
gotoxy(20,5);
printf("Produto");
gotoxy(40,5);
printf("Quantidade");
gotoxy(60,5);
printf("Valor");
// Imprimir todos os elementos da lista
for (p = lista; p != NULL; p = p->prox)
{
gotoxy(5,i+7);
printf("%d",p->cod);
gotoxy(20,i+7);
printf("%s",p->nome);
gotoxy(40,i+7);
printf("%d",p->qtd);
gotoxy(60,i+7);
printf("%2.2f",p->valor);
i++;
}
gotoxy(30,22);
printf("Pressione uma tecla para continuar...");
getchar();
getchar();
}
//################################################################################################
/* função vazia: retorna 1 se vazia ou 0 se não vazia */
int vazia (Lista* l)
{
if (l == NULL)
return 1;
else
return 0;
}
void excluir (Lista* l, int v)
{
Lista* ant = NULL; /* ponteiro para elemento anterior */
Lista* p = l; /* ponteiro para percorrer a lista*/
if (vazia(l) == 1 )
{
printf("Operacao não pode ser realizada! Lista esta vazia.");
return;
}
/* procura elemento na lista, guardando anterior */
while (p != NULL && p->cod != v)
{
ant = p;
p = p->prox;
]
}
/* verifica se achou elemento */
if (p == NULL)
{
printf("O elemento [ %d ] não consta na Lista.\n",v);
return;
}
/* retira elemento */
if (ant == NULL)
{
/* retira elemento do inicio */
l = p->prox;
}
else
{
/* retira elemento do meio da lista */
ant->prox = p->prox;
}
// Liberar da memoria
free(p);
}
/* Função Buscar */
/*
void ListaBuscar(Lista *l , int v)
{
system("cls");
printf("Digite o valor a ser buscado");
scanf("d%", &v);
Lista*p;
for(p=l;p!=NULL; p=p->prox); {
//info
if(p->cod == v){
return p;
}
else {
return NULL;
}
*/
void LiberarLista(Lista* lista)
{
int t;
Lista* p = lista;
while(p !=NULL ){
Lista* t = p ->prox;
free(p);
p=t;
}
}
Pergunta
Samukaaa
Preciso de ajuda com essa lista escadeada, os erros são na parte de remoção o ultimo item não é removido da lista, é na parte de perquisar itens...
porfavor eu preciso pra amanhã;
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.