You are on page 1of 4

#include<bits/stdc++.

h>

using namespace std;

//xây dựng một struct node


struct Node
{
int data;
Node *next;
};
typedef struct Node *node;

//hàm kiểm tra rổng


bool empty(node back)
{
//return vế back
return back == NULL;
}

//hàm đếm số lượng phần tử trong hàng đợi


int getSize(node back)
{
//khởi tạo biến cnt
int cnt = 0;
//khởi tạo vòng lặp với lặp nếu back khác NULL
while(back!=NULL)
{
//ta sẽ tăng biến cnt
++cnt;
//Ta cho back = back->next để dịch tới phần tử tiếp theo
back=back->next;
}
return cnt;
}

//khởi tạo makenode để cấp phát động node mới có kiểu dữ liệu là số nguyên
node MakeNode(int x)
{
//khởi tạo node tmp
node tmp = new Node();
tmp->data = x;
tmp->next = NULL;
return tmp;
}

//Đẩy phần tử vào cuối của hàng đợi (push)


void push(node &back, int x)
{
//ta cho node tmp = makenode
node tmp = MakeNode(x);
/*ở đây push chính là thêm 1 phần tử vào cuối hàng đợi hoặc ta có thể tưởng tượng là
ta đang thêm 1 phần tử vào đầu trong dslk*/
//ta sẽ kiểm tra(back=NULL)
if(back ==NULL)
{
//ta sẽ cho back=tmp
back =tmp;
}
else
{
tmp->next = back;
back =tmp;
}
}

//thao tác pop


void pop(node &back)
{
//khởi tạo 2 biến
node truoc = NULL, sau = back;
//ta sẽ lặp đến node gần đầu hàng đợi là (front)
while(sau->next !=NULL)//điều kiện lặp đến khi nào mà sau->next != NULL
{
truoc = sau;
sau = sau->next;
}
//nếu trước = NULL, tức là hàng đợi chỉ có 1 phần tử
if(truoc == NULL)
{
//thì ta chỉ cần cho back =NULL thì khi đó nó sẽ tự khắc xóa phần tử ở đầu
back =NULL;
}
//ngược lại
else
{
//ta sẽ cho phần next node trước nó trỏ vào NULL
truoc->next = NULL;

//thao tac lấy phần tử ở đầu


int front(node back)
{
//Ta sử dụng vòng lặp
while(back->next!=NULL)// điều kiện dừng nếu duyệt tới node cuối cùng
{
//ta cho back = back->next
back= back->next;/*khi mà sau vòng while thì node back nó sẽ chạy đến node cuối cùng
Hoặc ta nói là node đầu hàng đợi */
}
//trả về giá trị của back hiện tại
return back->data;
}

//vd bây giờ ta sẽ in ra 68 mà nhỏ hơn 9 chữ số


//6 8 66 68 86 88 666 668 688 ...

//hàm main
int main()
{
//Ta sẽ khai báo node đầu tiên hoặc node cuối trong hàng đợi
node back =NULL;
//ta đẩy 2 số 6 và 8 vào hàng đợi
push(back,6);
push(back,8);
//ta sẽ tạo vector để lưu các số lạm phát này
vector<int>lp;
//sử dụng vòng lặp while
while(1)
{
//ta sẽ lấy phần tử ở đầu hàng đợi
//ta khai báo biến top = front(back)
int top = front(back);//lấy ra phần tử ở đầu hàng dợi
pop(back);
string s = to_string(top); //to_tring chuyển tất cả định dạng sang string
//ta kiểm tra nếu có 10 chữ số thì ta sẽ dừng
if(s.size() == 9)
{
break;
}
lp.push_back(top);//hàm đẩy phần tử vào vị trí sau cùng của vector
/*mỗi khi mà ta lấy 1 số nào đó ở đầu hàm đợi thì ta sẽ nối số 6 và số 8 đằng sau như này:
66
6 sau đó 2 số này sẽ dc đẩy vào trong hàng đợi
68
*/
push(back,top*10+6);//sau đó nó sẽ đẩy ra các số có thằng sau là 6 và có thằng sau là 8 số hiện tại
push(back,top*10+8);
}
//in ra màn hình
for(int x : lp)
{
cout << x << " " ;
}
}

You might also like