МИНИСТЕРСТВО образованиЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Донской государственный технический университет»
КАФЕДРА «ПОВТ И АС»
ЛАБОРАТОРНАЯ РАБОТА № 5
по дисциплине:
«Объектно-ориентированное программирование»
на тему:
«Динамический структуры данных»
Выполнил: ст.гр. ВИ31
Малыгин А.Ю.
Проверила: Болдырева А.А.
г.Ростов-на-Дону
2012г.
Содержание.
Постановка задачи
Тестирование программы
Листинг
Постановка задачи
Цель: «Изучение основных приемов использования указателей для создания динамических структур данных, отображаемых списков»
В условии лабораторной работы требует выполнить 3 задания, основанных на работе с выделением блоков памяти, связи их посредством указателей, и использования новых типовых структур для создания списков и стеков.
2. Тестирование программы
И что же у нас вышло, вот один скриншот работы программы, делать больше лень..точнее не вижу смысла, так как работоспособность программы легче показать при наглядной демонстрации:
Код функций: struct sp {
int ch;
sp *next,*last;
};
sp *nach;
void sshow(){
sp *tmp=nach;
wcout<<L"Какие элементы хранятся в очереди: \n\r";
while (tmp!=NULL) {printf("%d, ",(*tmp).ch); tmp=(*tmp).next;}
getch();
}
void snew(){
sp *tmp,*now;
int info;
wcout<<L"Введите число для добавления в очередь: ";
cin>>info;
tmp=nach;
if (tmp!=NULL) while ((*tmp).next!=NULL) tmp=(*tmp).next;
now=tmp;
tmp=(sp *)malloc(sizeof(sp));
if (now==NULL) {nach=now=tmp; (*tmp).last=NULL;}
else {(*now).next=tmp; (*tmp).last=now;}
(*tmp).ch=info;
(*tmp).next=NULL;
now=tmp;
wcout<<L"\nЧисло добавленно в очередь!";
getch();
}
void sdel(){
sp *tmp;
Int info;
sshow();
if (nach==NULL) {wcout<<L"\nОчередь пуста - возвращаемся в меню!"; getch(); return ;}
wcout<<L"\nВведите, число которое хотите удалить: "; cin>>info;
tmp=nach;
while (tmp!=NULL && (*tmp).ch!=info) tmp=(*tmp).next;
if (tmp==NULL) {wcout<<L"\nТакого элемента нет - возвращаемся в меню!"; getch(); return ;}
if (tmp==nach) nach=(*tmp).next;
if ((*tmp).last!=NULL) (*(*tmp).last).next=(*tmp).next ;
if ((*tmp).next!=NULL) (*(*tmp).next).last=(*tmp).last ;
free(tmp);
wcout<<L"\nПосле удаления элемента очередь приобрела вид: \n";
sshow();
}
Переходим к реализации второго задания, иии вот мы удалили последний помещенный элемент в стек:
Код функций:
struct sp {
int ch;
sp *last;
};
sp *endst;
void sshow(){
sp *tmp=endst;
wcout<<L"Какие элементы хранятся в стеке: \n\r";
while (tmp!=NULL) {printf("%d, ",(*tmp).ch); tmp=(*tmp).last;}
getch();
}
void snew(){
sp *tmp;
int info;
wcout<<L"Введите число для добавления в стек: ";
cin>>info;
tmp=(sp *)malloc(sizeof(sp));
if (endst==NULL) {endst=tmp; (*tmp).last=NULL;}
else (*tmp).last=endst;
(*tmp).ch=info;
endst=tmp;
wcout<<L"\nЧисло добавленно в стек!";
getch();
}
void sdel(){
sp *tmp;
sshow();
if (endst==NULL) {wcout<<L"\nСтек пуст - возвращаемся в меню!"; getch(); return ;}
tmp=endst;
endst=(*endst).last;
free(tmp);
wcout<<L"\nПосле удаления элемента очередь приобрела вид: \n";
sshow();
}
А теперь мы создаем свое множество чисел:
Код функций:
int count,*nach;
void oshow(){
wcout<<L"\nЭлементы, которые хранятся в множестве: \n";
for (int i=0;i<=count; cout<<nach[i++]<<", ");
getch();
}
int prov(int info){
for(int i=0;i<=count;++i) if (nach[i]==info) return 1;
return 0;
}
void onew(){