Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 20.10.2014
Сообщений: 10
1

Линейный список

06.03.2011, 20:37. Показов 1438. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Недавно начал изучать 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2011, 20:37
Ответы с готовыми решениями:

Вставить в линейный список перед элементом с заданным значением другой линейный список
Как можно вставить в линейный список перед элементом с заданным значением другой линейный список?...

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит...

Линейный список
Текст помощи организовано как линейный список. каждая компонента текста помощи содержит пояснение...

Линейный список
Нужно написать курсовую по с++, не используя стандартных методов. Подскажите пожалуйста, с чего...

0
06.03.2011, 20:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2011, 20:37
Помогаю со студенческими работами здесь

Линейный список
Есть такая детская считалка: n детей стали в круг. Начиная отсчет от первого, убирают каждого k-го...

Линейный двусвязный список
Здравствуйте, имеется линейный двусвязный список. Структура элемента списка выглядит так: struct...

Класс Линейный Список.
#include &lt;iostream&gt; using namespace std; class Spisok { private: struct node { ...

Линейный однонаправленный список
всем доброго времени не получается создать функцию слияния двух списков методом расчесок( допустим...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru