IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Списки, Си++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Задание такое:
Кольцевой неоднородный (гетерогенный) список с однородными подсписками из элементов с ключами:
1. Создание (пустого списка).
2. Добавление элемента:
• в начало списка;
• в конец списка;
• после элемента с заданным номером;
• (*) после элемента с заданным ключом.
3. Печать списка (вывод на экран дисплея):
• номер элемента;
• содержимое поля данных;
• (*) содержимое поля ключа;
• значение указателя на следующий элемент;
• (**) значение указателя на предыдущий элемент.
4. Удаление элемента из списка:
• из начала;
• из конца;
• с заданным номером;
• (*) с заданным ключом.
5. Запись списка в файл.
6. Уничтожение списка.
7. Восстановление (чтение) списка из файла.
8. Упорядочение элементов в списке по выбранному признаку:
• используя информацию в поле данных;
• (*) используя информацию в поле ключа.
9. Изображение структуры списка на экране дисплея.

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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Ну, начать можно вот так:
#include <iostream.h>
#include <assert.h>

typedef int T;

class List {
public:

class Item {

public:
Item(T value, Item *item = 0):
data(value), next(item)
{
}

T data;
Item *next;
};

List() {
list = 0;
}

void print();
void append(T);

private:
Item *list;
Item *get_last();
};


List :: Item *List :: get_last() {
if(!list) return 0;

for(Item *p = list; (p -> next) != list; p = p -> next);
return p;
}

void List :: print() {

if(!list) return;

Item *p = list;
do {

cout << p -> data << endl;
p = p -> next;

} while(p != list);

}

void List :: append(T data) {
Item *pt = new Item(data, list);
assert(pt != 0);

if(!list) {
list = pt; list -> next = list;
return;
}

Item *tail = get_last();
tail -> next = pt;
}

int main() {
List L;

cout << "starting" << endl;
for(int i = 0; i < 10; ++i) L.append(i);
L.print();

return 0;
}


(полностью работоспособный кольцевой список, НЕ содержащий правда данных - только ключи... Кроме этого - я не стал добавлять другие методы, кроме добавления в конец списка)

Тестировалось под TC++ 3.0
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2022 2:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name