Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двусвязный Список, Не понимаю конструкцию 
:(
    Опции темы
DenisNN
Дата 12.5.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.5.2012

Репутация: нет
Всего: нет



Здравствуйте! Подскажите пожалуйста,что означает строка tail->prev->next = pNode; в добавлении элемента в конец списка,зачем писать tail->prev->next = pNode, почему нельзя просто tail->prev = pNode ?

main

Код
#include "dlist.h"

int main()
{

 List L(8);
 L.add_from_rfont(22);
 L.add_from_rfont(34);
 L.add_from_tail(8);
 L.add_from_tail(78);
 L.add_from_tail(92);
 L.shov_from_foront();

 getch();
 return 0;
}

dlist
Код
#include "dlist.h"

List::List() // Пустой список.
{
 head = tail = new Node;
 tail->next = 0;
 tail->prev = 0;
}
List::List(int dta)
{

 head = tail = new Node;
 tail->next = 0;
 tail->prev = 0;
 List::add_from_rfont(dta);
}
List::Node::Node(int dta):data(dta)
{
 nodeCount++;
}

void List::add_from_rfont(int dta)
{
 Node *pNode = new Node(dta);
 pNode->next = head;
 pNode->prev = 0;
 head->prev = pNode;
 head = pNode;
}

void List::add_from_tail(int dta)
{
 Node *pNode = new Node(dta);
 pNode->next = tail;
 pNode->prev = tail->prev;
 tail->prev->next = pNode; //////////////////////////////////// !!! Вот эта строка не понятна !!! \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 tail->prev = pNode;
}

void List::shov_from_foront()
{
 Node *pn;
 pn = head;
 while(pn!=tail)
 {
 cout << pn->data << endl;
 pn = pn->next;
 }
}

h
Код
#pragma once

#include <iostream>
#include <conio.h>

using namespace std;

static int nodeCount = 0; // Количество созданных объектов.

class List
{
 class Node
 {
 //friend class List;
 public:
 int data;
 Node *next;
 Node *prev;
 int n; // № элемента.
 Node(int);
 Node(){};
 ~Node();
 };

 Node *head;
 Node *tail;

public:

 void add_from_rfont(int);
 void add_from_tail(int);
 void shov_from_foront(); // Показать от начала.
 void shov_from_tail(); // Показать от хвоста.
 void show_from_nth(int); // Показать от заданного элемента.

 List(int);
 List();
 ~List(){}

};



Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 13.5.2012, 20:56
PM MAIL   Вверх
bsa
Дата 13.5.2012, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(DenisNN @  12.5.2012,  18:57 Найти цитируемый пост)
Подскажите пожалуйста,что означает строка tail->prev->next = pNode; в добавлении элемента в конец списка

судя по коду, add_from_tail вставляет запись перед последним элементом списка. Довольно глупая операция... Обычно, в списки добавляют или с конца, или с начала (т.е. новый элемент становится или последним, или первым). А тут такое... Данная операция прописывает указатель next старого предпоследнего элемента на адрес нового элемента.

Цитата(DenisNN @  12.5.2012,  18:57 Найти цитируемый пост)
 почему нельзя просто tail->prev = pNode ?
потому что при вставке элементов между двумя существующими необходимо установить 4 указателя:
prev->next = cur
cur->prev = prev
cur->next = next
next->prev = cur

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.