01/10/2018, 00:19

Lỗi Stack bằng danh sách liên kết trong C++!

Em viết để in ra danh sách bằng stack nhưng lỗi chỗ pRun , em không hiểu tại sao bị lỗi chỗ đó , anh chị nào giúp em , em cảm ơn !

#include<iostream>

using namespace std;

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

struct Stack {
    Node *top;
    int count;
};

bool isEmptyStack(Stack *s)
{
    if (!s)
        return true;
    if (s->top == NULL || s->count == 0)
        return true;
    else
        return false;
}

Node *Push(Stack *s, int data)   // them Node vao dau danh sach
{
    if (!s)
        return NULL;
    Node *nNode = new Node;
    nNode->data = data;
    nNode->next = NULL;
    if (isEmptyStack(s)) {
        s->top = nNode;
        s->count++;
    } else {
        nNode->next = s->top;
        s->top = nNode;
    }
    s->count++;
    return s->top;
}

void Print(Stack *s)
{
    Node *pRun = NULL;
    if (!s)
        return;
    else{
        Node *pRun = s->top;
        while (pRun != NULL) {
            cout << pRun->data;
            pRun = pRun->next;
        }
        cout << endl;
    }

}

int main()
{
    Stack *s = new Stack;
    Node *top = NULL;
    int count = 0;
    Push(s, 3);
    Push(s, 4);
    Print(s);
    system("pause");
    return 0;
}
Pham Van Hai viết 02:31 ngày 01/10/2018

nhưng lỗi chỗ pRun , em không hiểu tại sao bị lỗi chỗ đó

Lỗi xảy ra là lỗi gì? Bạn mô tả cụ thể hơn đi?
Theo mình đoán bạn thiếu else sau câu lệnh return.

if (!s)
return;
{
Node *pRun = s->top;
while (pRun != NULL) {
cout << pRun->data;
pRun = pRun->next;
}

Duy Quoc viết 02:30 ngày 01/10/2018

Vấn đề là nằm trong 2 lệnh ở hàm main() dưới đây

Node *top = NULL;
int count = 0;

Là do 2 dòng trên không khởi tạo được Stack rỗng nên 2 biến thành viên top, count của s kiểu Stack đã không được gán giá trị thích hợp do đó khi sử dụng hàm Print() in ra các phần tử trong stack sẽ có lỗi.

Khởi tạo struct nên được thực hiện như ví dụ bên dưới

#include<iostream>
#include<string>

using namespace std;

struct Book {
    string isbn;
    string title;
    int publishYear;
};

int main() {
    Book *firstBook = new Book;
    
    //Init my favorite book
    firstBook->isbn = "9780132714297";
    firstBook->title = "Object-Oriented Programming in C++";
    firstBook->publishYear = 1997;
    
    cout << firstBook->isbn << endl <<
            firstBook->title << endl <<
            firstBook->publishYear << endl;
            
    return 0;
}
Khang Việt viết 02:30 ngày 01/10/2018

Mình thiếu else chỗ đó nhưng lỗi của mình như thế này !

Khang Việt viết 02:20 ngày 01/10/2018

em cảm ơn anh ! Em fix được rồi !

Bài liên quan
0