Thứ tự compile code C++

mng cho e hỏi cái thứ tự compile với ạ, có phải là từ trên xuống dưới k ạ, như ở ví dụ này của e, ở trong node *newNode thì e có gọi thằng node *addTail , ở code hiện tại e post lên là đúng và chạy được nhưng còn khi e cho thằng node *addTail xuống dưới thằng node *newNode thì lại báo lỗi ạ .Như thế có phải là phải viết theo thứ tự k ạ ?? vì e mới học nên code viết vẫn hơi lằng nhằng với rối mong mng thông cảm ạ

#include <iostream>;

using namespace std;

struct node {
    int data;
    node *pNext;
};

node *createNode(int x){
    node *create = new node;
    create -> data = x;
    create -> pNext = NULL;
    return create;
}

node *addElement(node *list, int x){
    node *temp = createNode(x);
    list -> pNext = temp;
    return temp;
}

node *getNode(int k, node *p){
    node *temp = p;
    for(int i = 0; i < k; i++){
        temp = temp -> pNext;
    }
    return temp;
}



node *addTail(node *first, int data){
    node *temp = first;
    while(temp -> pNext != NULL){
        temp = temp -> pNext;
    }
    node *addT = createNode(data);
    temp -> pNext = addT;
    return first;

}

node *newNode(node *list, int num){
    node *temp = list;
    node *first = new node;
    while(temp != NULL){
        if(temp -> data <= num){
            first = createNode(temp -> data);
            temp = temp -> pNext;
            break;
        }
        temp = temp -> pNext;
    }
    while(temp != NULL){
    	if(temp -> data <= num){
        first = addTail(first, temp -> data);
    }
        temp = temp -> pNext;
    }
    return first;
}

void printList(node *list){
    node *p = list;
    while(p != NULL){
        cout << p -> data << " ";
        p = p -> pNext;
    }
}
int main(){
    int n, x, k;
    cout << "Nhap n: ";
    cin >> n;
    cout << "Nhap x: ";
    cin >> x;
    node *list = createNode(x);
    node *p = list;
    for(int i = 1; i < n; i++){
    	cout << "Nhap x: ";
        cin >> x;
        p = addElement(p, x);
    }
    cout << "\nNhap vi tri phan tu lam chot: ";
    cin >> k;
    cout << "\n Danh sach moi la: ";
    list = newNode(list, getNode(k, list) -> data);
    printList(list);
}

Đúng thế rồi!

Cách viết trên là “mì ăn liền”. Các hàm gọi theo thứ tự thì không sao, chứ gọi “xoắn quẩy” với nhau thì toi.

Thế nên mới có cái gọi là khai báo hàmđịnh nghĩa hàm. Bạn đang thực hiện khai báo và định nghĩa chung với nhau.

Ngon lành là thế này:

//...
// Phần khai báo
char* str(int);
int number(char*);

// main() có thể ở đây...

// Phần định nghĩa
char* str(int num){
    // Làm gì đó
}

// ...main()...

int number(char* in){
    // Làm gì đó
}

// ...hoặc main() ở đây đều được.

Thường thì các phần khai báo sẽ được gom vào tập tin “header” (.h hoặc .hpp gì đó) để thuận tiện cho việc tạo thư viện hoặc API.

6 Likes

e cảm ơn a , a giải thích dễ hiểu quá =)) :heart_eyes: :heart_eyes: :heart_eyes: :heart_eyes:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?