ВУЗ:
Составители:
Рубрика:
144
Здесь реализован односвязный список. Это одна из простых моде-
лей структур управления данным. Класс list, реализующий эту модель,
– представитель так называемых содержательных или контейнерных
типов. Класс iter создан специально для перебора элементов произ-
вольного списка типа list. Объекты, предназначенные для перебора
элементов внутри некоторого набора данных, обычно называют итера-
торами.
Приведем пример использования односвязного списка.
В файле int.txt расположена непустая последовательность целых
чисел A
1
, A
2
,, ..., A
n
. Определить количество этих чисел n и вывести их
в порядке возрастания.
Для решения этой задачи будем строить список, элементы которо-
го упорядочены по возрастанию содержащихся в них целых чисел. По-
строение выполняется за n шагов. Первый шаг – это создание списка,
состоящего из одного элемента, который содержит А
1
. Очевидно, этот
список упорядочен. На i-м шаге ( i = 2, 3, … , n ) переходим от упоря-
доченного списка, элементы которого содержат числа А
1
,..., A
i-1
, к упо-
рядоченному списку, элементы которого содержат A
1
,…, A
i-1
, A
i
. Для
выполнения такого перехода достаточно включить в список новый эле-
мент, содержащий А
i
. Его надо вставить непосредственно за последним
по порядку элементом, содержащим число, меньшее, чем А
i
.
Если же все элементы исходного списка содержат числа, не мень-
шие, чем A
i
, то новый элемент нужно вставить в начало списка.
#include “list.cpp“
#include < fstream.h >
void main ( ) {
ifstream file ( “int.txt” );
list lst; int i, n;
file >> i; n = 1;
lst.create ( i );
while ( file.peek ( )!= EOF )
{ file >> i; n ++;
iter tmp ( lst ); // Создаем объект-итератор для перебора
// элементов списка lst.
elem *p, *q;
while (( p = ++tmp)!= NULL )
if ( p->data < i ) q = p;
else break;
if ( p = = lst.first ( )) lst.create ( i );
else lst.insert ( q, i );}
Страницы
- « первая
- ‹ предыдущая
- …
- 140
- 141
- 142
- 143
- 144
- …
- следующая ›
- последняя »