Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- class List
- {
- // Структура элмента - "узла списка". Заточена под опрделенную задачу
- struct Node
- {
- // Слово из текста
- string word;
- // Частота появлеения
- unsigned int freq;
- // Указатели на предыдущий и следующий элементы - двунаправленный список
- Node *next;
- Node *prev;
- Node(string _data)
- {
- word = _data;
- freq = 1;
- }
- }*pBeg, *pEnd; // Указатли на начало и конец списка
- public:
- List(string data)
- {
- pBeg = new Node(data);
- pBeg->prev = NULL;
- pBeg->next = NULL;
- pEnd = pBeg;
- }
- // Деструктор, в котором производтся освобождние памяти
- ~List()
- {
- do
- {
- pBeg = pBeg->next;
- if(pBeg->prev)
- delete pBeg->prev;
- } while(pBeg != pEnd);
- if(pBeg == pEnd)
- delete pEnd;
- }
- // Добавление в конец списка
- void Add(string data)
- {
- Node *newNode = new Node(data);
- newNode->next = NULL;
- pEnd->next = newNode;
- newNode->prev = pEnd;
- pEnd = newNode;
- }
- // Процедура добавления c автосортировкой
- void AddSorted(string data)
- {
- Node * toAdd = new Node(data);
- Node *counter = pBeg;
- bool placed = false;
- while((!placed) && (counter))
- {
- int comparision = toAdd->word.compare(counter->word);
- if(!comparision)
- {
- counter->freq ++;
- delete toAdd;
- placed = true;
- }
- if((comparision < 0) && (!placed))
- {
- toAdd->next = counter;
- toAdd->prev = counter->prev;
- if(counter->prev)
- (counter->prev)->next = toAdd;
- counter->prev = toAdd;
- if(counter == pBeg)
- {
- pBeg = toAdd;
- newNode->next = NULL;
- }
- placed = true;
- }
- if((counter == pEnd) && (!placed))
- {
- Add(data);
- placed = true;
- }
- counter = counter->next;
- }
- }
- // Печать списка: слева слово, справа частота появления. Каждый элемент на новой строке
- void Print()
- {
- Node * counter = pBeg;
- while(counter)
- {
- cout << counter->word << " " << counter->freq << endl;
- counter = counter->next;
- }
- cout << endl;
- }
- };
- int main()
- {
- fstream file;
- file.open("input.txt", ios::in)
- file.close();
- nL.Print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment