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

Реализация класса множество через двусвязный список. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построить класс для описания плоской геометрической фигуры прямоугольник http://www.cyberforum.ru/cpp-beginners/thread377593.html
Построить класс для описания плоской геометрической фигуры прямоугольник. Предусмотреть методы для создания объектов и изменения.
C++ ошибка в функции подскажите как исправить в функции ввод списка с экрана, там был бесконечный цикл который прерывался операторов Break, препод сказал что это не грамотно прерывать цикл с помощью Break, попытался в while само условие написать но выдает такую ошибку " File3.cpp(119): E2378 Do-while statement missing ; Full parser context File3.cpp(106): parsing: sp * fs_enter()" че не так ??? using namespace std; char bufRus;... http://www.cyberforum.ru/cpp-beginners/thread377565.html
C++ Определение матрицы смежности графа по заданной матрице инцидентности
Доброй ночи :) Изучаю графы, написал фукнцию для конвертации матрицы инцидентности в матрицу смежности, а наоборот не выходит. Слева на рисунке матрицы инцидентности, с неё получаю матрицу смежности. А обратно ерунду выдает... Подскажите идею, пожалуйста .
Unicod C++
Доброго времени суток. Подскажите кто знает достойный материал(возможно книги) по использованию юникода в срр приложениях. Об LPWSTR WCHAR и тд. С юникодам ранее практически не работал, а найти полной и исчерпывающей информации так и не получилось, в книгах которые изучал применялся acsi. Со string, *char уж давно разобрался, а тут начал изучать винапи (по Петзольдсу) и все бы хорошо, да...
C++ Найти все натуральные числа, не превышающие заданного N, которые делятся на каждую из своих цифр. http://www.cyberforum.ru/cpp-beginners/thread377516.html
Найти все натуральные числа, не превышающие заданного N, которые делятся на каждую из своих цифр. Надо решить через функцию .Без массивов.
C++ Просьба в компиляции Приветствую. Я в С полный ноль (даже меньше), делаю проект на дельфи. Нашел инфу по RSA-шифрованию, но как обычно есть проблемы. Вроде и тема про связку дельфи и опенссл, но пример почему то на C++. Есть пример проги, но ставить С++ для компиляции как то смысла нет, вдруг там ошибки в коде какие нить. Вот здесь есть код, скомпильте, плиз, кому не влом и отправьте мне на мыльце плиз. Хочется... подробнее

Показать сообщение отдельно
Fantom.AS
 Аватар для Fantom.AS
2 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 121
04.11.2011, 12:21     Реализация класса множество через двусвязный список.
дали задание реализовать класс множество через двусвязный список.

Сам класс список мне реализовать вроде удалось, но стоит загвоздка в том, как реализовать некоторые функции для множества: пересечение множеств (*), объединение множеств(+), и разность множеств (-), поиск заданного элемента, удаление и добавление его.

для пересечение множеств (*), объединение множеств(+), и разность множеств (-) думаю стоит переопределять операции *, + и - соответственно.

пересечение: в новое множество идут только общие элементы двух мн-в.
объединение: в новое мн-во идут все элементы, причем они не должны повторяться.
разность: в новое мн-во идут элементы, которые есть в первом, но нет во втором.

вот что у меня пока реализовано.

//Set_list.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#pragma once
#ifndef Set_list_h
#define Set_list_h
class Set_list
{
public:
    Set_list(void);
    ~Set_list(void);
 
 
    void push_begin(int value);             //добавление в начало списка
    void push_end(int value);               //добавление в конец списка
 
    void print_all();                       //печать списка
    void print_all_rev();                   //печать списка в обратном порядке
    
    int print_count();                      //размерность множества
    void clear();                           //очистить список
    bool clear_one(int num);                //удалить элемент
    
    int select(int num);                    //вывести элемент
 
 
protected:
    struct node
    {
        int data;
 
        node *next;
        node *prev;
 
        node(int value, node *n, node *p) : data(value), next(n), prev(p) {}
    };
 
    node *end;
    node *first;
    int count;
 
private:
    Set_list(const Set_list & rhs);                 //конструктор копирования
    Set_list& operator=(const Set_list & rhs);      //конструктор присваивания
};
 
#endif

//Set_list.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "StdAfx.h"
#include "Set_list.h"
#include <iostream>
using namespace std;
 
Set_list::Set_list(void) : count(0), first(NULL), end(NULL)
{
}
 
 
Set_list::~Set_list(void)
{
    clear();
}
 
/* ------- */
/* ФУНКЦИИ */
/* ------- */
 
// добавление записи в начало списка
void Set_list::push_begin(int value)
{
    first = new node(value, first, 0);
    
    if(!count)
         end = first;
    
    node *ptr = first->next;
    if(ptr)
         ptr->prev = first;
 
    count++;
}
 
// добавление записи в конец списка
void Set_list::push_end(int value)
{
    end = new node(value, NULL, end);
    
    if (!count)
       first = end;
    
    node *ptr = end->prev;
    if (ptr)
       ptr->next = end;
 
    count++;
}
 
// печать списка
void Set_list::print_all()
{
    node *ptr = first;
    
    while (ptr)
    {
        cout<<ptr->data<<"\n";
        ptr = ptr->next;
    }
}
 
// печать списка в обратном порядке
void Set_list::print_all_rev()
{
    node *ptr = end;
    
    while (ptr)
    {
        cout<<ptr->data<<"\n";
        ptr = ptr->prev;
    }
}
 
// кол-во элементов
int Set_list::print_count()
{
     return count;
}
 
// выборка элемента по порядковому номеру
int Set_list::select(int num)
{
    if(!count || !num || num>count+1)
         return 0;
    
    int cnt=0;
         
    node *ptr = first;
    
    while (ptr)
    {
         cnt++;
         if (num==cnt)
              return ptr->data;
         ptr = ptr->next;
    }
}
 
// удаление произвольного элемента
bool Set_list::clear_one(int num)
{
    if(!count || !num || num>count+1)
         return false;
    
    int cnt=0;
         
    node *ptr = first;
    
    while (ptr)
    {
         cnt++;
         if (num==cnt) {
              node *ptr_prev = ptr->prev;
              node *ptr_next = ptr->next;
              
              if(ptr_prev)
                   ptr_prev->next = ptr_next;
              if(ptr_next)
                   ptr_next->prev = ptr_prev;
              
              delete ptr;
              
              count--;
              return true;
         }
         ptr = ptr->next;
    }
}
 
// удаление всего списка
void Set_list::clear()
{
     while (first)
     {
          node *ptr = first;
          first = ptr->next;
          delete ptr;
     }
     end = first;
     
     count = 0;
}


осталось дописать функции, о которых сказано выше, но я что-то не знаю, как это сделать....

Добавлено через 42 минуты
забыл добавить, элементами множества являются целые числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru