Задание такое:
Кольцевой неоднородный (гетерогенный) список с однородными подсписками из элементов с ключами:
1. Создание (пустого списка).
2. Добавление элемента:
• в начало списка;
• в конец списка;
• после элемента с заданным номером;
• (*) после элемента с заданным ключом.
3. Печать списка (вывод на экран дисплея):
• номер элемента;
• содержимое поля данных;
• (*) содержимое поля ключа;
• значение указателя на следующий элемент;
• (**) значение указателя на предыдущий элемент.
4. Удаление элемента из списка:
• из начала;
• из конца;
• с заданным номером;
• (*) с заданным ключом.
5. Запись списка в файл.
6. Уничтожение списка.
7. Восстановление (чтение) списка из файла.
8. Упорядочение элементов в списке по выбранному признаку:
• используя информацию в поле данных;
• (*) используя информацию в поле ключа.
9. Изображение структуры списка на экране дисплея.
Что-то я вообще не представляю с чего начать... Список - это несколько элементов, в каждом из которых есть ссылка на следующий, верно? В моем задании в последнем элементе должна быть ссылка на первый, так? А как определить, что элемент последний? Брать ограниченное количество элементов или как?
Плюс ко всему - в моем задании один элемент списка должен содержать несколько символов, другой - несколько чисел и т.п., да?
А ключ - это просто нумерация или что-то типа того?
Ага, спасибо! Теоретически все понял, а вот с практикой - проблемы...
Для начала попытался сделать только добавление...
#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();
}
Ну, начать можно вот так:
#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;
}
Таак... Спасибо, конечно.... но я практически ничего из этого не понимаю... Нужно будет что-нибудь почитать по этому поводу...
Был бы благодарен за хоть какие-то объяснения
а у меня такая же прога. Ты бы мог немного добавить объяснений в сложных моментах! И добавь, плиз, данные, а то так не совсем понятно и наглядно!
Volvo, скажи свой номер ICQ, плиз!
Focus, я тебя по этому поводу уже предупреждала.
У тебя какой-то настолько личный вопрос, что задать его на форуме ты стесняешься? Пиши в приват, благо, форумом такая возможность предусмотрена.
ок. Но до него сообщения не доходят. чо делать?
Volvo, как с тобой связаться?