Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Однонаправленное кольцо 
:(
    Опции темы
Foxxx
Дата 13.5.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



Реализовать шаблон класса Circle, реализующий однонаправленное кольцо. Для представления элемента кольца использовать шаблон структуры Node. Определить функции добавления элемента в кольцо и поиска в кольце.

С++
PM MAIL   Вверх
Foxxx
Дата 13.5.2008, 17:32 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



Неужели никто мне не поможет?
ПЛЗ! Ошень нада smile 
PM MAIL   Вверх
Foxxx
Дата 13.5.2008, 20:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



up
PM MAIL   Вверх
Foxxx
Дата 14.5.2008, 17:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



Очень нуна! Помогите плз!
PM MAIL   Вверх
anatox91
Дата 14.5.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 3
Всего: 13



может хватит уже флудить, а?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Foxxx
Дата 15.5.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



Да я не флужу!
Просто очень нужно, мне КР скоро сдавать, а я не могу разобраться в этих списках!
Пробовал книжки читать - всеравно не догоняю!
Объясните мне тупому попроще как-нибуть.
 smile 
PM MAIL   Вверх
Foxxx
Дата 26.5.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.8.2007

Репутация: нет
Всего: нет



Вот что сам смог набросать! Ток я не уверен что тут все верно! Хелп ми плиз!

Код

#include <iostream>
using namespace std;

template <class T> class Circle
{
    struct Node
    {
        T Data;
        Node *Next;
    };

    int N;
    Node *First;

public:
    Circle();
    Circle(T);
    Circle(const Circle &);
    ~Circle();
    void Add(T);
    void Echo();
};

template <class T> Circle <T>::Circle()
{
    cout << "Def_Construct..." << "\n";
    N = 0;
}

template <class T> Circle<T>::Circle(T Data)
{
    cout << "Param_Construct..." << "\n";
    First = new Node;
    First->Data = Data;
    First->Next = First;
    N = 1;
}

template <class T> Circle<T>::Circle(const Circle &Obj)
{
    cout << "Cpy_Construct..." << "\n";
}

template <class T> Circle<T>::~Circle()
{
    cout << "Destruct..." << "\n";
}

template <class T> void Circle<T>::Add(T Data)
{
    Node *Item = new Node;
    Item->Next = First;
    Item->Data = Data;
    if (!First)
    {
        Item->Next = First;
        First = Item;
    }
    else First = Item;
    N++;
}

template <class T> void Circle<T>::Echo()
{
    //Node *Item = First;
    for (int I = 0; I < N; I++)
    {
        cout << First->Data << ' ';
        First = First->Next;
    }
    cout << "\n";
}

int main()
{
    Circle <int> C(666);
    for (int I = 1; I <= 5; I++) C.Add(I);
    C.Echo();
    return 0;
}

PM MAIL   Вверх
udly
Дата 2.12.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.3.2006

Репутация: нет
Всего: 0



Как раз клиент ко мне обратился с задачами по С++, а среди них есть и такая. Думал найти что то похожее, но халява не прокатила, пришлось самому дописывать  smile 
Понимаю, что уже не актуально, но может кому пригодится. Пример Foxxx'a слегка не доделан: не реализован конструктор копирования, деструктор, некорректно написана функция добавления элемента в кольцо. Да и по сути представленная структура кольцом не является.
Предлагаю свой вариант решения (за основу взял пример Foxxx'a). Элементы буду добавлять в конец кольца (условно, конечно). Поскольку кольцо однонаправленное, то хранить буду указатель на последний элемент (по последнему найти первый гораздо легче, чем последний по первому). 
Код

#include <iostream>
using namespace std;

template <class T>
class Circle
{
    struct Node
    {
        T data;
        Node *next;
    };

protected:
    Node *last; // указатель на последний элемент
public:
    Circle();    // конструктор по умолчанию
    Circle(T);  // конструктор с параметрами
    Circle(const Circle &); // конструктор копирования
    ~Circle();    // деструктор
    void addItem(T);
    void print() const;
    void find(T) const;
};

template <class T>
Circle <T>::Circle():last(NULL)
{
    // кольцо не содержит элементов
}

template <class T>
Circle<T>::Circle(T data)
{
    last = new Node;
    last->data = data;
    last->next = last;
}

template <class T> 
Circle<T>::Circle(const Circle& circle)
{
    last=NULL;
    if(circle.last!=NULL)
    {
        Node *cur=circle.last->next;
        while(cur!=circle.last) // проходим элементы пока не дойдем до последнего
        {
            this->addItem(cur->data);
            cur = cur->next;
        }
        // копирование последнего элемента
        this->addItem(circle.last->data);
    } 
}

template <class T>
Circle<T>::~Circle()
{
    Node *temp, *cur;
    // удаление элементов и освобождение ресурсов
    if(last!=NULL) // если кольцо содержит элементы
    {
        cur = last->next;
        last->next=NULL;    // разрываем кольцо
        while(cur)
        {
            temp = cur;
            cur=cur->next;
            delete temp;
        }
    }
}

template <class T> 
void Circle<T>::addItem(T data)
{
    // если добавляется певый элемент
    if(last==NULL)
    {
        last = new Node;
        last->next = last;
        last->data = data;
    }
    else // добавление второго и последующих элементов
    {
        Node *oldLast = last;
        Node *newNode = new Node;
        newNode->data = data;
        newNode->next=last->next;
        last=newNode;
        oldLast->next=newNode;
    }
}

template <class T> 
void Circle<T>::print() const
{
    if(last!=NULL)    // если кольцо не пустое
    {
        Node *cur=last->next;
        while(cur!=last) // выводим элементы пока не дойдем до последнего
        {
            std::cout << cur->data << "  ";
            cur = cur->next;
        }
        // вывод последнего элемента
        std::cout << last->data << endl;
    }
}

template <class T> 
void Circle<T>::find(T pattern) const
{
    int c=0;
    if(last!=NULL)    // если кольцо не пустое
    {
        Node *cur=last->next;
        while(cur!=last) // перебираем элементы пока не дойдем до последнего
        {
            if(cur->data == pattern)
                std::cout << "Совпадение найдено в " << c << " элементе кольца\n";
            cur = cur->next;
            c++;
        }
        // проверяем последнй элемент
        if(last->data == pattern)
            std::cout << "Совпадение найдено в " << c << " элементе кольца\n";
    }    
}

int main()
{
    Circle <int> c1;
    c1.addItem(15);
    c1.addItem(30);
    c1.addItem(15);
    c1.addItem(7);
    
    std::cout << "Вывод элементов кольца c1: ";
    c1.print();

    // создание объекта с2 с использованием конструктора копирования
    Circle <int> c2=c1;
    c2.addItem(99);
    c2.addItem(15);

    std::cout << "Вывод элементов кольца c2: ";
    c2.print();

    std::cout << "Поиск элементов кольца с2, содержащих число 15:\n";
    c2.find(15);

    return 0;
}

P.S. Мой контактный эл. ящик [email protected]
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.