Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Программа формирования линейного списка и выполнения операций над ним




Изучите приведенную программу. Протестируйте программу. Объясните полученные результаты.

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

// Определяется структура. Заказываем необходимый размер

// памяти для записи информации о новом объекте.

struct node {

int inf; // Поле для записи целых чисел.

node *next; // Поле указателя для записи адресов элементов типа node.

};

 

void main()

{node *r, *fr = NULL, *er; // fr – указатель на головной элемент списка.

// er – указатель на последний элемент списка.

// r – указатель для формирования нового узла списка.

node *rp; int a, b; // a – переменная для записи целых чисел.

clrscr();

FILE *f;

f = fopen("t.dat","r"); // Начало формирования списка.

do // Начало цикла ввода чисел из файла.

{ fscanf(f,"%d", &a); // Ввод числа из файла.

r = new node; // Создаем новый элемент списка.

// Выделяем память для нового элемента.

r->inf = a; // Инициализируем поле inf нового элемента списка.

r->next = NULL; // Инициализируем поле указателя нового элемента

//списка.

if (fr == NULL) // Проверяем: список существует или нет. Если

// fr = NULL, то списка нет.

fr = r; // Поэтому новый элемент объявляем головным.

else // Если список существует, то

er -> next = r; // новый элемент присоединяем к списку.

er = r;

} // Новый элемент объявляем последним.

while (!feof(f)); // Конец цикла ввода чисел из файла.

fclose(f); // Конец формирования списка.

// Вывод списка на экран.

cout << "\tСформирован список:\n\n";

r = fr;

while (r!= NULL) // Пока не дошли до последнего элемента списка.

{ cout << r -> inf << " "; // Вывод информации из поля inf элемента,

// адрес которого находится в указателе r.

r = r -> next; // Переход к следующему элементу списка.

// Для этого из поля next текущего элемента списка

// в указатель r пересылаем адрес на следующий элемент.

}

getch();

cout << "\n\nУдалить узел cо значением k= ";

cin >> a;

r = fr;

if (r -> inf == a)

{ cout << "\nудаляется головной узел списка\n";

fr = fr -> next; // В указатель на первый элемент пересылаем

// адрес второго элемента списка.

delete r;

}

else

{ while ((r -> inf!= a) && (r!= NULL)) // Поиск элемента, который

{ // надо удалить.

rp = r; // Запоминаем адрес пройденного элемента.

r = r -> next;

} // Переходим на новый элемент.

if (r -> inf == a) // Проверяем, найден элемент или нет.

{

cout << " Удаляется узел со значением= " << r -> inf << "\n\n";

rp -> next = r -> next; // Поле указателя удаляемого элемента

// пересылаем в поле указателя элемента, который

// расположен перед удаляемым.

delete r;

cout << "\tСписок после удаления элемента: \n\n";

r = fr;

while (r!= NULL) // Пока не дошли до последнего элемента списка.

{ cout << r -> inf << " "; // Вывод значения текущего элемента списка.

r = r -> next; // Переход к следующему элементу списка.

// Для этого из поля next текущего элемента списка

} // в указатель r пересылаем адрес на следующий элемент.

}

else

cout << "\n" << "Узел со значением " << a << " не найден ";

getch();

}

// Вставка нового элемента в список.

cout << "\n\nВставить в список элемент со значением b= ";

cin >> b;

cout << "\n\nЗа элементом со значением n = ";

cin >> a;

r = fr;

while ((r -> inf!= a) && (r!= NULL)) r = r -> next;

if (r -> inf == a)

{ rp = new node; // Выделяем память под новый элемент.

rp -> inf = b; // Заполняем поле inf нового элемента.

rp -> next = r -> next; // К новому элементу присоединяем правую часть списка.

r -> next = rp; // К левой части списка присоединяем новый элемент списка.

cout << "Cписок после вставки элемента со значением: " << b << "\n";

r = fr;

while (r!= NULL)

{ cout << r -> inf << " ";

r = r -> next;

}

}

else cout << "\nЭлемент списка со значением " << a << " не найден ";

// Вставка в список нового головного элемента.

cout << "\n\nВведи значение для нового головного элемента n = ";

cin >> a;

rp = new node; // Выделяем память под новый элемент.

rp -> inf = a; // Заполняем поле inf нового элемента.

rp -> next = fr; // Новый элемент делаем первым.

fr = rp; // В указатель на первый элемент списка

// пересылаем адрес нового элемента.

cout << "\nСписок с новым головным элементом:\n";

r = fr;

while (r!= NULL)

{ cout << r -> inf << " ";

r = r -> next;

}

getch();

}

 





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 470 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2481 - | 2215 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.