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

> Внимание!

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

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

 
 Ответить  Открыть новую тему 
> Списки, Си++
сообщение
Сообщение #1


Пионер
**

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

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


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

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


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


Гость






Цитата
В моем задании в последнем элементе должна быть ссылка на первый, так?
Кольцевой список, именно так...
Цитата
А как определить, что элемент последний?
blink.gif Если он указывает на первый, значит он и есть последний... Смотри, что происходит: самое начало работы - у тебя есть только один элемент списка (указывающий сам на себя)... Добавляешь к списку еще один элемент - next первого изменяется (ему присваивается указатель на вновь добавленный элемент), next вновь добавленного - указывает туда, куда за секунду до изменения указывал next первого (фактически, эти действия производятся в обратном порядке) - вот и все, новый элемент был добавлен в конец списка, ибо теперь его next указывает на первый элемент...

Цитата
Плюс ко всему - в моем задании один элемент списка должен содержать несколько символов, другой - несколько чисел и т.п., да?
yes2.gif Используй шаблоны: template <class T> и будет тебе счастье smile.gif

Цитата
А ключ - это просто нумерация или что-то типа того?
Ключ - уникальное значение, однозначно идентифицирующее элемент списка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Ага, спасибо! Теоретически все понял, а вот с практикой - проблемы... sad.gif
Для начала попытался сделать только добавление...
#include <conio.h>
#include <iostream.h>

class list
{
public: char data;
int key;
list *next;
};

list add()
{ //что сдесь должно быть? Хотя бы примерно...
}

void main()
{
clrscr();

list m;
m.data='A';
m.key=1;
m.next=&m;
cout<<"go6aBuTb e/leMeHT B cnucoK? (y/n)\n";

while (getch()=='y') {
add(m);
cout<<"go6aBuTb e/leMeHT B cnucoK? (y/n)\n";
}
getch();
}


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


Гость






Ну, начать можно вот так:
#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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


Таак... Спасибо, конечно.... но я практически ничего из этого не понимаю... sad.gif Нужно будет что-нибудь почитать по этому поводу...
Был бы благодарен за хоть какие-то объяснения unsure.gif


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


Гость






а у меня такая же прога. Ты бы мог немного добавить объяснений в сложных моментах! И добавь, плиз, данные, а то так не совсем понятно и наглядно!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
Ты бы мог немного добавить объяснений в сложных моментах!
Я откуда знаю, ЧТО для тебя "сложные моменты"?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 8
Пол: Мужской

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


Volvo, скажи свой номер ICQ, плиз!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Focus, я тебя по этому поводу уже предупреждала.
У тебя какой-то настолько личный вопрос, что задать его на форуме ты стесняешься? Пиши в приват, благо, форумом такая возможность предусмотрена.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






ок. Но до него сообщения не доходят. чо делать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 8
Пол: Мужской

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


Volvo, как с тобой связаться?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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