Problema em c++

1. Problema em c++

Haroldo Lorenci
hlorenci

(usa Outra)

Enviado em 19/10/2016 - 15:27h

Sou iniciante em c++, não consegui descobrir o problema do algoritmo da questão abaixo:
1-Na tentativa de criar um programa para testar os conceitos de filas, você escreveu o seguinte código:

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

struct node {
int info;
struct node *ptr;
}*frente, *cauda, *temp, *frente1;

int primeirodafila();
void inserir( int data);
void apagar();
void esvaziar();
void mostrar();
void criar();
void tamanho();

int count = 0;

int main () {
int no, ch, e;
criar();
while (1)
{
printf( "\n 1 - inserir um elemento;");
printf( "\n 2 - apagar um elemento;");
printf( "\n 3 - devolver o primeiro elemento;");
printf( "\n 4 - esvaziar a fila;");
printf( "\n 5 - mostrar a fila;");
printf( "\n 6 - tamanho da fila");
printf( "\n 7 - sair");
printf( "\n Digite sua escolha");
scanf_s( "%d", &ch);
switch (ch){
case 1:
printf("\n Digite o elemento:");
scanf_s("%d", &no);
inserir(no);
break;
case 2:
apagar();
break;
case 3:
e = primeirodafila();
if (e != 0){
printf("\n O primeiro da fila: %an", e);
system("Pause;");
}
else {
printf ("\n A fila vazia.Xn");
system ("Pause;");
}
break;
case 4:
esvaziar();
break;
case 5:
mostrar();
printf( "\n Digite sua escolha");
scanf_s( "%d", &ch);
break;
case 6:
tamanho();
printf( "\n Digite sua escolha: ");
scanf_s( "%d", &ch);
break;
case 7:
exit(0);
break;
default:
printf("\n Digite sua escolha");
break;
}
system("cls");
}
}
void criar() {frente = cauda = NULL;}
void tamanho() { printf( "\n Tamanho da fila: %d", count); }

void inserir( int data){
if (cauda == NULL)
{
cauda = (struct node *)malloc( 1 * sizeof( struct node));
cauda->ptr = NULL;
cauda->info = data;
frente = cauda;
}
else
{

temp = (struct node *)malloc( 1 * sizeof( struct node));
cauda->ptr = temp;
temp->info = data;
temp->ptr = NULL;
temp = cauda;
}
count++;
}

void mostrar() {

frente1 = frente;
if ((frente1 == NULL) && (cauda == NULL))
{

printf( "\nA fila vazia.\n");
return;
}
while (frente1 != cauda)
{

printf( "%d ", frente1->info);
frente1 = frente1->ptr;
}
if (frente1 == cauda)
printf( "%d", frente1->info);
}

void apagar(){
frente1 = frente;
if (frente1 == NULL)
{

printf("Xn A fila vazia");
return;
}
else
if (frente1->ptr != NULL)
{

frente1 = frente1->ptr;
printf("\n Retirado da fila o valor: %d", frente->info);
free(frente);
frente = frente1;
}
else
{

printf( "\n Retirado da fila o valor: %d", frente->info);
free(frente);
frente = NULL;
cauda = NULL;
}
count--;
}


int primeirodafila(){

if ((frente != NULL) && (cauda != NULL))
return(frente->info);
else
return 0;
}

void esvaziar(){

if ((frente == NULL) && (cauda == NULL))
printf("\nA fila vazia");
else
printf("\nA fila vazia");
system("pause");
}


No entanto, o seu programa não funcionou e você precisa encontrar onde está o erro e cabe a você garantir que o código apresentado atenda a estrutura básica de um programa contendo uma lista.Considerando as opções a seguir, marque aquela que contém a linha de código que está errada.

A temp = cauda;

B cauda->info = data;

C frente1 = frente1->ptr;

D return(frente->info);

E cauda->ptr = NULL;



  


2. Re: Problema em c++

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 19/10/2016 - 15:36h

Legal campeão, mas qual a sua opinião?
Raramente alguém "dá" a resposta pronta para algum problema.


--
Uilian Ries
Linux Counter: 521986


3. Re: Problema em c++

Haroldo Lorenci
hlorenci

(usa Outra)

Enviado em 19/10/2016 - 16:23h

Digitei todo o código no Dev-c, fui testando cada uma das alternativas e na linha frente1 = frente1->ptr; notei algo diferente, mas não tenho certeza, por isso minha dúvida amigo.


4. Re: Problema em c++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/10/2016 - 13:56h

É difícil dar qualquer dica que não entregue a solução completa de bandeja.

Faça o seguinte: concentre-se no valores que deveriam ter cada os ponteiros frente e cauda. Para cada função que modifica a lista, veja se, ao final da operação, os ponteiros terão os valores que você acha que eles deveriam ter.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts