Скачиваний:
3
Добавлен:
30.06.2018
Размер:
24 Кб
Скачать
☆

Лабораторна робота 1. Використання зв‘язаних динамічних структур даних для подання послідовностей об‘єктів

Студента ИТ 14-1 Красовського Абхая

Вариант №11

Мета роботи: вивчити та навчитися використовувати зв‘язані структури даних для створення стеків, списків різного виду та інших динамічних структур даних.

Ход работы

Індивідуальне завдання

№

Вид динамічної структури

Реалізовані функції

11

Список однозв‘язний кільцевий

Створення, видалення, додавання

Листинг программы:

public class ListElement {

int data;

ListElement next;

}

public class List {

private ListElement first; // указатель на первый элемент

private ListElement last; // указатель на последний элемент

void addFront(int data) {

ListElement a = new ListElement();

a.data = data;

// указатель на следующий элемент автоматически инициализируется как null

if(first == null) //если список пуст

{ //то указываем ссылки начала и конца на новый элемент

first = a; //т.е. список теперь состоит из одного элемента

last = a;

}

else {

a.next = first; //иначе новый элемент теперь ссылается на "бывший" первый

first = a; //а указатель на первый элемент теперь ссылается на новый элемент

}

}

void addBack(int data) {

ListElement a = new ListElement();

a.data = data;

if (last == null)

{

first = a;

last = a;

} else {

last.next = a; //иначе "старый" последний элемент теперь ссылается на новый

last = a; //а в указатель на последний элемент записываем адрес нового элемента

}

}

void printList() {

ListElement t = first; // получаем ссылку на первый элемент

if (last.next != first) makeListCircle(); // делаем список кольцевым,если он еще не является таковым

System.out.print(t.data + " "); //печатаем его данные

t = t.next;

while (t != first) {

System.out.print(t.data + " ");

t = t.next;

}

}

void deleteElement(int data) {

if(first == null) //если список пуст -

return; //ничего не делаем

if (first == last) { //если список состоит из одного элемента

first = null; //очищаем указатели начала и конца

last = null;

return; //и выходим

}

if (first.data == data) { //если первый элемент - тот, что нам нужен

first = first.next; //переключаем указатель начала на второй элемент

return; //и выходим

}

ListElement t = first; //иначе начинаем искать

if (t.next.data == data) { //проверяем следующий элемент

if(first == t.next) //если он последний

{

first = t; //то переключаем указатель на последний элемент на текущий

}

t.next = t.next.next; //найденный элемент выкидываем

} else t = t.next;

while (t != first) {

if (t.next.data == data) { //проверяем следующий элемент

if(last == t.next) //если он последний

{

last = t; //то переключаем указатель на последний элемент на текущий

}

t.next = t.next.next; //найденный элемент выкидываем

return; //и выходим

}

t = t.next;

}

}

void makeListCircle() { // преобразование линейного списка в кольцевой

last.next = first; // присваиваем указатель на последнеий элемент на первый

}

}

public class Main {

public static void main(String argc[]) {

List list = new List();

list.addBack(5);

list.addFront(0);

list.addFront(4);

list.printList();

System.out.println();

list.deleteElement(0);

list.printList();

System.out.println();

list.deleteElement(10);

list.printList();

}

}

Соседние файлы в предмете Системный анализ и проектирование информационных систем