Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Класс


Автор: SoWa 23.12.2007, 20:11
В разделе Си ничего не понял. Обращусь сюда, сдавать завтра smile Плюсик полюбому с меня
"Составить описание класса для работы с цепными списками строк(произв. длины) с операциями включения в список. удаление из списка элемента с заданым значением данного. удаление всего списка или конца списка начиная с заданого элемента"

Заранее спасибо

Автор: ST1 23.12.2007, 22:13
Где-то так:
Код

#include <iostream>
#include <string>
#include <assert.h>

using namespace std;

/**
  * Узел списка List.
  */
struct Node
{
    /** значение */
    string val;
    /** указатель на следующий элемент */
    Node *next;

    /** создает новый узел для переданного значения */
    Node(const string &v) : val(v), next(0) {}
};

/**
 * Примитивный связный список
 */
struct List
{
    /** голова списка */
    Node *head;
    /** хвост списка */
    Node *tail;

    /** создает пустой список */
    List()
    {
        head = tail = 0;
    }

    /** удаляет все добавленные элементы и уничтожает список */
    ~List()
    {
        clear();
    }

    /** добавляет в список копию переданного элемента */
    void add(const string &v)
    {
        Node *n = new Node(v);

        if (!head)
            head = tail = n;
        else
            tail = tail->next = n;
    }

    /** удаляет из списка элемент с заданым значением данного */
    void remove(const string &s)
    {
        Node *ptr = head;
        Node *prevPtr = 0;
        while (ptr != 0 && ptr->val != s)
        {
            prevPtr = ptr;
            ptr = ptr->next;
        }

        if (ptr == 0)
            return; // "s not found"

        if (ptr == head)
            head = ptr->next;
        else
            prevPtr->next = ptr->next;

        if (ptr == tail)
        {
            tail = prevPtr;
            delete ptr;
        }
    }

    /** удаление всего списка */
    void clear()
    {
        for (Node *ptr = head, *next; ptr; ptr = next)
        {
            next = ptr->next;
            delete ptr;
        }
        head = tail = 0;
    }

    string toString()
    {
        string str;

        for (Node *ptr = head; ptr; ptr = ptr->next)
            str.append(ptr->val);

        return str;
    }
};

int main()
{
    List slist;
    slist.add("1");
    slist.add("2");
    slist.add("3");

    cout << slist.toString() << endl;

    slist.remove("2");
    cout << slist.toString() << endl;

    slist.clear();

    assert(slist.toString().empty());
    return 0;
}


Автор: SoWa 24.12.2007, 07:08
УРАА!!! !Армия отменяется!!!!
Спасибо тебе преогромнейшее и конечно плюс!!!
//Ты станешь заметным участником форума

Автор: ST1 24.12.2007, 09:29
Да не за что.  Прокатило?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)