Toshkent-2022 Nazariy malumotlar: C++ da ikki tomonlama bog'langan: Yagona bog'langan ro'yxatda bo'lgani kabi, ikki marta bog'langan ro'yxatning ham boshi va dumi bor. Boshning oldingi ko'rsatkichi NULL ga o'rnatiladi, chunki bu birinchi tugun. Quyruq tugunining keyingi ko'rsatkichi NULL ga o'rnatiladi, chunki bu oxirgi tugun.
Ikki marta bog'langan ro'yxatning asosiy tartibi quyidagi diagrammada ko'rsatilgan.
Yuqoridagi rasmda biz har bir tugunning ikkita ko'rsatkichi borligini ko'ramiz, ulardan biri oldingi tugunga, ikkinchisi esa keyingi tugunga ishora qiladi. Faqat birinchi tugun (bosh) oldingi tugun nullga, oxirgi tugunga (quyruq) keyingi ko'rsatkich nullga o'rnatilgan.
Ikki marta bog'langan ro'yxat ikkita ko'rsatgichni o'z ichiga olganligi sababli, oldingi va keyingi, biz uni oldinga va orqaga yo'nalishlarga o'tkazishimiz mumkin. Bu ikki marta bog'langan ro'yxatning yagona bog'langan ro'yxatga nisbatan asosiy afzalligi.
Asosiy operatsiyalar. Quyida biz ikki marta bog'langan ro'yxatda bajarishimiz mumkin bo'lgan ba'zi operatsiyalar mavjud.
Kiritish. Ikki marta bog'langan ro'yxatni kiritish operatsiyasi bog'langan ro'yxatga yangi tugunni kiritadi. Yangi tugunni qo'yish joyiga qarab, biz quyidagi kiritish operatsiyalariga ega bo'lishimiz mumkin.
Old tomondan kiritish - birinchi tugun sifatida yangi tugunni qo'shadi.
Oxirida kiritish - Oxirgi tugun sifatida oxirida yangi tugun qo'shadi.
Tugundan oldin kiritish - tugun berilgan bo'lsa, ushbu tugun oldiga yangi tugun qo'yadi.
Tugundan keyin qo'shish - tugun berilgan bo'lsa, ushbu tugundan keyin yangi tugun qo'shadi.
Ishdan maqsad: Chiziqli ikki bog‘lamli ro‘yhatlar.
#include using namespace std; struct Node { int data; struct Node* next; struct Node* prev; }; void insert_front(struct Node** head, int new_data) { struct Node* newNode = new Node; newNode->data = new_data; newNode->next = (*head); newNode->prev = NULL; if ((*head) != NULL) (*head)->prev = newNode; (*head) = newNode; } void insert_After(struct Node* prev_node, int new_data) {
if (prev_node == NULL) { cout<<"Oldingi tugun talab qilinadi, u NULL (Bo'sh) bo'lishi mumkin emas"; return; } struct Node* newNode = new Node; newNode->data = new_data; newNode->next = prev_node->next; prev_node->next = newNode; newNode->prev = prev_node; if (newNode->next != NULL) newNode->next->prev = newNode; } void insert_end(struct Node** head, int new_data) { struct Node* newNode = new Node; struct Node* last = *head; newNode->data = new_data; newNode->next = NULL; if (*head == NULL) { newNode->prev = NULL; *head = newNode; return; } while (last->next != NULL) last = last->next; last->next = newNode; newNode->prev = last; return; } void displayList(struct Node* node) { struct Node* last; while (node != NULL) { cout<data<<"<==>"; last = node; node = node->next; } if(node == NULL) cout<<"NULL"; } int main() { struct Node* head = NULL;
Xulosa: Amaliy ishni bajarish davomida quyidagi xulosalarga ega bo'ldim: bularga qism dasturlarni yaratish, c++ dasturlash tili strukturasi, matn satrlari bilan ishlash, sinflarni shakllantirish kabi tushunchalarni o'zlashtirdim.