|
Funksiya olib tashlash (Tugun tugun) agar
|
bet | 6/6 | Sana | 12.01.2024 | Hajmi | 182,3 Kb. | | #135428 |
Bog'liq Obro\'yev EzozbekFunksiya olib tashlash (Tugun tugun) agar tugun ≠ bekor va ro'yxatning kattaligi> 1 o'chirildi Ma'lumotlar: = tugun.data tugun.data: = tugun.next.data tugun.next = tugun.next.next qaytish olib tashlangan ma'lumotlar
Tugunlarning massivlari yordamida bog'langan ro'yxatlar
Hech qanday turini qo'llab-quvvatlamaydigan tillar ma'lumotnoma ko'rsatkichlarni qator indekslari bilan almashtirish orqali hali ham havolalar yaratishi mumkin. Yondashuv qator ning yozuvlar, bu erda har bir yozuv massivda keyingi (va ehtimol oldingi) tugunning indeksini ko'rsatadigan butun sonli maydonlarga ega. Massivdagi barcha tugunlardan foydalanish kerak emas. Agar yozuvlar ham qo'llab-quvvatlanmasa, parallel massivlar o'rniga tez-tez ishlatilishi mumkin.
Masalan, ko'rsatgich o'rniga massivlardan foydalaniladigan quyidagi bog'langan ro'yxat yozuvini ko'rib chiqing:
yozuv Kirish { tamsayı Keyingisi; // massivdagi keyingi yozuvning ko'rsatkichi tamsayı oldingi; // oldingi yozuv (agar ikkita bog'langan bo'lsa) mag'lubiyat ism; haqiqiy qoldiq;}
Bog'langan ro'yxatni ushbu tuzilmalar qatorini yaratish va birinchi element indeksini saqlash uchun butun o'zgaruvchini yaratish mumkin.
Elementlar orasidagi bog'lanishlar keyingi (yoki oldingi) katakning qator indeksini berilgan element ichida Keyingi yoki Oldingi maydoniga joylashtirish orqali hosil bo'ladi. Masalan:
Indeks
|
Keyingisi
|
Oldingi
|
Ism
|
Balans
|
0
|
1
|
4
|
Jons, Jon
|
123.45
|
1
|
−1
|
0
|
Smit, Jozef
|
234.56
|
2 (listHead)
|
4
|
−1
|
Adams, Odam
|
0.00
|
3
|
|
|
E'tibor qilmang, Ignatius
|
999.99
|
4
|
0
|
2
|
Yana biri Anita
|
876.54
|
5
|
|
|
|
|
6
|
|
|
|
|
7
|
|
|
|
|
Yuqoridagi misolda, ListHead ro'yxatdagi birinchi yozuvning joylashuvi 2 ga o'rnatiladi. E'tibor bering, 3 va 5 dan 7 gacha bo'lgan yozuvlar ro'yxatning bir qismi emas. Ushbu katakchalar ro'yxatdagi barcha qo'shimchalar uchun mavjud. Yaratish orqali ListFree tamsayı o'zgaruvchisi, a bepul ro'yxat mavjud bo'lgan hujayralarni kuzatib borish uchun yaratilishi mumkin. Agar barcha yozuvlar ishlatilayotgan bo'lsa, yangi yozuvlar ro'yxatda saqlanishidan oldin massivning kattalashtirilishi yoki ba'zi elementlarning o'chirilishi kerak edi.
Quyidagi kod ro'yxatni bosib o'tib, nomlar va hisob balansini ko'rsatishi mumkin:
Chiziqli Bog'langan Ma'lumotlar Tuzilmalari:
Chiziqli bog'langan ma'lumotlar tuzilmalari, bir-biriga joylashgan ma'lumotlarni ifodalash uchun ishlatiladigan eng oddiy strukturalardan biridir. Ushbu tuzilma elementlar orasida o'zaro bog'lanishni saqlaydi. Python tilidagi chiziqli bog'langan ma'lumotlar tuzilmalari ro'yxat (list) orqali eng ommalashgan bo'lib, boshqa tuzilmalar ham ishlatiladi.
Chiziqli Bog'langan Ma'lumotlar Tuzilmalari Misollari:
1. Ro'yxat (List):
- Ro'yxat, chiziqli bog'langan ma'lumotlar tuzilmalari eng ommalashgan va mashhur tuzilmalardan biridir.
- Misol:
```python
my_list = [1, 2, 3, 'four', 5.0]
```
2. O'zgaruvchi Tartiblash (Tuple):
- Tuple o'zgartirib bo'lmaydigan ro'yxatdir.
- Misol:
```python
my_tuple = (1, 2, 'three', 4.0)
```
Stek (Stack) Misoli:
Stek, ma'lumotlarni LIFO (Last In, First Out) tartibda saqlaydigan tuzilma. Stekga yangi element qo'shilganda, u eng yuqoridagi element bo'lib qoladi.
```python
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
def peek(self):
if not self.is_empty():
return self.items[-1]
def size(self):
return len(self.items)
# Stekni sinov qilamiz
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.pop()) # 3
print(stack.peek()) # 2
print(stack.size()) # 2
```
Dek (Deque) Misoli:
Dek, double-ended queue (o'ng va chap tomonlari orqali boshqa ma'lumotlar qo'shish va olish imkoniyatiga ega) tuzilmasidir.
```python
from collections import deque
# Dekni sinov qilamiz
deque_data = deque()
deque_data.append(1) # O'ng tomondan qo'shish
deque_data.appendleft(2) # Chap tomondan qo'shish
deque_data.extend([3, 4, 5]) # Ro'yxatni o'ng tomondan qo'shish
deque_data.extendleft([6, 7, 8]) # Ro'yxatni chap tomondan qo'shish
print(deque_data.pop()) # 5 (O'ngdan olish)
print(deque_data.popleft()) # 8 (Chapdan olish)
print(deque_data) # deque([7, 6, 2, 1, 3, 4])
```
Navbat (Queue) Misoli:
Navbat, ma'lumotlarni FIFO (First In, First Out) tartibda saqlaydigan tuzilma.
```python
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def enq(self, item):
self.items.insert(0, item)
def deq(self):
if not self.is_empty():
return self.items.pop()
def size(self):
return len(self.items)
# Navbatni sinov qilamiz
queue = Queue()
queue.enq(1)
queue.enq(2)
queue.enq(3)
print(queue.deq()) # 1
print(queue.size()) # 2
```
Ushbu misollar, chiziqli bog'langan ma'lumotlar tuzilmalari va ulardan foydalanishning qisqa misollardan iboratligini ko'rsatadi.
Foydalanilgan adabiyotlar:
[RU] Алфред В. Ахо., Джон Э. Хопкрофт, Джефри Д. Ульман. Структура данных и алгоритмы. //Учеб.пос., М.: Изд.дом: "Вильямс", 2000, — 384 с.
[EN] Adam Drozdek. Data structures and algorithms in C++. Fourth edition.Cengage Learning, 2013.
[UZ] Narzullaev U.X., Qarshiev A.B., Boynazarov I.M. Ma’lumotlar tuzilmasi va algoritmlar. //O’quv qo’llanma. Toshkent: Tafakkur nashriyoti, 2013 y. – 192 b.
[RU] Лойко В.И. Структуры и алгоритмы обработки данных. Учебное пособие для вузов. - Краснодар: КубГАУ. 2000. - 261 с., ил.
|
| |