Программирование >>  Дополнительные возможности наследования 

1 ... 112 113 114 [ 115 ] 116 117 118 ... 265


в листинге 12.13 рассматривается пример профаммы со связанным списком, а затем детально анализируется ее работа.

Цусшииг 12.13. Связанные cnncoi

0; **********************************************

1: Листинг 12.13.

2:

3: ЦЕЛЬ; Показать использование связанного списка

4: ПРИМЕЧАНИЯ:

5:

6; Авторское право: Copyright (С) 1998 Liberty Associates, Inc.

7: Все права защищены

8:

9: Показан один из подходов объектно-ориентированного

10: программирования по созданию связанных списков.

11: Список распределяет задачи между узлами,

12; представляющими собой абстрактные типы данных.

13; Список состоит из трех узлов; головного,

14; хвостового и промежуточного. Данные содержит

15; только промежуточный узел.

16; Все объекты, используемые в списке, относятся

17; к классу Data,

18; ***********************************************

19; 20;

21; ((include <iostream.h> 22;

23; enum { kIsSmaller, kIsLarger, klsSame) ; 24;

25: Связанный список основывается на объектах класса Data

26; Любой класс в связанном списке должен поддерживать два метода;

27; Show (отображение значения) и Compare (возвращение относительной позиции узла)

28; class Data

29; {

30; public;

31; Data(int val);myValue(val){ }

32; -Data(){ }

33; int Compare(const Data &);

34; void Show() { cout myValue endl; }

35: private;

36; int myValue;

ЗУГ } ;

3,8;

39; Сравнение используется для определения

40; позиции в списке для нового узла,

41: int Data;;Compare(const Data & theOtherData)

42; {

43; , if (myValue < theOtherData,myValue) .

44; return kIsSmaller;

45; if (myValue > theOtherData,myValue)



46: return kIsLarger;

47: else

48: return kIsSaitie;

49: }

51: Объявления

52: class Node;

53: class HeadNode;

54: class TailNode;

55: class InternalNode; 56:

57: ADT-представление узловых объектов списка.

58: В каждом производном классе должны быть замещены функции Insert и Show

59: class Node

60: {

61: public:

62: Node(){ }

63: virtual NodeOi }

64: virtual Node * Insert(Data * theData)=0;

65: virtual void Show() = 0;

66: private:

67: } ;

69: Этот узел поддерживает реальные объекты.

70: В данном случае объект имеет тип Data

71: О другом, более общем методе решения этой

72: задачи мы узнаем при рассмотрении шаблонов.

73: class InternalNode: public Node

74: {

75: public:

76: InternalNode(Data * theData, Node * next);

77: InternalNode(){ delete itiyNext; delete itiyData; }

78: virtual Node * Insert(Data * theData);

79: virtual void Show() { itiyData->Show(); myNext->Show(); } Делегирование! 80:

81: private:

82: Data * myData; данные списка

83: Node * itiyNext; указатель на следующий узел в связанном списке

84: } ;

86: Инициализация, выполняемая каждым конструктором

87: InternalNode::InternalNode(Data * theData, Node next):

88: myData(theData),myNext(next)

89: {

90: }

92: Сущность списка.

93: Когда в список передается новый объект,

94: программа определяет позицию в списке

95: для нового узла



Node * InternalNode:;Insert(Data * theOata) {

Этот новенький больше или меньше чем я? int result = myData->Compare(*theData):

switch(result) {

По соглашению, если он такой же как я, то он идет первым case kIsSame; условие выполняется case klsLarger: новые данные вводятся перед моими {

InternalNode dataNode = new InternalNode(theData, this); return dataNode;

Oh больше чем я, поэтому передается в

следующий узел, и пусть тот делает с этими данными все, что захочет, case kIsSmaller:

myNext = myNext->Insert(theData); return this;

return this; появляется MSG

Хвостовой узел выполняет роль часового

class TailNode : public Node {

public: TailNodeOi } TailNode(){ }

virtual Node Insert(Data * theData); virtual void Showi) { }

private:

Если данные подходят для меня, то они должны быть вставлены передо мной, так как я хвост и НИЧЕГО не может быть после меня Node * TailNode::Insert(Data * theData) {

InternalNode dataNode = ew InternalNode(theData, this); return dataNode;

Головной узел не содержит данных, он только



1 ... 112 113 114 [ 115 ] 116 117 118 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика