Домой
назад Оглавление вперед




[стр.-7]

procedure( к: Integer

var previos, current :NodePointer;

i : Integer; begin i i =0 f

current:-first; while currentoNIL do begin i;=i+l;

if i=k then begin { k-й элемент найден}

if first=current then f irst : =currentA. next else previos".next: =current".next;

(Удаление из списка)

dispose(current);

break; end;

previos:=current; current: =currentA. next;

end; end;

procedure(Печать элементов списка}

var p :NodePointer;

begin

WriteLn;

p:=first;

while ponil do begin Write (pA.s:3, »i р:=рЛ .next

end; end;

Var (Main) i,m,n : Integer; begin {Main)

ClrScr; Randomize;

n:=17; (Список из п элементов}

for i:=l to n do IncludeNode (InitNode) ;

PrintNodeList;

WriteLn;

m:=17; (Удалить из списка m-й элемент) DeleteNode (m); PrintNodeList; ReadKey; end. (Main)


Алгоритм 2.3. Программа на Си включения и исключения элементов из списка

#include <stdio.h> tinclude <stdlib.h> ttinclude <conio.h>

typedef struct tagNode{ Элемент связанного списка int s; Элемент последовательности tagNode *next; Указатель на следующий элемент

}Node;

typedef Node *NodePointer;

Node *first=NULL; Указатель начала списка NodePointer InitNode( void ){ Генерация нового

списка

NodePointer newNode;

newNode=new Node; Выделение памяти

новому элементу newNode->5=randcm(99) + 1; Значение нового

списка

newNode->next=NULL;

return newNode;

}

Включить новый элемент в начало списка . void IncludeNode ( NodePointer newNode ) { newNode->next=f irst; first=newNode ;

.}

void DeleteNode ( int k ) { Удалить из списка

k-й элемент NodePointer previos, current; int i; i=0;

current=first; while ( current ! -NULL ) ( i++;

if( i==k ) { k-й элемент найден

iff first= = current ) first=current->next; else previos->next=current->next; Удалить

из списка

delete current; break;

1


previos=current; current=current->next;

)

)

void( void ){ Печать элементов

списка

NodePointer р; p=first;

while ( p!=NULL ) {

printf("%3d ",p->s) ; p=p->next;

}

1

void void

int i,m,n; clrscr() ; randomize() ;

n-=17; Список из п элементов

for( i=0; i<n; i++ ) IncludeNode ( InitNode ( ) ); PrintNodeList (); printf ("\n");

элемент

DeleteNode(m) ; PrintNodeList (); getch();

Связанное представление предпочтительнее лишь в том случае, если в значительной степени используются операции включения и исключения элементов.

2.2. Представление деревьев

Конечное корневое дерево 7формально определяется как непустое конечное множество упорядоченных узлов, таких, что существует один выделенный узел, называемый корнем дерева, а оставшиеся узлы разбиты на т 0 поддеревьев Т2,..., Т/п.

Корневое дерево на рис. 2.3 содержит 9 узлов, помеченных буквами от а до л Узлы с метками e,f, с, g,h, r являются листьями, остальные узлы — внутренние. Узел с меткой а — корень. Понятие дерева используется в различных аспектах. Деревья — наиболее важные нелинейные объекты, используемые для представления данных в алгоритмах на дискретных структурах.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91]