Cześć wszystkim, mam prośbę o pomoc w zrozumieniu kolejki dwukierunkowej. Znalazł by się ktoś kto wyjaśnił mi co i dlaczego dzieje się w linijkach zakończonych "//???"?

#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string.h>
using namespace std;
int ile, a, b, i;
char str[10];
struct bib { //deklaracja struktury
	int wiek;
	char imie[20];
	char nazwisko[20];
	struct bib*next; //wskaznik na nastepny element
	struct bib*prev; //wskaznik na poprzedni element
};
int main() {
	int x;
	struct bib*z = new bib; //tworzy nowy obiekt struktury
	z->prev = NULL; //ustawiamy wskaznik
	z->wiek = 1; 
	strcpy(z->imie, "imie1");
	strcpy(z->nazwisko, "nazwisko1");
	z->next = new bib; // dodajemy kolejny obiekt do struktury
	z->next->prev = z; //???
	z = z->next; //???

	z->wiek = 2;
	strcpy(z->imie, "imie2");
	strcpy(z->nazwisko, "nazwisko2");
	z->next = new bib;
	z->next->prev = z;
	z = z->next;

	z->wiek = 3;
	strcpy(z->imie, "imie3");
	strcpy(z->nazwisko, "nazwisko3");
	z->next = new bib;
	z->next->prev = z;
	z = z->next;

	z = z->prev; //???
	z->next = NULL; //???
	for (;;) {
		while (z->prev != NULL) //???
		{
			z = z->prev; //???
		}

		printf("co chcesz zrobić? 1-doda 2-wybierz 3- wszystkie\n");
		scanf("%d", &a);
		if (a == 1) {
			while (z->next != NULL) //???
			{
				z = z->next; //???
			}
			z->next = new bib; 
			z->next->prev = z;
			z = z->next;

			printf("wiek?");
			scanf("%d", &b);
			z->wiek = b; //???
			printf("imie?");
			scanf("%s", &str);
			strcpy(z->imie, str);
			printf("nazwisko?");
			scanf("%s", &str);
			strcpy(z->nazwisko, str);

			z->next = new bib; //???
			z->next->prev = z; //???
			z->next = NULL; //???
		};
		if (a == 2) {
			printf("kóry?\n");
			scanf("%d", &b);
			printf("\n");
			while (z->prev != NULL) { //???
				{
					z = z->prev; //???
				}
				}
			for (i=0;i<b-1;i++) {
				z = z->next; //???
			
			}
			
			cout << z->wiek << endl;
			cout << z->imie << endl;
			cout << z->nazwisko << endl;
			printf("\n");
			printf("\n");

		}

		if (a == 3) {

			while (z->next != NULL) //???
			{
				cout << z->wiek << endl;
				cout << z->imie << endl;
				cout << z->nazwisko << endl;
				z = z->next; //???

			}
			cout << z->wiek << endl;
			cout << z->imie << endl;
			cout << z->nazwisko << endl;



		}


		if (a == 4) {
			break;
		}


	}




	getch();
	return 0;
}