Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2017, 01:04   #1
NDrago
Пользователь
 
Регистрация: 22.09.2017
Сообщений: 45
По умолчанию Связный список

вопрос вот в чем,есть связный список,все работает,но элементы выводит почему-то не с первого,а с последнего,как это дело поправить?
Код:
#include <iostream>

using namespace std;

struct Node {
	int data;
	Node *next;
};

int main() {
	Node * first = new Node;
	first=nullptr;
	Node * last = new Node;
 	last=nullptr;

	int n=0;
	while(cin>>n) {
		Node *node=new Node {n,nullptr};
		node->data=n;
		node->next=first;
		first = node;
	}

	Node *curr=first;
	do {
		cout<<curr->data;
		if(curr->next!=nullptr)
			cout<<" -> ";
		curr=curr->next;
	} while (curr!=nullptr);

	return 0;
}
NDrago вне форума Ответить с цитированием
Старый 27.10.2017, 07:13   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от NDrago Посмотреть сообщение
Node * first = new Node; first=nullptr;
Это надо бы поправить...

Зачем вам параметры конструктора, если вы их не используете?

А по теме - надо добавлять в конец списка, а вы добавляете в начало.
Сделайте функцию, которая возвращает последний элемент списка.
Если вернет null, тогда добавляйте в начало, если вернет элемент, тогда добавьте к этому элементу.
waleri вне форума Ответить с цитированием
Старый 27.10.2017, 17:47   #3
NDrago
Пользователь
 
Регистрация: 22.09.2017
Сообщений: 45
По умолчанию

Спасибо , понял , ещё такой вопрос , а точнее просьба - посоветуйте хорошую статью или литературу на эту тему , потому что эта тема довольно тяжёлая и трудно даётся , хотелось бы углубиться
NDrago вне форума Ответить с цитированием
Старый 27.10.2017, 19:46   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

https://ru.wikipedia.org/wiki/%D0%A1...81%D0%BE%D0%BA
waleri вне форума Ответить с цитированием
Старый 28.10.2017, 00:19   #5
NDrago
Пользователь
 
Регистрация: 22.09.2017
Сообщений: 45
По умолчанию

А что то более существенное есть , а то статья в википедии явно не раскрывает это тему в необходимом объеме
NDrago вне форума Ответить с цитированием
Старый 28.10.2017, 03:26   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вот видео-ролик забацал.
Смотри видео 7 раз! Т.к. с первого раза ты больше половины информации просто не воспримешь
(я по себе сужу).

Я запускаю программу в режиме отладки...
Всякий раз анализируй код програмы, а также смотри на сами значения переменных: чему равны "data" и "next"
(постоянно смотри на значения этих переменных).

Обращай внимание на схему рядом.

И ещё одно, у тебя в коде нет явно выраженных имён узлов списка ("h1","h2","h3","h4") - я это сделал у себя чтобы было более понятны связи между узлами,
а также легче было бы обратится к 4-му узлу (удалить его с помощью "delete h3").
В противном случае, мне нужно было бы вводить новую ссылку ("temp=first"), шагать до 4-го узла и после чего удалять его...

Что касается твоего кода, то у тебя будет просто выделение памяти под узел, заполнение его данными и встраивание в общую цепочку

https://www.youtube.com/watch?v=Y52N...ature=youtu.be

Последний раз редактировалось ura_111; 28.10.2017 в 03:37.
ura_111 вне форума Ответить с цитированием
Старый 29.10.2017, 13:28   #7
NDrago
Пользователь
 
Регистрация: 22.09.2017
Сообщений: 45
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Вот видео-ролик забацал.
Смотри видео 7 раз! Т.к. с первого раза ты больше половины информации просто не воспримешь
(я по себе сужу).

Я запускаю программу в режиме отладки...
Всякий раз анализируй код програмы, а также смотри на сами значения переменных: чему равны "data" и "next"
(постоянно смотри на значения этих переменных).

Обращай внимание на схему рядом.

И ещё одно, у тебя в коде нет явно выраженных имён узлов списка ("h1","h2","h3","h4") - я это сделал у себя чтобы было более понятны связи между узлами,
а также легче было бы обратится к 4-му узлу (удалить его с помощью "delete h3").
В противном случае, мне нужно было бы вводить новую ссылку ("temp=first"), шагать до 4-го узла и после чего удалять его...

Что касается твоего кода, то у тебя будет просто выделение памяти под узел, заполнение его данными и встраивание в общую цепочку

https://www.youtube.com/watch?v=Y52N...ature=youtu.be
спасибо большое,очень помогло,но мне нужно еще более глубокие знания,у меня сейчас стоит задача реализовать полноценный связный список с такими возможностями как - добавление,удаление,вставка,сортиро вка и тд и тп
NDrago вне форума Ответить с цитированием
Старый 29.10.2017, 17:44   #8
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я сейчас тебя обрадую (или огорчу), но это не возможно. Нет такой книги, где будут расписаны все приёмы работы со списком (а вернее списками, т.к. их разновидностей очень много существуют). В книгах показано создание/удаления нового узла и как сделать один шаг по цепочке. Всё!
Всё остальное (постройка топологии списка и контроль за ней во время работы программы) - это творчество самого программиста.

Например, что значит "вставка нового узла в середину списка":


1.jpg



Ну и так далее (по смыслу)...

p.s.: в принципе можешь поискать примеры реализации списка на этом форуме. Скорей всего ты не первый кто решает подобную задачу... Но без понимания сути списков (как он работает) ты не сможешь ничего модифицировать под себя... Поэтому я советую тебе, прежде чем приступать к своей задаче, порешать небольшие (придуманные тобой) задачки-тренажёры. Например, "есть список, удалить узел с data=5" или "вставить новый узел в середину списка", или "вывести на экран узлы у которых data>10".... Придумай дальше сам...
А когда будешь себя чувствовать уверенно со списками, тогда и перейдёшь к решению своей задачи.

И ещё одно, у тебя же интернет под рукой, - активно им пользуйся. Перечитывай по 3-5 раз один и тот же материал по теме списков (с первого раза половину материала просто пропускаешь - это я по себе сужу), перенабирай код у себя и с ним экспериментируй...

Последний раз редактировалось ura_111; 29.10.2017 в 17:46.
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связный список InKo1 Общие вопросы C/C++ 4 06.03.2012 01:11
Связный список InKo1 Помощь студентам 0 22.12.2011 02:08
Связный список GripEnemy Visual C++ 2 08.12.2011 16:19
Связный список batman01 Общие вопросы C/C++ 1 15.10.2011 01:31
связный список xeops Visual C++ 6 30.09.2011 09:39