AXBOROT TEXNOLOGIYALARI VA KOMUNIKATSILARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI KOMPYUTER INJENERINGGI YO’NALISHI MA’LUMOTLAR TUZILMASI VA ALGORITMLAR FANIDAN
4-Amaliy ish
5-VARIANT
MAVZU: DINAMIK MA’LUMOTLAR TUZILMASINI TADQIQ QILISH. CHIZIQLI BOG’LANGAN RO’YHATLAR
Tekshirdi: Bo’riyev Yusuf
Topshirdi: Allaberdiyev Elyor
TOSHKENT 2022
Dinamik ma’lumotlar tuzilmasi
Statik ma’lumotlar tuzilmasi vaqt o‘tishi bilan o‘z o‘lchamini o‘zgartirmaydi. Biz har doim dastur kodidagi statik ma’lumotlar tuzilmasiga qarab ularning o‘lchamini bilishimiz mumkin. Bunday ma’lumotlarga teskari ravishda dinamik ma’lumotlar tuzilmasi mavjud bo‘lib, bunda dastur bajarilishi davomida dinamik ma’lumotlar tuzilmasi o‘lchamini o‘zgartirishi mumkin. Dinamik ma’lumotlar tuzilmasi – bu qandaydir bir qonuniyatga asoslanib shakllangan, lekin elementlari soni, o‘zaro joylashuvi va o‘zaro aloqasi dastur bajarilishi davomida shu qonuniyat asosida dinamik o‘zgaruvchan bo‘lgan ma’lumotlar tuzilmasidir.
3.2. Chiziqli bir tomonlama yo‘nalgan ro‘yhatlar
3.2-rasm. Chiziqli bir bog‘lamli ro‘yhatlar
4. Bir bog‘lamli ro‘yhatdan elementni o‘chirish
Ro‘yhatda p ko‘rsatkich ko‘rsatayotgan elementdan keyingi elementni o‘chiramiz (3.11-rasm).
3.11-rasm. Ro‘yhat o‘rtasidan element o‘chirish
Buni ro‘yobga chiqarish uchun quyidagi ishlarni amalga oshirish lozim:
a) O‘chirilayotgan elementni ko‘rsatuvchi q ko‘rsatkichni kiritish.
q=p->ptr;
b) p elementni q elementdan keyingi element bilan bog‘lash.
p->ptr=q->ptr;
c) O‘chirilayotgan element info maydonidagi informatsiyani yodda saqlash (agar zarur bo‘lsa) k=q->info;
d) q ko‘rsatkich ko‘rsatayotgan elementni o‘chirish.
delete(q)
5-VARIANT topshirig’i:
Ro’yhatning n-inchi elementi o’chirilsin:
#include
using namespace std;
class Node {
public:
int data;
Node* next;
};
void push(Node** head_ref, int new_data)
{
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
void deleteNode(Node** head_ref, int key)
{
Node* temp = *head_ref;
Node* prev = NULL;
if (temp != NULL && temp->data == key) {
*head_ref = temp->next;
delete temp;
return;
}
else {
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL)
return;
prev->next = temp->next;
delete temp;
}
}
void printList(Node* node)
{
while (node != NULL) {
cout << node->data << " ";
node = node->next;
}
}
int main()
{
Node* head = NULL;
int k, l;
cin >> k;
for(int i = 0; i < k; i++){
cin >> l;
push(&head, l);
}
puts("List: ");
printList(head);
int i;
cin >> i;
deleteNode(&head, i);
puts("\nO'chirilgandan keyingi holat : ");
printList(head);
return 0;
}
Dostları ilə paylaş: |