Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Chuyển dữ liệu từ stack sang queue

  1. #1
    Ngày gia nhập
    03 2018
    Bài viết
    1

    Mặc định Chuyển dữ liệu từ stack sang queue

    C++
    Đề bài yêu cầu chuyển dữ liệu từ stack sang queue. Em viết như thế này mà code không chạy, em không biết sửa làm sao, anh/chị/bạn giúp em với ạ.
    #include <iostream>
    #define Max 100

    using namespace std;
    typedef int item;

    struct Stack
    {
    int Top;
    item Data[Max];
    };
    struct Queue
    {
    int Front, Rear;
    item Data[Max];
    int count;
    };
    void Init (Stack &S)
    {
    S.Top = 0;
    }

    void Create (Queue &Q)
    {
    Q.Front=0;
    Q.Rear=-1;
    Q.count=0;
    }

    int Isempty(Stack S)
    {
    return (S.Top == 0);
    }

    int Isempty (Queue Q)
    {
    if (Q.count == 0)
    return 1;
    return 0;
    }

    int Isfull(Stack S)
    {
    return (S.Top == Max);
    }

    int Isfull (Queue Q)
    {
    if (Q.count == Max)
    return 1;
    return 0;
    }

    void Push(Stack &S, item x)
    {
    if (!Isfull(S))
    {
    S.Data[S.Top] = x;
    S.Top ++;
    }
    }

    void EnQueue(Queue &Q, item x)
    {
    if (!Isfull(Q))
    {
    Q.Data[++Q.Rear] = x;
    Q.count++;
    }
    else cout<<"Queue day!";
    }

    int Pop(Stack &S)
    {
    if (!Isempty(S))
    {
    S.Top--;
    return S.Data[S.Top];
    }
    }

    void Input (Stack &S)
    {
    int n;
    item x;
    do
    {
    cout<<"Nhap so phan tu cua Stack :";
    cin>>n;
    } while (n>Max || n<1);
    for (int i=0; i<n; i++)
    {
    cout<<"Nhap phan tu thu "<<i+1<<":" ;
    cin>>x;
    Push(S,x);
    }
    }

    void stackToQueue (Stack &S,Queue &Q)
    {
    item x;
    for (int i=0;i<=Max;i++)
    {
    S.Data[S.Top]=x;
    S.Top--;
    EnQueue(Q,x);
    }
    }

    void Output(Queue Q)
    {
    if (Isempty(Q)) cout<<"Hang doi rong !";
    else
    {
    for (int i=Q.Front; i<=Q.Rear; i++)
    cout<<Q.Data[i];
    }
    }

    int main()
    {
    Stack S;
    Init(S);
    Queue Q;
    Create(Q);
    Input(S);
    stackToQueue(S,Q);
    Output(Q);
    return 0;
    }

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    2,760

    Chuyển dữ liệu từ stack sang queue là chuyển cái gì ?
    - Stack is a LIFO (last in first out) vào sau ra trước
    - Queue is a FIFO (first in first out) vào trước ra trước

    https://stackoverflow.com/questions/10974922/what-is-the-basic-difference-between-stack-and-queue

  3. #3
    Ngày gia nhập
    02 2016
    Bài viết
    305

    "code không chạy" tức là sao?
    Tức là nó bị lỗi khi compile? Hay là vẫn compile nhưng không run? Hay là run nhưng không như ý muốn?

    Hàm stackToQueue của bạn sai tét bét hết. Xem kỹ lại cách viết code. Trước mắt thì thấy hàm này nó xóa hết stack nhưng sẽ nhét trị rác vào queue (trị x mà nó nhét vào queue đâu có gán bao giơ?), chưa kể về việc đúng hay sai chiều (xem bên dưới).

    Nguyên tắc vận hành của stack và queue ngược nhau cho nên không thể gán thẳng từng phần tử.
    Ví dụ stack là abcde thì gán thẳng qua queue sẽ thành edcba, như vậy là bị ngược.
    Muốn gán đúng phải sửa abcde thành edcba trước khi gán. Có hai cách sửa:
    - một là dùng 1 stack phụ, abcde qua stack phụ thành edcba, từ stack phụ qua queue sẽ thành đúng abcde.
    - hai là dùng hàm đệ quy.

    Chú thích: làm việc với stack thì bạn chỉ được quyền push, pop, và peek thôi. Code đọc thẳng phần tử trong mảng là sai nguyên tắc.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn