Forward List คืออะไร?
Forward list สามารถเข้าใจได้ว่าเป็น singly linked list (รายการเชื่อมโยงเดี่ยว) ที่สามารถติดตามได้เฉพาะทิศทางไปข้างหน้า (forward direction) ไม่สามารถย้อนกลับได้ (backward direction) ในขณะที่ list (doubly linked list) สามารถติดตามได้ทั้งสองทิศทาง เนื่องจากแต่ละองค์ประกอบมีลิงก์สองอัน: หนึ่งสำหรับองค์ประกอบถัดไป และอีกอันสำหรับองค์ประกอบก่อนหน้า Forward list จึงมีความเร็วสูงกว่า เนื่องจากต้องเก็บลิงก์เพียงอันเดียว (ไปข้างหน้า) การแทรกและลบข้อมูลใน forward list ใช้เวลาคงที่
forward_list::reverse() คืออะไร?
forward_list::reverse() เป็นฟังก์ชันใน C++ Standard Template Library (STL) ที่ใช้สำหรับ กลับลำดับขององค์ประกอบ ที่อยู่ใน forward list
ไวยากรณ์ (Syntax)
forwardlist_name.reverse()
พารามิเตอร์ (Parameter)
ฟังก์ชันนี้ไม่มีพารามิเตอร์
ค่าที่ส่งคืน (Return Value)
ฟังก์ชันนี้ไม่ส่งคืนค่า (void) ทำการกลับลำดับลิสต์โดยตรง (in-place)
ตัวอย่างการทำงาน
Input: รายการองค์ประกอบ: 57 99 54 34 84 Output: องค์ประกอบหลังกลับลำดับ: 84 34 54 99 57 Input: รายการองค์ประกอบ: 40 30 60 90 70 Output: องค์ประกอบหลังกลับลำดับ: 70 90 60 30 40
แนวทางการเขียนโปรแกรม
- กำหนดค่าเริ่มต้นให้ลิสต์
- พิมพ์ forward list ก่อนใช้ฟังก์ชัน reverse()
- เรียกใช้ฟังก์ชัน forward.reverse() ที่อยู่ในไฟล์หัวข้อของ C++
- แสดง forward list หลังกลับลำดับแล้ว
ตัวอย่างโค้ดที่แก้ไขแล้ว (โค้ดต้นฉบับมีข้อผิดพลาดมาก)
// C++ code to demonstrate the working of forward_list::reverse()
#include <forward_list>
#include <iostream>
using namespace std;
int main() {
// กำหนดค่าเริ่มต้น forward list
forward_list<int> forward = {10, 20, 30, 40, 50};
cout << " รายการองค์ประกอบ: ";
for (auto it = forward.begin(); it != forward.end(); ++it)
cout << *it << " ";
// เรียกใช้ฟังก์ชันที่ทำการกลับลำดับ
forward.reverse();
cout << "\n รายการหลังกลับลำดับ: ";
for (auto it = forward.begin(); it != forward.end(); ++it)
cout << *it << " ";
return 0;
}
ผลลัพธ์ (Output)
รายการองค์ประกอบ: 10 20 30 40 50 รายการหลังกลับลำดับ: 50 40 30 20 10
แก้ไขข้อผิดพลาดจากโค้ดต้นฉบับ:
- ใช้
#include <forward_list>และ#include <iostream>แทน .h แบบเก่า - ใช้
forward.begin()และforward.end()แทนforward.start()(ไม่มีฟังก์ชัน start() ใน forward_list) - แก้ไขตัวพิมพ์
Using→using,Int→int - ลบอักขระพิเศษ
“”ที่ไม่ใช่เครื่องหมายคำพูดมาตรฐาน