Mình có bài này, nhờ mọi người giải thích hộ mình thuật toán để chạy là như thế nào. Cảm ơn mọi người nhiều. Mã: #include<iostream.h> #include<stdlib.h> #include<conio.h> #define MaxLength 1000 struct Queue { int a[MaxLength+1]; int front,rear; }; void CreateQ(Queue &Q) { Q.front=0; Q.rear=0; } int EmptyQ(Queue Q) { if (Q.front==0 && Q.rear==0) return 1; else return 0; } void AddQ(Queue &Q, int x) { if (EmptyQ(Q)) { Q.front=Q.rear=1; Q.a[Q.rear]=x; } else { Q.rear++; Q.a[Q.rear]=x; } } void RemoveQ(Queue &Q, int &x) { if (EmptyQ(Q)) cout<<"\n hang doi rong!:"; else { x=Q.a[Q.front]; if (Q.front==Q.rear) Q.front=Q.rear=0; else Q.front++; } } void indao(int n) { Queue q; CreateQ(q); int x; while (n>0) { AddQ(q, n%10); n=n/10; } while(!EmptyQ(q)) { RemoveQ(q,x); cout<<x<<" "; } } void main() { int n; clrscr(); cout<<"Nhap so nguyen duong n:\t"; cin>>n; cout<<"\nSo n in nguoc la:\t"; indao(n); getch(); }
Bài này là minh họa đơn giản cho hàng đợi thôi mà,bạn chạy debug sẽ thấy thôi. Struc của Queue gồm: { int a[MAX];// mảng để lưu số,vd số ban đầu bạn nhập vào là 12345 thì nó sẽ lưu trong đó là 54321 int front,rear;//Đánh dấu số }; Demo thử nhé,giả như bạn nhập là 5367 đi,nó sẽ làm tuần tự như sau: Bước 1:Khởi tạo và thêm phần tử vào hàng đợi (hàm AddQ) lấy số dư khi 5367 cho 10 là 7,rồi thêm vào Q.a[1] Cứ lặp như thế Q.a[2] = 6,Q.a[3] = 3,Q.a[4] = 5. Đồng thời thì Q.front = 1,Q.rear = 4 Bước 2:Xuất và xóa hàng đợi : Cho lệnh in ra mảng Q.a[] là xong thôi,rồi xóa ở đây là mỗi khi xuất ra một số,thì front tăng lên 1,cho tới khi front = rear thì thực hiện front = rear = 0,coi như xóa hàng đợi
có 1 cách hay để học thuật toán (cơ bản, còn phức tạp thì phải có óc tưởng tượng) đọc từng dòng lệnh, ánh xạ ký hiệu với ý nghĩa của nó,chạy tay cho 1 vd đơn giản cụ thể để hiểu (nếu vẽ được sơ đồ thuật toán thì càng tốt) <mình nêu cách này vì mấy bạn học mới học lập trình mà đọc code ko hiểu thì nên luyện như thế, chứ sau này đọc code lớn hơn thì nhờ ai> còn về ý nghĩa thì nhìn sơ qua thì bạn ở trên giải thích khá đủ và rõ have fun
Nếu ko hiểu thuật toán, bạn nên sử dụng debug, sử dụng step in, out, over. Bạn sẽ thấy được dòng code này làm gì.