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

"Классы и объекты - динамические структуры" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
stepan123
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 9
20.05.2012, 06:14     "Классы и объекты - динамические структуры" #1
Цель: Разработка простейших классов на примере разработки моделей динамических информационных структур (одно и двунаправленных списков).


Постановка задачи
Написать программу, в которой создаются динамические структуры, и выполнить их обработку в соответствии со своим вариантом.

Для каждого вариант разработать следующие методы:
1. Конструктор пустого списка.
2. Добавление элемента в список (в соответствии со своим вариантом).
3. Удаление элемента из списка (в соответствии со своим вариантом).
4. Печать списка.
5. Запись списка в файл.
6. Восстановление списка из файла.
7. Деструктор списка (уничтожение).


Порядок выполнения работы

1. Разработать описание класса, выделить публичные и приватные поля данных. Разработать интерфейс класса – прототипы методов.
2. Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы.
3. Написать функцию для печати списка. Функция должна предусматривать вывод сообщения, если список пустой.
4. Написать функции для удаления и добавления элементов списка в соответствии со своим вариантом.
5. Выполнить изменения в списке и печать списка после каждого изменения.
6. Написать функцию для записи списка в файл.
7. Написать функцию для уничтожения списка.
8. Записать список в файл, уничтожить его и выполнить печать (при печати должно быть выдано сообщение "Список пустой").
9. Написать функцию для восстановления списка из файла.
10. Восстановить список и распечатать его.
11. Уничтожить список.

Задание:
Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера;

вот моя лаба готовая её нужно переделать в виде класса
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
197
198
199
200
201
202
203
204
205
206
include <string.h>
#include<iostream>
#include <conio.h>
using namespace std;
 // Элемент данных 
 struct Element 
 { 
  // Данные 
  int data;  
  // Адрес следующего элемента списка 
  Element * Next; 
 }; 
 // Односвязный список 
 class List 
 { // Адрес головного элемента списка 
  Element * Head; 
  Element * Prev;     // указатель на последний элемент списка
  // Количество элементов списка 
  int Count; 
  public: 
  // Конструктор 
  List(); 
  // Добавление элемента в список 
  void Add(char data); 
  void PasteElement(int data, int position);
  
  void DelElement(int position);
  // Распечатка содержимого списка 
  void Print(); 
 }; 
 List::List() 
 { 
  Head = NULL;
  Prev = NULL; 
  Count = 0; 
 } 
 
 void List::Add(char data) 
 { 
  // создание нового элемента 
  Element * temp = new Element; 
  // заполнение данными 
  if(Head == NULL)              //если это первый элемент, то
    {
        temp->Next = NULL;          
        Head = temp;                //"голова" указывает на созданный элемент
    }
    else                            //если не первый, то
        Prev->Next = temp;          //предыдущий указывает на него
 
    temp->data = data;              //копируем данные
    temp->Next = NULL;          //указываем на хвост, так как этот элемент последний
    Prev = temp;
  Count++; 
 } 
 void List::Print() 
 { 
  // запоминаем адрес головного элемента 
  Element * temp = Head; 
  // Пока еще есть элементы 
  while(temp != 0) 
  { 
  // Выводим данные 
  cout << temp->data<< " "; 
  // Переходим на следующий элемент 
  temp = temp->Next; 
  } 
  cout << endl; 
 } 
 
 void List::PasteElement(int data, int position)
{
   Element *Temp = Head;
    Element *nextEl;
    Element *nElem = new Element;       //создаем временный элемент
    if ((position>Count) || (position<1))       //если указанный элемент не существует, то
        cout << "Takogo elementa net" << endl;  //выводим предупреждение на экран
    else
    {
        for(int i=1; i!=position; i++)  //иначе, переходим до этого элемента
        {    
            Temp = Temp->Next;
        }
        nElem->data=data;
        if (Temp == Head) //если добавляем после первого элемента
        {
            if (Count == 1) //если этот элемент единственный
            {
                Temp->Next=nElem;
                nElem->Next=NULL;
                Prev = nElem;
            }
            else //если он первый, но не единственный
            {
                nextEl = Temp->Next;
                Temp->Next = nElem;
                nElem->Next = nextEl; 
            }
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }
 
        if (Temp->Next == NULL)         //если добавляем после последнего элемента
        {   
            Temp->Next=nElem;
            nElem->Next=NULL;
            Prev=nElem;
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }   
        if (Temp->Next != NULL)     //если добавляем в центр списка
        {   
            nextEl = Temp->Next;
            Temp->Next = nElem;
            nElem->Next = nextEl;
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }           
    }
};
 
void List::DelElement(int position)
{
    Element *Temp=Head;
    Element *pred;      //создаем временный элемент
    if ((position>Count) || (position<1))       //если указанный элемент не существует, то
        cout << "Takogo elementa net" << endl;  //выводим предупреждение на экран
    else
    {
        for(int i=1; i!=position; i++)  //иначе, переходим до этого элемента
        {
            pred=Temp;    
            Temp = Temp->Next;
        }
        
        if (Temp == Head) //если удаляем первый элемент
        {
            if (Count == 1) //если этот элемент единственный
            {
                Head = NULL;
                Prev = NULL;
            }
            else //если он первый, но не единственный
            {
                Head = Temp->Next; 
            }
 
            delete Temp;
            Count--;
 
            cout << "Element " << position << " udalen" << endl;
            return;
        }
 
        if (Temp->Next == NULL)     //если удаляем последний элемент
        {   
            pred->Next=NULL;   
            Prev=pred;
            delete Temp;
            Count--;
            cout << "Element " << position << " udalen" << endl;
            return;
        }       
        
        if (Temp->Next != NULL) //если элемент находится в центре списка
        {   pred->Next=Temp->Next;
            delete Temp;
            Count--;
            cout << "Element " << position << " udalen" << endl;
            return;
        }
    }
};
     
 // Тестовый пример 
 int main() 
 { 
  setlocale (LC_CTYPE,"Russian");
  int k,n,x,y,q;
  // Создаем объект класса List 
  List lst; 
  cout<<"\nВведите количество элементов:\n";
  cin>>n;  
  for(int i=0; i <n; i++)
  { 
    cout<<"\nВведите элемент:\n";
    cin>>k;
    lst.Add(k); 
  }
  cout << "Заполненный список:" <<endl; 
  lst.Print();
  cout<<"\nВведите позицию с коротой добавлять:\n";
  cin>>y;
  cout<<"\nВведите елемент:\n";
  cin>>x;
  lst.PasteElement(x,y);
  lst.Print();
  cout<<"\nВведите номер элемента для удаления:\n";
  cin>>q; 
  lst.DelElement(q);
  lst.Print(); 
  system("PAUSE");
 }
Добавлено через 1 час 33 минуты
123123

Добавлено через 38 минут
Хнык1

Добавлено через 9 часов 9 минут
)))))))))))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 06:14     "Классы и объекты - динамические структуры"
Посмотрите здесь:

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле... C++
C++ "Классы и объекты" -"операторы"
Классы "Пара чисел" и "Прямоугольный треугольник" C++
Классы "Пара чисел" и "Прямоугольный треугольник" C++
Классы "Пара чисел" и "Прямоугольный треугольник" C++
C++ Структуры "Студент" и "Дата": с чем связана данная ошибка?
C++ Классы "Бинарное дерево" и "Узел" в одном приложении
Классы "Фигура", "Прямоугольник", "Круг" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru