Bit87 Ответов: 2

Нужен совет с очередью связанных списков


Здравствуйте, я пытаюсь сделать динамическую очередь с помощью связанного списка для создания ее узлов, но у меня есть некоторые проблемы с методом вставки, в какой-то момент данные, которые я передаю функции, теряются, и она возвращает мусор.

Основная проблема заключается в Nodo* PushQ(Nodo *nodo, int val)

Код

#include <iostream>

using namespace std;

// Create new node

struct Nodo{

	int val;
	Nodo *next;

};

class Queue
{
	
	public:
	
		Nodo *nodo, *end, *front; // [front]->[node]->[end]->NULL
		
Queue() // Constructor
{

	nodo = end = front = NULL;

}

Nodo* PushQ(Nodo *nodo, int val) // Insert value
{
	
	if(nodo == NULL) // At this point is all right, but next, it looses the data and pass to val trash
	{
		nodo = new Nodo;
		nodo->val = val; // At this point the data is gone, now it shows trash
		
		front = nodo;       //     front         end 
		front->next = NULL; // [data|*next]->[data|*next]->NULL
		end = front;
	}
	else
	{
		nodo = front->next;
		front = nodo;
		front->next = NULL;
	}
	
	return nodo;
	
}

int PopQ(Nodo *nodo) // Show queue data
{
	
	int aux = 0;
	
	nodo = new Nodo;
	nodo = end;
	
	while(nodo) // Infinite loop
	{
		cout << nodo->val << endl;
		aux = nodo->val;
	}
	
	return aux;
	
}

};

int main()
{
	Queue *Q1 = new Queue;

	Q1->nodo = Q1->PushQ(Q1->nodo, 5);
	Q1->nodo = Q1->PushQ(Q1->nodo, 20);
	Q1->nodo = Q1->PushQ(Q1->nodo, 6);
	Q1->nodo = Q1->PushQ(Q1->nodo, 7);
	Q1->nodo = Q1->PushQ(Q1->nodo, 33);

	Q1->PopQ(Q1->nodo);
	
	return 0;
}


Что я уже пробовал:

Некоторая отладка с Visual Studio 2015, но я не понимаю, почему появляется корзина

2 Ответов

Рейтинг:
12

Patrice T

Попробуйте заменить

val = nodo->val; // At this point the data is gone, now it shows trash
с
nodo->val = val;

это должно решить проблему пропавших данных.

Этот синтаксис действительно странный.
Q1->nodo = Q1->PushQ(Q1->nodo, 5);


Иначе, push действительно глючит, законченный анализ и переписывание в порядке вещей. Вся программа запутана.
Вы должны думать о том, что вы хотите: очередь, связанный список или очередь связанных списков.

Цитата:
Некоторая отладка с помощью Visual Studio 2015

Вы должны действительно научитесь пользоваться отладчиком.


Bit87

Я пытаюсь сделать очередь из связанных списков, я знаю, что этот синтаксис действительно странный, но он работает, может быть, не лучшим образом, но он работает :O, спасибо за совет nodo->val = val, я не знал, что этот маленький синтаксический ход может повлиять на то, как работает код.

Рейтинг:
1

barneyman

я думаю ты имеешь в виду nodo->val=nodo

я предполагаю if(nodo = NULL) это опечатка? Должно быть, иначе вы не ввели бы это предложение в отладчик


Bit87

Извините, моя ошибка, Я имею в виду, если (nodo = = NULL)