Queue | Thuật toán để in đảo số nguyên

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi hamyhoang75, 24/5/09.

  1. hamyhoang75

    hamyhoang75 Youtube Master Race

    Tham gia ngày:
    3/4/09
    Bài viết:
    1
    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();
    
    }
    
     
  2. CTKhuyen

    CTKhuyen

    Tham gia ngày:
    11/11/05
    Bài viết:
    2,542
    Nơi ở:
    Giang Hồ
    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
     
  3. Fireemblem&me

    Fireemblem&me Dragon Quest

    Tham gia ngày:
    22/3/07
    Bài viết:
    1,424
    Nơi ở:
    HCM
    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
     
  4. mickeyguyvl

    mickeyguyvl Youtube Master Race

    Tham gia ngày:
    10/6/09
    Bài viết:
    42
    cái này có phải C++ hok , học lâu quá rồi trả lại hết cho thầy cô lun=((
     
  5. 3rr0r

    3rr0r Youtube Master Race

    Tham gia ngày:
    3/7/07
    Bài viết:
    30
    Nơi ở:
    Underground
    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ì.
     

Chia sẻ trang này