Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Динамические списки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найдите два слова с наилучшей рифмой и еще две задачи. http://www.cyberforum.ru/cpp-beginners/thread52765.html
Дан текст (набор слов). Найдите в нем два слова с наилучшей рифмой. Наилучшей будем считать рифму, когда у пары слов совпадает наибольшее число букв с конца. Формат входных данных Первая строчка...
C++ Отличие static от объявление переменных ДО функции main Может быть я не совсем точно выразился в заголовке. Интересует отличие объявление переменных ДО функции main и объявление через static. По моим ощущениям если объявлено через static, то переменная... http://www.cyberforum.ru/cpp-beginners/thread52763.html
указатели C++
когда работаешь с оператором delete нужно как-то показывать указатель?? Подробнее непишите пожалуйста??
Динамическое создание файлов. C++
Очень нужен пример такой на С/С++ (поф,ибо у меня DEV-C++).Кто поможет ?:( ЗЫ: Вылетает Unhandled Win32 exception =_= в моем примере
C++ Как создают современные компьютерные игры? http://www.cyberforum.ru/cpp-beginners/thread52743.html
Интересно, как создают современные компьютерные игры?? То есть на каком языке программирования?? Я слышал в основном на с++!!! Кто нибудь может мне помочь, хочу попробовать создать игру??
C++ Подскажите о операторе delete Как правильно пользоваться оператором удаления delete?? подробнее

Показать сообщение отдельно
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:13
Код
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

enum {kIsSmaller, kIsLarger, kIsSame};

class Data
{
    public:
        Data(int val):myValue(val){}
        ~Data(){}
        int Compare(const Data &);
        void Show() {cout << myValue << endl;}
    private:
        int myValue;
};
int Data::Compare(const Data & theOtherData)
{
    if(myValue < theOtherData.myValue) return kIsSmaller;
    if(myValue > theOtherData.myValue) return kIsLarger;
    else return kIsSame;
}

class Node;
class HeadNode;
class TailNode;
class InternalNode;

class Node
{
    public:
        Node() {}
        virtual ~Node(){}
        virtual Node * Insert(Data * theData)=0;
        virtual void Show()=0;
};

class InternalNode: public Node
{
   public:
         InternalNode(Data * theDat, Node * next);
         ~InternalNode() { delete myNext; delete myData;}
         virtual Node * Insert(Data * theData);
         virtual void Show() {myData->Show(); myNext->Show();}
   private:
         Data * myData;
         Node * myNext;
};                
    
InternalNode::InternalNode(Data * theData, Node * next):
    myData(theData), myNext(next) {}
    
    Node * InternalNode::Insert(Data * theData)
    {
        int result = myData->Compare(*theData);
        
        switch(result)
        {
            case kIsSame:
            case kIsLarger:
            {
                InternalNode * dataNode = new InternalNode(theData, this);
                return dataNode;
            }
            case kIsSmaller:
                myNext=myNext->Insert(theData);
                return this;
            }
            return this;
        }
        
class TailNode: public Node
{
    public:
        TailNode(){}
       ~TailNode(){}
        virtual Node * Insert(Data * theData);
        virtual void Show() {}
};

Node * TailNode::Insert(Data* theData)
{
    InternalNode * dataNode = new InternalNode(theData, this);
    return dataNode;
}

class HeadNode: public Node
{
    public:
        HeadNode();
        ~HeadNode(){delete myNext;}
        virtual Node * Insert(Data * theData);
        virtual void Show() {myNext->Show();}
    private:
        Node * myNext;
};

HeadNode::HeadNode()
{ 
    myNext=new TailNode();
}

Node * HeadNode::Insert(Data * theData)
{
    myNext=myNext->Insert(theData);
    return this;
}

class LinkedList
{
    public:
        LinkedList();
        ~LinkedList(){delete myHead;}
        void Insert(Data * theData);
        void ShowAll() {myHead->Show();}
    private:
        HeadNode * myHead;
};

LinkedList::LinkedList()
{
    myHead = new HeadNode;
}

void LinkedList::Insert(Data * pData)
{
    myHead->Insert(pData);
}

           
    
int main()
{
    Data * pData;
    int val;
    LinkedList ll;
    
    for(;;)
    {
        cout << "What value? (0 to stop): ";
        cin >> val;
        if(!val)
        break;
        pData=new Data(val);
        ll.Insert(pData);
    }
    
    ll.ShowAll();
    
   
        
    system("PAUSE");
    return 0;
}
Помогите разобраться в односвязном списке, не могу понять выполнение программы, что к чему.
Объясните на сколько можно подробнее...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru