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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отсортировать вектор по возрастанию http://www.cyberforum.ru/cpp-beginners/thread446747.html
Введите вектор с элементами double и сортируйте его по возрастанию Как реализовать сортировку по возрастанию?
C++ массив данных, содержащий сведения о книгах: Автор, название, год издания. Напечатать авторов книг 2002 года издания, определить количество книг авто #include "stdafx.h" #include <stdlib.h> #include"conio.h" int _tmain(int argc, _TCHAR* argv) { struct card { char name; http://www.cyberforum.ru/cpp-beginners/thread446746.html
Найти натуральное число от 1 до 10000 с максимальной суммой делителей. C++
Не понимаю как решить))
C++ реализация цикла for
Здравствуйте, как посчитать сумму чисел в цикле for от числа А до B... никак не могу понять как это реализовать... И еще один вопрос, как проверить на четность числа?
C++ Память.Значение-Адрес http://www.cyberforum.ru/cpp-beginners/thread446740.html
Здравствуйте интересует следующее. Есть игра ,в игре есть переменная отвечающая за количество золота. Вот что должно получиться. Я запускаю программу ввожу значение которое хранит переменная отвечающая за кол-во золота и она мне показывает адрес переменной,в которой хранится количество золота. Кто как думает ,как это можно реализовать? Доп. инфа: Программа должна работать всегда ,то...
C++ Ребят, подскажите как исправить ошибку... не могу понять , много что перепробывал компилятор C++ builder codegear вот собственно сам код //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include <iostream.h> #pragma argsused подробнее

Показать сообщение отдельно
SweetHeart
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 6

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

15.02.2012, 18:20. Просмотров 2384. Ответов 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;
 
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru