Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 6

Реализовать двухсвязный список. Каждый элемент списка может содержать один объект

15.02.2012, 18:20. Показов 3622. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне нужно было реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: "целое число",
"вещественное число", "строка". В разных узлах одного списка может
быть любой объект одного из допустимых типов. Каждый объект должен
иметь возможность вывести свое содержимое на консоль. У списка должен
быть метод, выводящий все элементы. Но я не знаю как реализовать то что объект может быть 3-х типов. Может перегрузку попробовать, но как тогда структуру Element объявить? Помогите если не трудно. Вот что я сделала для одного типа string:

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <iostream>
#include <conio.h>
#include <string.h>
 
using namespace std;
 
struct Element                              
{
public:
string data;
Element *next;  
Element *pred;
};
 
class List
{
public:
 Element *pHead;
 Element *pPrev;
 int countElem;  
 
List(); //конструктор
~List(); //деструктор
         void addToList(string data);   //функция добавки элемента в список
         void printElem(int numb);//функция вывода на кран заданного элемента списка
         void printList(); //функция вывода на кран всех элементов списка
         void delAllList(); 
         
};
 
 
List::List() //реализация конструктора
{
 pHead = NULL;
 pPrev = NULL;
 countElem = 0;
}
 
 
List::~List() //реализация деструктора
{
delAllList();
}
 
 
void List::addToList(string data)   //реализация функции добавления
{
    Element *temp = new Element;    
    if(pHead == NULL)               
    {
        temp->pred = NULL;          
        temp->next = NULL;          
        pHead = temp;               
    }
    else                            
        pPrev->next = temp;         
 
    temp->data = data;          
    temp->next = NULL;          
    temp->pred = pPrev;
    pPrev = temp;
    countElem++;
 
}
 
void List::printList() //реализация функции вывода на экран списка
{
  Element *pTemp = pHead;  
 
if (pHead == NULL)
{
cout << "Spisok pust";
}
else
{
  cout << "Spisok : ";
 
  while(pTemp != NULL)  
{
  cout << pTemp->data + ' '; 
  pTemp = pTemp->next;  
}
 
cout << endl;
}
}
 
 
void List::printElem(int numb) //функция вывода элемента
{
 Element *pTemp = pHead;
 
 if ((numb>countElem) || (numb<1))  
  cout << "Takogo elementa net" << endl; 
else
{
  for(int i=1; i!=numb; i++) 
{
pTemp = pTemp->next;
}
 
   cout << "Element with number  " << numb <<"  is  "<<pTemp->data << endl;
return;
}
 
};
void List::delAllList()             //реализация удаления всех элементов списка
{
    while(pHead != NULL)            
    {
        Element *pTemp = pHead;     
        pHead = pHead->next;        
        delete pTemp;               
    }
 
    pHead = NULL;
    pPrev = NULL;
}
 
void CinList(List *ls); //функция для ввода данных в список
 
  List lst;  
  char ch;  
  string str;
  
int main()
{
bool exit = false; 
 
  cout << "Vvedite spisok elementov tipa string zakonchiv - '!' " << endl;
 
CinList(&lst);
 
while (exit == false)
{
cout << "=============================================================" << endl;
cout << "Viberite deystvie" << endl;
cout << "1 - Vivesti n-i element" << endl;
cout << "2 - Vivesti vse elementi" << endl;
cout << "0 - Vihod" << endl;
cout << "=============================================================" << endl;
 
  cin >> ch;
  switch(ch)  
{
  
  case '2':
lst.printList();
getch();
break;
 
  case '1':
int num;
  cout << "Vvedite nomer elementa dlya vivoda: ";
  cin >> num;
 lst.printElem(num);
getch();
break;
 
case '0':
exit = true;
break;
 
default:
exit = true;
}
}
 
return 0;
}
 
void CinList(List *ls) //функция для ввода данных в список
{
str = "";
 
for (int i = 0; cin.get(ch); ++i) 
{
if (ch == '!')
{
ls->addToList(str);
str = "";
i = 0;
break;
}
 
if (ch == ' ')
{
ls->addToList(str);
str = "";
i = 0;
}
 
if (ch != ' ') str = str + ch;
 
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2012, 18:20
Ответы с готовыми решениями:

может ли массив содержать один элемент ?
Может ли массив содержать один элемент? Ответ обосновать.Если может, то дайте его описание. Если не может, то объясните почему. Помогите...

Как задать матрицу, в которой каждый элемент может содержать переменное множество чисел?
Здраствуйте, извиняюсь, если вопрос покажется странным. Для решения системы уравнений мне необходимо задать параметры. Выглядит это...

Реализовать двусвязный список. В разных узлах одного списка может быть любой объект одного из допустимых типов (своих знаний не хватает)
Вобщем делаю тестовые задания. На одно мне даже ответили, результат отрицательный. Помогите понять если кто поймёт его не так как я или...

6
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
15.02.2012, 18:58
можно хранить числа в строковом представлении. можно хранить обьект как void*, можно сделать наподобие boost::any
1
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 6
15.02.2012, 19:21  [ТС]
в строковом нельзя. тоесть мне переменную data в структуре сделать типа void? а как потом определить какой объект целое, какой вещественное, а какой строка?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
15.02.2012, 19:30
не void, а void*.
но в таком случае придется хранить информацию о типе.
например можно добавить
C++
1
2
3
4
5
6
enum object_type
{
    INTEGER,
    DECIMAL,
    STRING
};
и в классе придется хранить не только объект, но и переменную типа object_type
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
15.02.2012, 19:41
Цитата Сообщение от SweetHeart Посмотреть сообщение
а как потом определить какой объект целое, какой вещественное, а какой строка?
Чем boost::any не подходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
#include <boost/any.hpp>
 
int main()
{
   std::vector<boost::any> v;
   
   v.push_back(2);
   v.push_back(std::string("hello"));
   
   std::cout << (v[0].type() == typeid(int))          << std::endl
             << (v[0].type() == typeid(float))        << std::endl
             << (v[1].type() == typeid(std::string))  << std::endl;
}
http://liveworkspace.org/code/... 8bf60e6761
Code
1
2
3
1
0
1
0
15.02.2012, 19:41

Не по теме:

Цитата Сообщение от go Посмотреть сообщение
Чем boost::any не подходит?
предлагал, но похоже ТС не хочет:)
по моему многих пугает само слово boost

0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 6
16.02.2012, 14:56  [ТС]
а если у меня Dev-C++ ругается на boost и typeid? подскажите где найти библиотеки для них
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2012, 14:56
Помогаю со студенческими работами здесь

Нужен элемент содержащий флажки, каждый из которых может содержать под флажки
Нужен элемент CheckedListBox с вложенными СheckedListBox'ами. То есть, чтобы под каждым пунктом можно было добавить подпункты. И если взять...

Массив: Может ли массив содержать один элемент? А ни одного?
2. Ответить на следующие вопросы: a) Может ли массив содержать один элемент? А ни одного? б) Можно ли во время выполнения программы...

Входит ли каждый элемент списка в него лишь один раз
Добрый день, задание такое: Функция должна определять, входит ли каждый элемент списка в него лишь один раз. Объясню, что написал я: ...

Однонаправленный список элементов (удвоить каждый элемент списка)
Сформировать однонаправленный список элементов типа char и написать программу следующих операций над ним: а) удвоить каждый элемент списка.

Предикат, записывающий каждый третий элемент списка в новый список
Здравствуйте. Прошу помочь с написанием придиката, который будет записывать каждый третий элемент в новый список. Пишу в visual prolog 7.5....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru