Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
t1maaa
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 15
#1

Линейный двусвязный список - C++

18.05.2011, 15:28. Просмотров 1226. Ответов 3
Метки нет (Все метки)

Список задан структурой
C++
1
2
3
4
5
6
struct *node
{
char info;
node *prev;
node *next;
};
и была введена некоторая последовательность чисел. Нужно расположить элементы списка в обратном порядке не применяя копирования.
Натолкните на мысль или примерный алгоритм подскажите)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 15:28     Линейный двусвязный список
Посмотрите здесь:

Двусвязный линейный список - C++
Здравствуйте. Помогите пожалуйста в написании программы: Реализовать класс на основе двусвязного линейного списока Реализовать в нем...

Линейный двусвязный список - C++
Задали задачу, реализовать линейный двусвязный список, и функцию к нему - удаление узла. Читал литературу, правда в спешке, искал по форуму...

Двусвязный линейный список - C++
Помогите пожалуйста написать эти программы :( Двусвязный линейный список, Быстрая сортировка ,Пузырьковая с...

Линейный двусвязный список - C++
Тип элемента списка определен так: struct llist{ int val; llist *next,*pred;}; //Создаётся статический список из 3 эл-тов ...

Двусвязный линейный список - C++
Дан Двусвязный линейный список. ну например фамилия и имя. как сделать добавление в начало списка? и как объявлять его? помогите

Линейный Двусвязный список! - C++
Задание:Создайте шаблон функции, которая удаляет из данного списка все элементы, не удовлетворяющие предикату (указатель на функцию,...

Двусвязный линейный список - C++
Мне нужно написать класс двусвязный список со всеми базовыми методами. У меня есть несколько проблем: во-первых, удаление из хвоста...

Сформировать линейный двусвязный список - C++
Сформировать линейный двусвязный список следующим образом: генерируется два случайных числа, если такие числа уже есть в списке, то они из...

Линейный двусвязный список для хранения записей - C++
Добрый вечер. Нужна блок-схема к данному коду #include "stdafx.h" #include <iostream> //директива для ввода вывода #include...

Создать двусвязный список - C++
Не могу разобраться с двусвязным списком. Вот код списка: #pragma once #include "ClassPhoto.h" struct Node{ Photo...

исправить двусвязный список? - C++
#include "stdafx.h" #include "conio.h" #include "locale.h" #include "string.h" // для strcmp(); #include <ctype.h> #include...

Циклический двусвязный список - C++
Здравствуйте, задали написать програмку: Организовать заданную структуру данных. Определить структуру элемента и написать подпрограммы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
18.05.2011, 16:02     Линейный двусвязный список #2
У каждой ноды надо swap(prev, next), соответственно, последний элемент станет первым, первый -- последним.
t1maaa
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 15
18.05.2011, 20:42  [ТС]     Линейный двусвязный список #3
За swap спасибо.
как грамотно поменять указатели до меня так не дошло, зато появилась мысль просто поля info менять. На начало(top) и конец(tail) ставиться по указателю, обмениваются info полями, через вспомогательные указатели(k,t) и движутся навстречу друг другу. Сначала обмен происходит нормально, но когда меняются рядомстоящие центральные элементы(если четное число элементов) либо оба указателя на центральном элементе(при нечетном), указатель движущийся с конца(tail) теряется..

C++
1
2
3
4
5
6
7
8
9
   while (top->next!=tail || tail->prev!=top || top!=tail || right!=NULL || top!=NULL)
  {
      k=top;
      t=tail;
      top=top->next;
      tail=tail->prev;
      swap(k->info,t->info);
      
  }
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
18.05.2011, 22:22     Линейный двусвязный список #4
Вот как-то так.
C++
1
2
3
4
5
6
7
node *pointer = top; // первый элемент
while (pointer != NULL) {
  node *next = pointer->next; // запомним следующий элемент
  swap(pointer->prev, pointer->next); // поменяем местами следующее и предыдущее значение
  pointer = next; // следующий элемент
}
swap(top, tail); // ну и поменять местами хвост и голову.
Yandex
Объявления
18.05.2011, 22:22     Линейный двусвязный список
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru