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