Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 15:44   #1
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию Заполнение связного однонаправленного списка с++

Некоторое время уже изучаю принципы работы с языком с++, и в тот момент, когда я дошел до списков, у меня произошел конфуз. В принципе понимаю, как работаю указатели, ссылки, но там приведен пример программы, принцип работы которой я не особо понимаю.
Ниже я напишу сам код программы и очень прошу объяснит мне, как работает эта программа. Если этот вариант будет слишком сложным, то прошу, пожалуйста, предоставить свой вариант программы. Заранее огромное спасибо!
Код:
#include "stdafx.h"
#include <iostream>
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;
private:
};

class InternalNode:public Node
{
public:
	InternalNode(Data *theData,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 rezult=myData->Compare(*theData);
	switch(rezult)
	{
	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() {}
private:

};

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

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

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 _tmain(int argc, _TCHAR* argv[])
{
	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();
	return 0;
}
Chelovekpredel вне форума Ответить с цитированием
Старый 07.10.2012, 16:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
предоставить свой вариант программы
http://www.programmersforum.ru/showt...279#post713279
Читай комментарии.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание связного списка на Си zx11 Общие вопросы C/C++ 9 17.03.2014 00:54
Удаление связного списка из памяти Mahin Общие вопросы C/C++ 3 13.07.2012 10:10
обращениe к члену связного списка soad33 Помощь студентам 0 03.11.2011 22:04
удаление циклического однонаправленного списка.. Yakoot Visual C++ 9 18.06.2011 20:05
сортировка узлов связного списка pavelstraut Общие вопросы C/C++ 5 28.07.2009 23:27