Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2020, 14:39   #1
kitkat1000
 
Регистрация: 29.01.2020
Сообщений: 8
По умолчанию Нужно спрятать часть реализации списка в класс List

Часть реализации списка, конкретно структура Node вынесена наружу, нужно спрятать её в класс List и все методы переписать так чтобы они работали не с Node и тем более не с указателями на Node, а с конкретным значением который содержит Node , int field;
Код:
#include<iostream>

using namespace std;
 
struct Node
{   Node() : ptr(NULL) {}
    int   field;
    Node* ptr;
};
 
class List
{       Node *head;
        int count = 0;
        Node* Prev(Node*);
    public:
        List() : head(NULL) {}
 
        int size()
        {   
			return count;
        }
        bool isEmpty()
        {   
			return head == NULL;
        }
        int getValue(Node* p)
        {   
			return p->field;
        }
        void setValue(Node *p, int val)
        {   
			p->field = val;
        }
        Node* getFirst()
        {   
			return head;
        }
        Node* getLast();
        void  Clear();
        Node* Next(Node *);
        Node* Add(int, Node*);
        Node* Delete(Node*);
        void  Print();
};
 
Node* List::Add(int num, Node* node = NULL)
{   Node *elem = new Node();
    elem->field = num;
    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::Prev(Node* node)
{   if (isEmpty())
		return NULL;
    if (node == head)
		return NULL;
		
    Node *p = head;
    while (p->ptr != node)
        p = p->ptr;
    return p;
}
 
Node* List::getLast()
{   Node* p = head;
    while (Next(p) != NULL)
        p = Next(p);
    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 << "The list is empty" << endl;
        return;
    }
    Node *p = head;
    do
    {   
		cout << getValue(p) << " ";
        p = Next(p);
    }
    while (p != NULL);
    cout << endl;
}
 
int delete_value(List& s, const int measure)
{   if(0 == s.size())
        std::cout << "Error\n";
    else
    {   for(Node* p = s.getFirst(); p; p = s.Next(p))
        {   if(p->field%10 == measure)
            {
				p = s.Delete(p);
            }
        }
    }
    return 0;
}

int main()
{
    cout << "Create a list\n";
    List list;
    list.Print();
 
    int N;
    cout <<"Enter the number of items: ";
    cin>>N;
    for (int i = 0; i < N; i++)
    {   int z;
        cout << "Number "<< i+1 <<": ";
        cin>>z;
        list.Add(z);
    }
    list.Print();
 
    delete_value(list, 5);
 
    cout << "\nResult: \n";
    list.Print();
 
    cin.get();
    cin.get();
    return 0;
}
kitkat1000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После каждого элемента списка добавьте ту часть списка, которая была перед ним - Pascal ABC Panchess Паскаль, Turbo Pascal, PascalABC.NET 6 10.04.2017 11:12
ROBOTS.TXT — как спрятать часть сайта? Bulat Ibrahim Общие вопросы Web 8 12.03.2017 17:19
Спрятать часть картинки в div scalpel HTML и CSS 2 08.04.2014 13:01
класс list SkrudjMakdak Общие вопросы по Java, Java SE, Kotlin 2 10.01.2012 23:39
Поле списка (List Box) asas2010 Microsoft Office Excel 4 01.04.2010 15:24