Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ triển khai Forward_List trong STL

forward_list triển khai danh sách liên kết đơn (singly linked list). Chỉ lưu con trỏ đến phần tử tiếp theo, tiết kiệm bộ nhớ hơn list nhưng không hỗ trợ duyệt ngược và truy cập ngẫu nhiên.

Các hàm chính

  • fl.push_front(val) – Thêm vào đầu (O(1)).
  • fl.pop_front() – Xóa đầu.
  • fl.front() – Truy cập đầu.
  • fl.remove(val) – Xóa tất cả phần tử = val.
  • fl.unique() – Xóa trùng lặp liền kề (cần sort trước).
  • fl.reverse() – Đảo ngược danh sách.
  • fl.resize(n[, val]) – Thay đổi kích thước (điền val nếu mở rộng).

Lưu ý: Không có push_back, back(), size() (C++11 không có, C++20 mới có).

Ví dụ mã: Menu Forward List

#include <iostream>
#include <forward_list>
#include <string>
#include <cstdlib>
using namespace std;

int main() {
    forward_list<int> fl;
    forward_list<int>::iterator it;
    int c, n;

    while (true) {
        cout << "1. Thêm đầu\n2. Xóa đầu\n3. Xem đầu\n4. Resize\n";
        cout << "5. Xóa theo giá trị\n6. Xóa trùng liền kề\n";
        cout << "7. Đảo ngược\n8. Hiển thị\n9. Thoát\n";
        cout << "Chọn: "; cin >> c;

        switch (c) {
            case 1: cout << "Giá trị: "; cin >> n; fl.push_front(n); break;
            case 2: if (!fl.empty()) { n = fl.front(); fl.pop_front(); cout << n << " đã xóa\n"; } else cout << "Rỗng!\n"; break;
            case 3: if (!fl.empty()) cout << "Đầu: " << fl.front() << endl; else cout << "Rỗng!\n"; break;
            case 4: cout << "Kích thước mới: "; cin >> n; fl.resize(n); break;
            case 5: cout << "Giá trị xóa: "; cin >> n; fl.remove(n); break;
            case 6: fl.unique(); cout << "Đã xóa trùng liền kề\n"; break;
            case 7: fl.reverse(); cout << "Đã đảo ngược\n"; break;
            case 8: cout << "Forward List: "; for (it = fl.begin(); it != fl.end(); ++it) cout << *it << " "; cout << endl; break;
            case 9: return 0;
            default: cout << "Sai!\n";
        }
    }
    return 0;
}

Kết quả mẫu

Chọn: 1
Giá trị: 1
Chọn: 1
Giá trị: 2
Chọn: 1
Giá trị: 3
Chọn: 3
Đầu: 3
Chọn: 4
Kích thước mới: 6
Chọn: 8
Forward List: 3 2 0 0 0
Chọn: 7
Đã đảo ngược
Chọn: 8
Forward List: 0 0 0 2 3
Chọn: 9