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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Списки.Добавление в начало списка. 
V
    Опции темы
yorgan
  Дата 6.6.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добавление в конец списка:

void list::add(int d)
{
    Node *pv = new Node(d);
    if (pbeg == 0)
    pbeg=pend=pv;
    else
    {
       pv -> prev = pend;
       pend -> next = pv;
       pend = pv;
    }
}

А как сделать добавление в начало списка?
PM MAIL   Вверх
bronislav
Дата 6.6.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А код класса list в студию?


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
yorgan
Дата 6.6.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

class List
{
   class Node
   {
     public:
                int d;
                Node *next; // указатель на последний узел
                Node *prev; // указатель на предыдущий узел
                Node(int dat=0)
                {
                   d = dat; next = 0; prev = 0;
                }
   };
Node *pbeg, *pend; // Указатели на начало и конец списка
public:
           List()
           {
              pbeg=pend=0;
            }
           ~List;
           void add(int d);
.......
};

PM MAIL   Вверх
Rififi
Дата 6.6.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(yorgan @  6.6.2008,  10:44 Найти цитируемый пост)
А как сделать добавление в начало списка? 

По аналогии, "инверсией" кода

pv -> next = pbeg;
pbeg -> prev = pv;
pbeg = pv;


PM MAIL   Вверх
yorgan
Дата 6.6.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!
PM MAIL   Вверх
yorgan
Дата 6.6.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще такой вопрос. Как будет извлечение узла из начала и конца списка и вывод количества элементов на экран?
PM MAIL   Вверх
voov
Дата 6.6.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



удаление первого
Код

void list::removeFirst()
{
    if (pbeg == 0) return;

    if (pbeg == pend) {
       delete pbeg;
       pbeg = pend = 0;
    } else {
       Node* pv = pbeg->next;
       pv->prev = 0;
       delete pbeg;
       pbeg = pv;
    }
}

удаление последнего
Код

void list::removeLast()
{
    if (pend == 0) return;

    if (pbeg == pend) {
       delete pend;
       pbeg = pend = 0;
    } else {
       Node* pv = pend->prev;
       pv->next = 0;
       delete pend;
       pend = pv;
    }
}

подсчет кол-ва
Код

int list::getCount()
{
    int count = 0;

    if (pend == 0) return count;

    Node* pv = pbeg;
    while (pv != 0) {
       count++;
       pv = pv->next;
    }

    return count;
}

PM MAIL   Вверх
yorgan
Дата 8.6.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!
PM MAIL   Вверх
bsa
Дата 9.6.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



yorgan, стандартный шаблон двусвязного списка (std::list) использовать нельзя?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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