Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204

Реализовать указанные функции-члены для пользовательского класса "Кольцевой двусвязный список"

15.10.2016, 02:07. Показов 1938. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сообственно сабж.
У списка два закрытых поля:
tail-это узел следующий за "последним"(условно,ибо список -кольцо. в tail-е лежит мусор)
tail->prev-это начало списка
tail->next -его конец
и sz-это размер списка. если список пустой-то там есть только tail и sz=0
Нужно реализовать несколько функций. Я определила их,но все равно есть сомнения в работоспособности некоторых,хотя может быть я плохо тестю. Посмотрите пож-та и укажите,если что не так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
using namespace std; 
struct Double_node
{
    Double_node *next;
    Double_node *prev;
    int val;
    Double_node() {}
    Double_node(int x) { val = x; };
    Double_node(int a, Double_node* b, Double_node* c) { val = a; next = b; prev = c; };
};
class Double_list
{
private:
    Double_node *tail;
    int sz;
public:
    Double_list() { tail = new Double_node; sz = 0; };
 
    Double_list(int x) { tail = new Double_node(x);  tail->next = tail; tail->prev = tail; sz = 1; };
 
    ~Double_list() { while (!tail) { Double_node* tmp; tmp = tail->next; delete tail->next; tmp = tmp->next; } delete tail->prev; sz = 0; }
 
    bool is_empty() { return sz == 0; };
 
    void add_front(int x) { tail->prev = new Double_node(x, tail->prev, tail); sz++; };
 
    void add_rear(int x) { tail->next = new Double_node(x, tail->next, tail); sz++; };
 
    void insert_after(int n, int x) { Double_node* tmp = tail->prev; for (int i = 0; i < n - 2; i++) tmp = tmp->next; Double_node* mem1 = tmp->next; Double_node* mem2 = tmp; tmp->next = new Double_node(x, mem1, mem2); sz++; }
 
    int remove(int x) { Double_node* tmp = tail->prev; for (tmp; tmp != tail; tmp = tmp->next) { if (tmp->val == x) { int mem = tmp->val; tmp->prev->next = tmp->next; delete tmp; sz--; return mem; } } };
 
    int remove_front() { int memory = tail->prev->val; Double_node* mem = tail->prev; mem->prev = tail; tail = mem->next; delete mem; sz--; return memory;  }
 
    int remove_rear() { int memory = tail->next->val; Double_node* mem = tail->next; tail->next = mem->next; mem->next->prev = tail; delete mem; sz--; return memory; }
 
    bool find(int x) { Double_node* tmp = tail->prev; for (tmp;tmp!=tail; tmp = tmp->next) { if (tmp->val == x) return true; }return false; };
 
    int get_nth(int n) { Double_node* tmp = tail->prev; for (int i = 0; i < n-2; i++) tmp = tmp->next; return tmp->val; };
 
    int size() { return sz; }
 
    };
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2016, 02:07
Ответы с готовыми решениями:

На основе заданных прототипов реализовать функции-члены для пользовательского класса "Односвязный список"
Извиняюсь,забыла принт опреедлить Преподаватель дал прототипы функций ,которые надо определить для односвязного списка,но,начав...

STL: реализовать кольцевой упорядоченный двусвязный список
Добрый вечер всем кто открыл эту вкладку! Надо реализовать кольцевой упорядоченный двозвязний список на STL + некоторые функции работы с...

Кольцевой двусвязный список шаблон класса ошибки
Код выдаёт некоторые ошибки (прикрепили, на картинке): Что исправить? #include &quot;StdAfx.h&quot; #ifndef __list ...

29
181 / 47 / 33
Регистрация: 27.02.2016
Сообщений: 260
16.10.2016, 18:33
Студворк — интернет-сервис помощи студентам
Kristina_S, да все верно. Вы даже учли, что в моей версии вставка производится перед указанным итератором. Молодец!
1
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
16.10.2016, 18:44  [ТС]
1)cпасибо,но она все равно почему-то ругается
на строке например
C++
1
2
    list.insert(list.rbegin()+1, 28);
        list.print();
Оно мне выводит мол this->node было 0xCDCDCDCD и указывает на постфиксный инкремент ,хотя он также как и у вас написан.даже не знаю,с чем это связано

2)и еще,я написала функцию remove(iterator it) которая удаляет узел на который смотрит итератор.правильно ли?
C++
1
2
3
4
5
6
7
8
9
10
void remove_iter(iterator it)
    {
        Double_node* mem = it.node;
        Double_node* mem_next = (it++).node;
        Double_node* mem_prev = (it--).node;
        mem_prev->next = mem_next;
        mem_next->prev = mem_next;
        delete it.node;
        sz--;
    }
0
181 / 47 / 33
Регистрация: 27.02.2016
Сообщений: 260
16.10.2016, 18:57
Kristina_S, вот так должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void remove_iter(iterator it)
    {
        Double_node* mem = it.node;
        Double_node* mem_next = (++it).node;
        --it;
        Double_node* mem_prev = (--it).node;
        ++it;
        mem_prev->next = mem_next;
        mem_next->prev = mem_prev;
        delete it.node;
        sz--;
    }
А на счет первого, у вас определен оператор "+"?
0
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
16.10.2016, 19:01  [ТС]
да,вот и префикс и постфикс
C++
1
2
3
4
5
6
7
8
9
10
11
iterator& operator++(int)
        {
            node = node->next;  
            return *this;
        }
iterator operator++()   
        {
            iterator it(node);  
            node = node->next;
            return it;
        }
0
181 / 47 / 33
Регистрация: 27.02.2016
Сообщений: 260
16.10.2016, 19:06
Kristina_S, измените:
C++
1
2
    list.insert(list.rbegin()+1, 28);
        list.print();
на:
C++
1
2
    list.insert(++list.rbegin(), 28);
        list.print();
0
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
16.10.2016, 22:56  [ТС]
результат тот же(
0
181 / 47 / 33
Регистрация: 27.02.2016
Сообщений: 260
17.10.2016, 00:07
Kristina_S, list.rbegin() возвращает последний элемент, который находящийся перед фиктивным. Значит для вставки в конец списка инкрементировать не нужно. Инструкция:
C++
1
list.insert(++list.rbegin(), 28);
вставит элемент после фиктивного, т.е. в начало.
0
4 / 1 / 0
Регистрация: 09.10.2015
Сообщений: 204
17.10.2016, 00:16  [ТС]
так дело в том,чтобы я не поставил хоть ++ ,хоть +4-все равно выдает ошибку и отпрвяет в инкремент
0
17.10.2016, 08:04

Не по теме:


Цитата Сообщение от Kristina_S Посмотреть сообщение
Я определила
Цитата Сообщение от Kristina_S Посмотреть сообщение
я не поставил
Хмм...

0
17.10.2016, 11:22

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Хмм...
А Вы отзывы посмотрите. И все вопросы сразу отпадут сами собой.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2016, 11:22

Написать конструктор для пользовательского класса "Двусвязный список"
Попытался построить двусвязный список. Как написать этот конструктор ? Может быть правильно будет определить функцию push_back и каждый раз...

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

Переделать двусвязный список в двусвязный кольцевой
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список»
Всем добрый вечер! Помогите пожалуйста с лабораторной работой, дело в том что скоро сдавать, а я в С++ новичок. и совсем не понимаю как это...

Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список»
Реализовать классы «стек» и «очередь» наследованием от базового класса «двусвязный список». Создать три варианта реализации наследования:...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru