Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с лабораторной

76K
03 ноября 2011 года
Doumbia
2 / / 03.11.2011
В ходе выполнения лабораторной работы необходимо написать процедурную и объектно-ориентированную программы, реализующие контейнер разнотипных объектов.

Варианты реализации контейнера:
1. Одномерный массив с проверкой на переполнение.
2. Однонаправленный линейный список.
3. Однонаправленный кольцевой список.
4. Двунаправленный линейный список.
5. Двунаправленный кольцевой список.

У контейнера должна быть реализована поддержка следующих операций:
• Заполнение контейнера данными, поступающими из входного пото-ка. Полученный элемент должен быть размещен в контейнере любым из способов, выбранных программистом.
• Вывод значений всех элементов в выходной поток. Выводятся параметры элементов, размещенных в контейнере. Порядок вывода элементов определяется порядком размещения элементов в контейнере. Вывод осуществляется в файл.

[ATTACH]5391[/ATTACH]
445
04 ноября 2011 года
Charley
176 / / 16.08.2011
Цитата: Doumbia

Варианты реализации контейнера:
1. Одномерный массив с проверкой на переполнение.
2. Однонаправленный линейный список.
3. Однонаправленный кольцевой список.
4. Двунаправленный линейный список.
5. Двунаправленный кольцевой список.


Я как понимаю делать надо все 5 типов?

76K
05 ноября 2011 года
Doumbia
2 / / 03.11.2011
Цитата: Charley
Я как понимаю делать надо все 5 типов?



да, все 5

445
05 ноября 2011 года
Charley
176 / / 16.08.2011
Сделал вам простой односвязный список:
Код:
#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;
}

За продолжением пишите мне в Skype. Здесь не хватит места:)
297
06 ноября 2011 года
koodeer
1.2K / / 02.05.2009
Цитата: Charley
односвязный список:
 
Код:
class Element {
    public:
    int data;
    Element *next;
    Element *prev;
};


Хм, это получается двусвязный список.


Цитата: Charley
 
Код:
void push(int i)
int pop()


Странные операции для списка. По названиям подходят для семантики стека, но никак не списка.


В коде присутствуют утечки памяти. Например в функции pop видим:

Цитата: Charley
 
Код:
Element *temp=new Element; // выделили память
int elem;
elem=top->data;
temp=top->next; // а здесь её потеряли


В других местах аналогично.

278
06 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
А еще вместо simple_list :: output() лучше было бы перегрузить operator<<.
445
06 ноября 2011 года
Charley
176 / / 16.08.2011
А вот вы сами за даром посидите и покодите часика 3. И не будете обращать внимание на ерунду типа утечка памяти и неправильная семантика.
278
06 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
Charley, раз уж на то пошло, никто вас не заставлял этого делать. Но если беретесь показывать человеку пример - делайте это качественно, а не говорите, что утечки - это мелочь.
297
06 ноября 2011 года
koodeer
1.2K / / 02.05.2009
Charley, мы же не со зла это пишем. Увидели ошибки в вашем коде, указали вам на них. Имхо, это должно помочь вам в более быстром обучении. Если найдёте ошибки в моем коде, когда я публикую примеры, тоже сообщайте об этом, я скажу спасибо.

А утечка памяти - это не ерунда! Задолбало, что программы постоянно текут памятью, жруг её гигабайтами...
Синтаксис тоже должен соответствовать семантике. Представьте, что вы купили новый автомобиль, во время движения жмёте на тормоз, а вместо торможения получаете ускорение. Вам понравится? Подумаешь, неправильная семантика...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог