ในบทความนี้ เราจะเรียนรู้วิธีการกลับลำดับสตริง (reverse a string) โดยใช้โครงสร้างข้อมูล Stack สตริงเป็นชนิดข้อมูลที่ประกอบด้วยอักขระหนึ่งตัวขึ้นไป และถูกล้อมรอบด้วยเครื่องหมายคำพูดคู่ (" ") ส่วน Stack เป็นโครงสร้างข้อมูลเชิงเส้นที่ใช้เก็บชุดของวัตถุ โดยทำงานตามหลัก Last-In-First-Out (LIFO) คือ ตัวที่เข้าไปทีหลังจะออกมาก่อน
ตัวอย่างการทำงาน
สมมติข้อมูลนำเข้า (Input) คือ:
Input string: Java Program
ผลลัพธ์ที่ต้องการ (Output) คือ:
Reversed string: margorP avaJ
อัลกอริทึม
ขั้นตอนที่ 1 - เริ่มต้น ขั้นตอนที่ 2 - ประกาศตัวแปรสตริง 2 ตัว คือ input_string และ result ตัวแปร Stack ชื่อ stack และตัวแปร char ชื่อ reverse ขั้นตอนที่ 3 - กำหนดค่าให้กับตัวแปรต่างๆ ขั้นตอนที่ 4 - วนลูปผ่านอักขระแต่ละตัวของสตริงโดยใช้ for-loop และ push อักขระแต่ละตัวเข้า Stack ด้วยคำสั่ง 'push' ขั้นตอนที่ 5 - Pop ออกมาจาก Stack ทีละตัวด้วยคำสั่ง 'pop' และนำไปต่อท้ายกันในตัวแปร result ขั้นตอนที่ 6 - แสดงผลลัพธ์ ขั้นตอนที่ 7 - จบการทำงาน
ตัวอย่างที่ 1: เขียนโค้ดทั้งหมดในฟังก์ชัน main
import java.util.*;
public class ReverseString {
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String input_string = "Java Program";
System.out.println("The string is defined as " + input_string);
char[] reverse = new char[input_string.length()];
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < input_string.length(); i++) {
stack.push(input_string.charAt(i));
}
int i = 0;
while (!stack.isEmpty()) {
reverse[i++] = stack.pop();
}
String result = new String(reverse);
System.out.println("\nThe reversed string is: " + result);
}
}
ผลลัพธ์
Required packages have been imported The string is defined as Java Program The reversed string is: margorP avaJ
ตัวอย่างที่ 2: ใช้ฟังก์ชันแยก (Object-Oriented Style)
import java.util.*;
public class ReverseString {
public static String reverse_string(String input_string) {
char[] reverse = new char[input_string.length()];
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < input_string.length(); i++) {
stack.push(input_string.charAt(i));
}
int i = 0;
while (!stack.isEmpty()) {
reverse[i++] = stack.pop();
}
return new String(reverse);
}
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String input_string = "Java Program";
System.out.println("The string is defined as " + input_string);
System.out.println("\nThe reversed string is: " + reverse_string(input_string));
}
}
ผลลัพธ์
Required packages have been imported The string is defined as Java Program The reversed string is: margorP avaJ