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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найдите два слова с наилучшей рифмой и еще две задачи. http://www.cyberforum.ru/cpp-beginners/thread52765.html
Дан текст (набор слов). Найдите в нем два слова с наилучшей рифмой. Наилучшей будем считать рифму, когда у пары слов совпадает наибольшее число букв с конца. Формат входных данных Первая строчка входных данных содержит натуральное число n, 2<=n<=10000. Затем идет n различных строк, каждая из которых содержит одно слово (слова могут состоять из латинских и русских букв в кодировке KOI-8,...
C++ Отличие static от объявление переменных ДО функции main Может быть я не совсем точно выразился в заголовке. Интересует отличие объявление переменных ДО функции main и объявление через static. По моим ощущениям если объявлено через static, то переменная существует всегда(даже при выходе из блока где она использовалась). Но ведь если просто объявить переменные до функции main они также будут видны везде. Поясните в чем загвоздка. Заранее спасибо. ... 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;
}
Помогите разобраться в односвязном списке, не могу понять выполнение программы, что к чему.
Объясните на сколько можно подробнее...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru