Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Dremuk
Сообщений: n/a
#1

Линейный список - C++

06.03.2011, 20:37. Просмотров 1170. Ответов 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++
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Линейный список (C++):

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

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

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

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

Линейный список - C++
Текст помощи организовано как линейный список. каждая компонента текста помощи содержит пояснение к этому термину. Составить программу...

Программа на линейный список - C++
Есть программа... Помогите сделать её же, но ввиде линейного списка. Вот условие задачи: (Автоматизированная информационная...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2011, 20:37
Привет! Вот еще темы с ответами:

Линейный однонаправленный список - C++
Есть программа, которая инициализирует, заполняет и удаляет список. При компиляции появляется ошибка, что c и m в функции main() не...

Линейный двусвязный список - C++
Список задан структурой struct *node { char info; node *prev; node *next; }; и была введена некоторая последовательность...

Линейный однонаправленный список - C++
ПОМОГИТЕ СДЕЛАТЬ ПОЖАЛУЙСТА Читая целые числа из текстового файла, создать линейный односвязный список а) добавлением нового элемента...

Линейный двунаправленный список - C++
Имеются сведения о больницах:название, количество мест, количество больных. 1. Создать линейный двунаправленный список. 2....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru