1 / 1 / 0
Регистрация: 20.10.2014
Сообщений: 10
|
|
1 | |
Линейный список06.03.2011, 20:37. Показов 1438. Ответов 0
Метки нет (Все метки)
Здравствуйте. Недавно начал изучать C++. Не могу разобраться. По учебе нужно решить такую задачу.
Создать шаблон класса «однонаправленный линейный список указателей». Использовать данный шаблон для организации предметного указателя». Каждая компонента указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, от одного до десяти. Составить программу, которая обеспечивает: начальное формирование предметного указателя; вывод предметного указателя; вывод номеров страниц для заданного слова. Написал такую программу. Но с ней какие-то проблемы. При добавлении слова, старые становятся идентичными только что введенному новому слову. Да и поиск не работает правильно. Подскажите в чем проблема? Пишу на Turbo C++. #include <iostream.h> #include <stdio.h> #include <conio.h> template <class T> class list { private: class node // Класс node содержит данные списка { friend class list<T>; private: node *next; // Указатель на следующий элемент в списке T val; // Данные списка node(): next(NULL){} node(T data): next(NULL), val(data){} ~node(){} }; node *head; // Указатель на начало списка int count; // Количество элементов в списке public: list(): head(NULL), count(0){} ~list() { clear(); // Освобождение занятой памяти } int getCount() // Возвращает количество элементов в списке { return count; } int add(T data) // Добавление элемента в конец списка // Возвращает количество элементов в списке { node *to_add = new node(data); if (head==NULL) // Если в списке нет элементов head=to_add; else { node *current; for (current=head; current->next!=0; current=current->next); current->next=to_add; } count++; return count; } int del(int x) // Удаление элемента из списка. // Возвращает количество элементов в списке или -1 при ошибке { if (x>count) return -1; node *to_del=head; if (x==1) // Если нужно удалить первый элемент { head=head->next; delete to_del; } else { node *current=head; for (int i=1; i<x-1; i++) current=current->next; to_del=current->next; current->next=current->next->next; delete to_del; } count--; return count; } void clear() // Очистка списка { node *current = head; node *to_del = head; while (to_del!=NULL) { current=current->next; delete to_del; to_del=current; } head=NULL; count=0; } T getData(int x) // Возвращает данные из списка { node *current; for (current=head; x>1; x--) current=current->next; return current->val; } }; struct ukazatel { char *slovo; char *stran; }; list<ukazatel> my_list; void print() { clrscr; for (int i=1; i<=my_list.getCount(); i++) cout << my_list.getData(i).slovo << " " << my_list.getData(i).stran << endl; while (!kbhit()) {;} } void find() { clrscr; char *slovo; cout << "Vvedite slovo: "; gets(slovo); for (int i=1; i<=my_list.getCount(); i++) if (my_list.getData(i).slovo == slovo) cout << my_list.getData(i).stran << endl; while (!kbhit()) {;} } void add() { char* slovo; char* stran; ukazatel *my = new ukazatel; cout << "Slovo: "; gets(slovo); cout << "Stranicy: "; gets(stran); my->slovo=slovo; my->stran=stran; my_list.add(*my); } int main() { int choice = 0; while (choice!=5) { clrscr(); cout << "1. Add word" << endl; cout << "2. Print list" << endl; cout << "3. Clear" << endl; cout << "4. Find word" << endl; cout << "5. Exit" << endl; cin >> choice; switch (choice) { case 1: add(); break; case 2: print(); break; case 3: my_list.clear(); break; case 4: find(); break; } } return 0; } Подскажите, пожалуйста. В среду сдавать - а вот никак она что-то не дается. Пока не набрался еще много знаний по C++
0
|
06.03.2011, 20:37 | |
Ответы с готовыми решениями:
0
Вставить в линейный список перед элементом с заданным значением другой линейный список Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке Линейный список Линейный список |
06.03.2011, 20:37 | |
06.03.2011, 20:37 | |
Помогаю со студенческими работами здесь
1
Линейный список Линейный двусвязный список Класс Линейный Список. Линейный однонаправленный список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |