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

Лабораторна робота 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();

}

}

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