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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++]двунаправленный список, не добавляет в конец и середину 
:(
    Опции темы
666lynx666
Дата 2.7.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



странно,не понимаю.В голову списка добавляет,а вот в конец и серидину это проблемно.Помогите найти ошибку,ооочень прошу!!!!

Код


void insert_head(int x,dlistPtr &Hd)  //добавление в голову(работает!!)
 {dlistPtr tmp;
  tmp=new dlist;
  tmp->data =x;
  tmp->next=Hd;
  Hd=tmp;
  Hd->pred=tmp;
  tmp->pred=NULL;


  }

void Add(int x, dlistPtr &Hd) //х-это число кот надо добавить,Hd-голова списка
{dlistPtr p,tmp=Hd;
 if (x<Hd->data) insert_head(x,Hd); //здесь проблем нет,добавляет
 while (tmp->data>x &&tmp) 
 tmp=tmp->next;
 p=new dlist;                                      //вот здесь это и проблема
 p->data=x;
 if(!tmp)
 { tmp->next=p;
   p->pred=tmp;
   p->next=NULL;

 }
else {
   p->pred=tmp->pred;
   p->next=tmp;
   tmp->pred->next=p;
   tmp->pred=p;


 ! 
MAKCim
Пользуйтесь тегом код!


Это сообщение отредактировал(а) MAKCim - 2.7.2007, 15:22
PM MAIL   Вверх
AndrRus
Дата 2.7.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сразу извиняюсь, что привожу пример не относительно твоей программы. Вот как выглядит добавление элемента в конец двунаправленного списка, код скопировал из когда-то написанной мной подобной работы:

Код

void FunFirst (ELEM *&start, ELEM *&end, ELEM *&rsp) {
    // start - Указатель на начало линейного списка.
    // end - Указатель на конец линейного спсика.
    // rsp - Указатель для перемещения по списку.

    int ret;    
    double var;    // Переменная, которая считывает значение, которое затем будет передано dat.
    ELEM *nel;    // Указатель на новый элемент.
    
    FunFourth (start);

    printf ("   Введите значение, которые вы хотите хранить в новом элементе: ");
    
    ret = scanf ("%lf", &var);    
    if (ret != 1) {                // Проверка типа введенных пользователем данных.
        printf (" Ошибка №3: Не верный тип введенных вами данных.\n");
        return;
    }

    nel = new ELEM;            // new ELEM [.] - в квадратных скобках записывается колличество элементов. 
    if (nel == NULL) {
        printf (" Ошибка №2: Программа не смогла выполнить процедуру создания нового элемента.\n");
    }
    
    nel -> dat = var;        // Заносим данные.
    nel -> next = NULL;        // Сообщаем, что новый элемент является последним.

    if (start == NULL) {
        start = nel;            // Указатель начала на новый элемент.
        end = nel;            // Указатель конца на новый элемент.
        rsp = nel;                // Указатель перемещения на новый элемент.
        nel -> prev = NULL;        
    }
    else {    
        nel -> prev = rsp;            
        rsp -> next = nel;
        rsp = nel;
        end = rsp;
        end -> next = NULL;
    }

    printf ("   Элемент cо значением '%lf' успешно добавлен.\n", var);
    FunFourth (start);
}


Аналогично и в середину списка. И когда работаешь со списками, то рекомендую смотреть процесс работы программы через "Watch", сразу увидишь, где и что неправильно связалось.

Это сообщение отредактировал(а) AndrRus - 2.7.2007, 17:27
PM MAIL ICQ   Вверх
666lynx666
Дата 2.7.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое,но я уже сделала.Тут видишь в чем недостаток,то что мы используем дополнительно 2 указателя:на начало и конец списка(start,end).Препод наш ругается по этому поводу( smile ) поэтому пришлось попарится но получилось неплохо у меня.
Но еще раз спасибо за помощь smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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