Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Node
- {
- char *stroka;
- int size;
- class Node *ptr;
- friend class List;
- };
- class List
- {
- Node *head; // Корень списка
- int count = 0; // Количество узлов списка
- Node* Prev(Node *); // Переход к предыдущему узлу (не интерфейсный метод)
- public:
- List() { head = NULL; } // Инициализация списка
- int getCount() { return count; } // Получение количества узлов списка
- bool isEmpty() { return head == NULL; } // Проверка, пуст ли список
- Node* getFirst() { return head; } // Получение корневого узла списка
- Node* getLast(); // Получение последнего узла списка
- void Clear(); // Очистка списка
- Node* Next(Node *); // Переход к следующему узлу
- Node* Add(char*, int, Node*); // Добавление узла списка
- Node* Delete(Node*); // Удаление узла списка
- void Print(); // Вывод значений узлов списка
- void sortb(int(*)(char *, char *, int ,int))
- };
- Node* List::Add(char *num, int size1, Node* node = NULL)
- {
- Node *elem = new Node();
- elem->stroka = num;
- elem->size = size1;
- count++;
- if (node == NULL) // Добавление нового корня
- {
- if (head == NULL) {
- elem->ptr = NULL;
- head = elem;
- }
- else {
- elem->ptr = head;
- head = elem;
- }
- return elem;
- }
- elem->ptr = node->ptr; // Добавление узла после текущего
- node->ptr = elem;
- return elem;
- }
- Node* List::Delete(Node* node)
- {
- if (node == NULL) { return NULL; } // В списке нет узлов
- count--;
- if (node == head) // Удаление корневого узла
- {
- head = node->ptr;
- delete node;
- return head;
- }
- Node* prev = Prev(node); // Удаление промежуточного узла
- prev->ptr = node->ptr;
- delete node;
- return prev;
- }
- Node* List::Next(Node* node)
- {
- if (isEmpty()) return NULL;
- return node->ptr;
- }
- Node* List::getLast()
- {
- Node* p = head;
- while (Next(p) != NULL)
- p = Next(p);
- return p;
- }
- Node* List::Prev(Node* node)
- {
- if (isEmpty()) return NULL;
- if (node == head) return NULL;
- Node *p = head;
- while (p->ptr != node)
- p = p->ptr;
- return p;
- }
- void List::Clear()
- {
- class Node *p = head;
- if (p == NULL) return;
- do {
- Node *d = p;
- p = Next(p);
- delete d;
- } while (p != NULL);
- count = 0;
- head = NULL;
- }
- void List::Print()
- {
- if (isEmpty()) { cout << "Списо" << endl; return; }
- Node *p = head;
- do {
- for(int i=0;i<(*p).size;i++){
- cout << (*p).stroka[i];
- }
- p = Next(p);
- } while (p != NULL);
- cout << endl;
- }
- void List::sortb( bool (*comparisonFcn)(int, int);) {
- bool sorted = false;
- while (!sorted) {
- sorted = true;
- for (int i = 0; i < n-1; i++) {
- if (a[i] > a[i+1]) {
- int tmp = a[i];
- a[i] = a[i+1];
- a[i+1] = tmp;
- sorted = false;
- }
- }
- int main(void)
- {
- List list;
- Node *s = list.getLast();
- for (int i = 0; i < 10; i++) {
- //cout << "Enter size" << endl;
- int k;
- cin >> k;
- char *t = new char[k];
- //cout << "Enter string" << endl;
- for(int j=0;j<k;j++){
- cin >> t[j];
- }
- s = list.Add(t,k,s);
- }
- list.Print();
- Node *g = list.getFirst();
- g = list.Next(g);
- g = list.Next(g);
- g = list.Delete(g);
- g = list.Delete(g);
- list.Print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement