#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
class Element {
public:
int data;
Element *next;
Element *prev;
};
class simple_list { //Однонаправленный линейный список
Element *top;
int MaxCount;
public:
simple_list()
{
MaxCount=0;
top=NULL;
}
int IsEmpty ()
{
if (top==NULL)
{
return true;
}
else
return false;
}
void push(int i)
{
Element *link = new Element;
link->data=i;
link->next=top;
top=link;
MaxCount++;
}
int pop()
{
if(!IsEmpty())
{
Element *temp=new Element;
int elem;
elem=top->data;
temp=top->next;
MaxCount--;
delete top;
top=temp;
return elem;
} else
return NULL;
}
void output()
{
ofstream channel("data.txt");
Element *tmp = top;
channel << "Данные из односвязного списка" << endl;
while (tmp)
{
channel << tmp->data << " ";
tmp=tmp->next;
}
}
~simple_list() {
if(!IsEmpty()) {
Element *tmp=new Element;
while (top) {
tmp=top;
if (top) {
top=top->next;
MaxCount--;
}
delete tmp;
}
}
}
};
int _tmain(int argc, _TCHAR* argv[])
{
simple_list TEMP;
long i=0;
for (i=0; i<3; i++) {
TEMP.push(i);
}
TEMP.output();
system("pause");
return 0;
}
Помогите с лабораторной
Варианты реализации контейнера:
1. Одномерный массив с проверкой на переполнение.
2. Однонаправленный линейный список.
3. Однонаправленный кольцевой список.
4. Двунаправленный линейный список.
5. Двунаправленный кольцевой список.
У контейнера должна быть реализована поддержка следующих операций:
• Заполнение контейнера данными, поступающими из входного пото-ка. Полученный элемент должен быть размещен в контейнере любым из способов, выбранных программистом.
• Вывод значений всех элементов в выходной поток. Выводятся параметры элементов, размещенных в контейнере. Порядок вывода элементов определяется порядком размещения элементов в контейнере. Вывод осуществляется в файл.
[ATTACH]5391[/ATTACH]
Цитата: Doumbia
Варианты реализации контейнера:
1. Одномерный массив с проверкой на переполнение.
2. Однонаправленный линейный список.
3. Однонаправленный кольцевой список.
4. Двунаправленный линейный список.
5. Двунаправленный кольцевой список.
Я как понимаю делать надо все 5 типов?
Цитата: Charley
Я как понимаю делать надо все 5 типов?
да, все 5
Сделал вам простой односвязный список:
Цитата: Charley
односвязный список:
Код:
class Element {
public:
int data;
Element *next;
Element *prev;
};
public:
int data;
Element *next;
Element *prev;
};
Хм, это получается двусвязный список.
Цитата: Charley
Код:
void push(int i)
int pop()
int pop()
Странные операции для списка. По названиям подходят для семантики стека, но никак не списка.
В коде присутствуют утечки памяти. Например в функции pop видим:
Цитата: Charley
Код:
Element *temp=new Element; // выделили память
int elem;
elem=top->data;
temp=top->next; // а здесь её потеряли
int elem;
elem=top->data;
temp=top->next; // а здесь её потеряли
В других местах аналогично.
А еще вместо simple_list :: output() лучше было бы перегрузить operator<<.
А вот вы сами за даром посидите и покодите часика 3. И не будете обращать внимание на ерунду типа утечка памяти и неправильная семантика.
Charley, раз уж на то пошло, никто вас не заставлял этого делать. Но если беретесь показывать человеку пример - делайте это качественно, а не говорите, что утечки - это мелочь.
А утечка памяти - это не ерунда! Задолбало, что программы постоянно текут памятью, жруг её гигабайтами...
Синтаксис тоже должен соответствовать семантике. Представьте, что вы купили новый автомобиль, во время движения жмёте на тормоз, а вместо торможения получаете ускорение. Вам понравится? Подумаешь, неправильная семантика...