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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление элементов в двусвязный список 
V
    Опции темы
Avaj
  Дата 25.8.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



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

Я написал так:

Код


struct item{                //элемент списка
    int data;
    item *next;
    item *prev;
};

//======================================================
void add_beg(item **pbeg,int elem){              //функция добавления в начало
        item *newelem = new item;
        newelem->data=elem;
        newelem->next=*pbeg;
        newelem->prev=0;
        (*pbeg)->prev=newelem;
        *pbeg=newelem;
}
//======================================================

int _tmain(int argc, _TCHAR* argv[]){
    int n=10;
    item *pbeg = 0;
    item *pend = pbeg;
    for(int i=0;i<n;i++) add_beg(&pbeg,i);
    printlist(pbeg);
    return 0;
}



Но, как вы поняли, эта функция не может добавить первый элемент. Конечно можно написать отдельную функцию добавления первого элемента, но это "нифига неприкольно". smile 

Т.е. нужно что-то типа такого:
Код


void add_beg(item **pbeg,int elem){
//===========================================================
if((*pbeg)==0){                          //вот это я пытался добавить, но оно не работает
        (*pbeg)->data=elem;    
        (*pbeg)->next=0;
        (*pbeg)->prev=0;
}
//===========================================================
else{
        item *newelem = new item;
        newelem->data=elem;
        newelem->next=*pbeg;
        newelem->prev=0;
        (*pbeg)->prev=newelem;
        *pbeg=newelem;
}
}



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


Зима близко
**


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

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



Ты должен использовать фиктивный головной узел.


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Avaj
Дата 25.8.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



А по-подробней нельзя-ли? smile 
PM MAIL   Вверх
Rpahut
Дата 25.8.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Код

if((*pbeg)==0){                       
        *pbeg = new item;        // создаем фиктивный головной узел =)
                                              // а дальше как обычно
        (*pbeg)->data=elem; 
        ...

--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Avaj
Дата 25.8.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



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

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

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

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

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


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

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


 




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


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

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