Park-Kachen
28 กรกฎาคม 2552
DTS05-22-07-2552
Doubly Linked list
Doubly linked list ประกอบด้วยส่วนของ Info และ พอยน์เตอร์ที่ชี้ไป 2 ทิศทาง คือ ชี้ไปยังโหนดถัดไป และชี้ไปยังโหนดก่อนหน้า ดังนั้นเราจึงสามารถทำการอ่านข้อมูลได้ 2 วิธี คือ การอ่านไปข้างหน้า และอ่านไปทางข้างหลัง
การเพิ่มข้อมูลใน doubly linked list
การเพิ่มข้อมูลใน doubly linked list จะแตกต่างจาก Singly Linked list คือ สามารถเพิ่มโหนดให้อยู่หน้าโหนดที่ระบุได
ตัวอย่างการเพิ่มข้อมูล node (Q) ให้อยู่หน้า node (P)
สแตค (Stack
20 กรกฎาคม 2552
DTS04-15-07-2552
การสร้างอะเรย์ของสตริง สามารถทำได้ทั้งแบบที่กำหนดตัวแปรและแบบที่ให้ค่าเริ่มต้น จะสร้างเมื่อสตริงมีจำนวนมาก เพื่อช่วยให้เขียนโปรแกรมได้สะดวกขึ้น
ARAY ของสตริงที่ยาวไม่เท่ากัน ทำได้เฉพาะเมื่อมีการกำหนดค่าเริ่มต้นเท่านั้น
ตัวอย่าง code
ผลการรันโปรแกรม
Data structure
English
Programming
Photoshop
Systems Analysis
Olive
Mango
Apple
Linked Lists
ลิงค์ลิสต์เป็นการจัดเก็บชุดข้อมูลเชื่อมโยงต่อเนื่องกันไปตามลำดับ ซึ่งอาจอยู่ในลักษณะแบบเชิงเส้นตรง (linear) หรือ ไม่เป็นเส้นตรง (nonlinear) ก็ได้ ซึ่งในลิสต์จะประกอบไปด้วยข้อมูลที่เรียกว่าโหนด (node) ในหนึ่งโหนดจะประกอบด้วยส่วนของข้อมูลที่ต้องการจัดเก็บ เรียกว่าส่วน Info และส่วนที่เป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป (Link) หรือชี้ไปยังโหนดอื่นๆที่อยู่ในลิสต์ หากไม่มีโหนดที่อยู่ถัดไป ส่วนที่เป็นพอยน์เตอร์หรือ Link จะเก็บค่า NULL หรือ NILL ใช้สัญลักษณ์ ^
วิธีสร้าง Linked list คือการนำข้อมูลที่จะจัดเก็บเข้า Linked list เพิ่มตรงโหนดตำแหน่งสุดท้ายของลิสต์ ฉะนั้นจึงต้องมี External พอยน์เตอร์ที่คอยชี้โหนดสุดท้ายของลิสต์ ในที่นี้ใช้ L (Last) ตัวอย่างการสร้าง Linked list จากลิสต์ L = 21 , 5 , 14เริ่มจากการให้ H ชี้ทิ่โหนดตำแหน่งแรก และ L ชี้ทิ่โหนดตำแหน่งสุดท้าย
ข้อมูล 5 เข้าไปใน list , L ชี้ไปยังโหนดที่เก็บข้อมูล 5
เพิ่มข้อมูล 14 เข้าไปใน list , L ชี้ไปยังโหนดที่เก็บข้อมูล 14
การเพิ่มและลบข้อมูลใน Linked list
การเพิ่มข้อมูลที่ต้น list
จากรูป จะเพิ่ม NODE(tmp) ลงใน linked list โดยมีขั้นตอนคือ
tmp = new ListNode();
tmp.element = 12;
tmp.next = current.next;
การเพิ่มข้อมูลโดยแทรกลงในลิสต์
การเพิ่มข้อมูลจะทำการแทรกโหนด New หลังโหนด P
ตัวอย่าง ทำการเพิ่มข้อมูลโหนด 16 ระหว่างโหนด 21 และ 5
จากรูปมีขั้นตอนดังนี้
tmp = new ListNode();
tmp.element = 16;
tmp.next = current.next;
current.next = tmp
การลบข้อมูลใน Linked list
การลบข้อมูลที่ต้น list
เนื่องจากขั้นตอนของการลบข้อมูลที่ header นั้นจะมีปัญหาที่ยุ่งยากกว่าเมื่อ design ด้วย oop(java) เราสามารถที่จะแก้ปัญหานี้ได้โดยการใส่ header node ที่ว่าง ๆ ไว้ข้างหน้าของ linked list เพื่อที่จะทำหน้าที่เป็นชี้ว่าเป็นหัวโหนดโดยที่ไม่ต้องมี pointer คอยชี้ที่ header และเมื่อเราต้องการที่จะเปลี่ยนแปลงข้อมูลใด ๆ บนหัวสามารถที่จะทำได้โดยการแทรก node เข้าไปดังตัวอย่างของการแทรกข้อมูลข้างล่าง
จากรูปมีขั้นตอนดังนี้
tmp.next = tmp.next.next
13 กรกฎาคม 2552
DTS03-01-07-2552
การกำหนดตัวแปร Pointer จะคล้ายกับการกำหนดตัวแปรชนิดต่างๆ เพียงแต่ต้องมีเครื่องหมาย * หน้าชื่อตัวแปร ดังนี้
int *pt;
ในเรื่อง Pointer มีเครื่องหมาย 2 ชนิด คือ * และ & เครื่องหมาย * จะให้ค่า ของข้อมูล ซึ่งเก็บอยู่ใน Address โดย Address นี้เก็บ อยู่ในตัวแปร Pointer ซึ่งอยู่หลังเครื่องหมาย * สำหรับเครื่องหมาย & จะให้ค่า Address ของตัวแปรซึ่งอยูหลังเครื่องหมาย & ดังตัวอย่าง
การประกาศตัวแปรPointer
ต้องมีระบุตัวดำเนินการ (Operator) เพื่อบอกว่าตัวแปรดังกล่าวเป็นตัวแปรแบบตัวชี้ โดยตัวดำเนินการที่ใช้คือ * และ & เช่น จะประกาศตัวแปรชนิดPointer คือ int *countPtr; ในที่นี้หมายถึง ตัวแปร countPtr ถูกประกาศให้เป็นตัวแปรชนิด Pointer และทำหน้าที่ชี้ (เก็บ Address) ไปยังตำแหน่งที่เก็บค่าจำนวนเต็ม(เป็นชนิดเดียวกับที่เราประกาศไว้ ในที่นี้คือ Integer)
ตัวอย่าง code
int x = 10;
int *xPtr;
xPtr = &x; //ชี้ไปยังตำแหน่ง x
จะได้ว่า
หมายความว่า : Pointer xPtr ชี้ไปยังตำแหน่งเดียวกับ ตัวแปร x ซึ่งเก็บค่า 10 ไว้
pointer กับ array
pointer และ array มันถูกนำมาอธิบายไว้ด้วยกัน เพราะ pointer กับ array มีหลายอย่างที่คล้ายๆ กัน และอันที่จริงเราสามารถสร้าง array จาก pointer ได้ ซึ่งแม้จะมีข้อเสียที่ใช้งานได้ยากกว่า แต่ก็มีข้อดีที่ทำงานได้เร็วกว่าPointer และ array มักถูกนำมาใช้ร่วมกันอยู่เสมอเนื่องจาก array เป็นข้อมูลในหน่วยความจำที่เรียงติดกันไป เราจึงอาจใช้ pointer เพื่อวนเข้าถึงข้อมูลเหล่านั้น ดังโค้ดต่อไปนี้ จะเห็นได้ว่าการใช้ pointer เข้าถึงข้อมูลใน array (array element) โดยตอนแรกเราสร้าง array ชื่อ myArray จากนั้นสร้าง pointer ที่ชี้ไปยัง array ชื่อ ptArray คำสั่ง fixed ทำหน้าที่ตั้งให้ pointer ชี้ไปยังตัวแปรแบบ managed และตรึงค่าของตัวแปรไว้ไม่ให้เปลี่ยนตำแหน่งระหว่างโปรแกรมทำงาน
ผลลัพธ์เมื่อโปรแกรมทำงานคือ 1234