วันพฤหัสบดีที่ 15 ตุลาคม พ.ศ. 2552

ลูกแรดเตรียมพร้อมล่าเหยื่อ

สิ่งที่ได้รับจากการเรียนวิชาเตรียมฝึกประสบการณวิชาชีพ 3

  1. ได้เรียนรู้การทำงานอย่างมีระบบแบบแผน
  2. ได้เรียนรู้การทำงานเป็นทีม
  3. ได้รู้จักการมีระเบียบวินัยในการทำงาน
  4. มีความรับผิดชอบในงานที่ได้รับมอบหมาย
  5. สามารถนำไปประยุกต์ใช้ชีวิตประจำวัน ได้เป็นอย่างดี

วันพฤหัสบดีที่ 24 กันยายน พ.ศ. 2552

DTS11/08-09-2009

เรื่อง.. Sorting
การเรียงลำดับ (sorting) เป็นการจัดให้เป็นระเบียบมีแบบแผน ช่วยให้การค้นหาสิ่งของหรือข้อมูล ซึ่งสามารถกระทำได้อย่างรวดเร็วและมีประสิทธิภาพ
การเรียงลำดับอย่างมีประสิทธิภาพ
หลักเกณฑ์ในการพิจารณาเพื่อเลือกวิธีการเรียงลำดับที่ดีและเหมาะสมกับระบบงาน เพื่อให้มีประสทิธิภาพในการทำงานสูงสุด
1.เวลาและแรงงานที่ต้องใช้ในการเขียนโปรแกรม
2.เวลาที่เครื่องคอมพิวเตอร์ต้องใช้ในการทำงานตามโปรแกรมที่เขียน
3.จำนวนเนื้อที่ในหน่วยความจำหลักมีเพียงพอหรือไม่
วิธีการเรียงลำดับ
1. การเรียงลำดับแบบภายใน(internal sorting) เป็นการเรียงลำดับที่ข้อมูลทั้งหมดต้องอยู่ในหน่วยควมจำหลัก
2. การเรียงลำดับแบบภายนอก(external sorting) เป็นการเรียงลำดับข้อมูลที่เก็บอยู่ในหน่วยความจำรอง
การเรียงลำดับแบบเลือก (selection sort)
ข้อมูลจะอยู่ทีละตัว โดยทำการค้นหาข้อมูลในแต่ละรอบแบบเรียงลำดับ ถ้าเป็นการเรียงลำดับจากน้อยไปมาก
1.ในรอบแรกจะทำการค้นหาข้อมูลตัวที่มีค่าน้อยที่สุดมาเก็บไว้ที่ตำแหน่งที่ 1
2.ในรอบที่สองนำข้อมูลตัวที่มีค่าน้อยรองลงมาไปเก็บไว้ที่ตำแหน่งที่สอง
3.ทำแบบนี้ไปเรื่อยๆ จนครบทุกค่า ในที่สุดจะได้ข้อมูลเรียงลำดับจากน้อยไปมากตามที่ต้องการ
** การจัดเรียงลำดับแบบเลือกเป็นวิธีที่ง่ายและตรงไปตรงมา แต่มีข้อเสียตรงที่ใช้เวลาในการจัดเรียงนาน เพราะแต่ละรอบต้องเปรียบเอียบกับข้อมูลทุกตัว
การเรียงลำดับแบบฟอง (Bubble Sort)
เป็นวิธีการเรียงลำดับที่มีการเปรียบเทียบข้อมูลในตำแหน่งที่อยู่ติดกัน1.ถ้าข้อมูลทั้งสองไม่อยู่ในลำดับที่ถูกต้องให้สลับตำแหน่งที่อยู่กัน2.ถ้าเป็นการเรียงลำดับจากน้อยไปมากให้นำข้อมูลตัวที่มีค่าน้อยกว่าอยู่ในตำแหน่งก่อนข้อมูลที่มีค่ามาก ถ้าเป็นการเรียงลำดับจากมากไปน้อยให้นำข้อมูล ตัวที่มีค่ามากกว่าอยู่ในตำแหน่งก่อนข้อมูลที่มีค่าน้อยการจัดเรียงลำดับแบบฟองเป็นวิธีที่ไม่ซับซ้อนมาก เป็นวิธีการเรียงลำดับที่นิยมใช้กันมากเพราะมีรูปแบบที่เข้าใจง่าย

DTS 10-01/09/2009

เรื่อง.. กราฟ ( Graph )
(Graph) เป็นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้น อีกชนิดหนึ่ง กราฟเป็นโครงสร้างข้อมูลที่มีการนำไปใช้ในงานที่เกี่ยวข้องกับการแก้ปัญหาที่ค่อนข้างซับซ้อนนิยามของกราฟ
กราฟ เป็นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้นที่ประกอบ ด้วยกลุ่มของสิ่งสองสิ่งคือ
(1) โหนด (Nodes) หรือ เวอร์เทกซ์(Vertexes)
(2) เส้นเชื่อมระหว่างโหนด เรียก เอ็จ (Edges)
- กราฟที่มีเอ็จเชื่อมระหว่างโหนดสองโหนด ถ้าเอ็จไม่มีลำดับ ความสัมพันธ์จะเรียกกราฟนั้นว่า กราฟแบบไม่มีทิศทาง
- ถ้ากราฟมีเอ็จที่มีลำดับความสัมพันธ์หรือมีทิศทางกำกับด้วยเรียกกราฟว่า กราฟแบบมีทิศทาง บางครั้งเรียกว่า ไดกราฟ
- การเขียนกราฟแสดงโหนดและเส้นเชื่อมความสัมพันธ์ระหว่างโหนดไม่มีรูปแบบที่ตายตัว
- เขียนกราฟเพื่อแสดงให้เห็นความสัมพันธ์ของสิ่งที่สนใจแทนโหนดด้วยจุด (pointes) หรือวงกลม (circles) ที่มีชื่อหรือข้อมูลกำกับ
ลักษณะของกราฟ
- กราฟที่มีลักษณะต่อเนื่อง (Connected) เป็นกราฟที่มีเส้นทางเชื่อมจากโหนดใดๆ ไปยังโหนดอื่นเสมอ
- กราฟที่มีลักษณะเป็นวิถี (Path) มีเส้นเชื่อมไปยังโหนดต่างๆ อย่างเป็นลำดับ โดยแต่ละโหนดจะเป็นโหนดที่ใกล้กันกับโหนดที่อยู่ถัดไป
- กราฟที่เป็นวัฎจักร (Cycle) ต้องมีอย่างน้อย 3 โหนด ที่โหนดสุดท้ายต้องเชื่อมกับโหนดแรก
- กราฟที่มีลักษณะไม่ต่อเนื่อง (Disconnected) ไม่มีเส้นทางเชื่อมจากโหนด 3 ไปยังโหนดอื่นเลย
- กราฟแบบมีทิศทาง เป็นเซตแบบจำกัดของโหนดและเอ็จ โดยเซตจะว่างไม่มีโหนดหรือเอ็จเลยเป็นกราฟว่าง (Empty Graph)รูปแบบของกราฟแบบมีทิศทางเหมือนกับรูปแบบของกราฟไม่มีทิศทาง ต่างกันตรงที่กราฟแบนี้จะทิศทางกำกับด้วยเท่านั้น
การแทนกราฟในหน่วยความจำ
สิ่งที่ต้องจัดเก็บ จากกราฟทั่วไป คือ เอ็จ เป็นเส้นเชื่อมระหว่างโหนดสองโหนด มีวิธีเก็บหลายวิธี แต่วิธีที่ง่าย คือ การเก็บเอ็จในแถวลำดับ 2 มิติ แต่จะค่อนข้างเปลืองเนื้องที่ เพราะมีบางเอ็จที่เก็บซ้ำ แก้ไขปัญหานี้โดยใช้แถวลำดับ 2 มิติเก็บโหนด และพอยเตอร์ชี้ไปยังตำแหน่งของโหนดที่สัมพันธ์ และใช้แถวลำดับ 1 มิติเก็บโหนดต่างๆ ที่สัมพันธ์กับโหนดในแถวลำดับ 2 มิติ การใช้วิธีนี้ไม่เหมาะกับกราฟที่มีการเปลี่ยนแปลงตลอดเวลา กราฟที่มีการเปลี่ยนแปลงตลอดเวลาอาจจะใช้วิธีแอดจาเซนซีลิสต์ คล้ายกับวิธีจัดเก็บกราฟแต่ต่างกัยตรงที่ใช้ลิงค์ลิสต์แทนเพื่อความสะดวกในการเปลี่ยนแปลงแก้ไข
การท่องไปในกราฟ (Graph traversal) คือ การเข้าไปเยือนโหนดในกราฟ หลักการทำงาน คือ แต่ละโหนดจะถูกเยือนเพียงครั้งเดียว
เทคนิคการท่องไปในกราฟมี 2 แบบ คือ
1.การท่องแบบกว้าง (Breadth First Traversal) โดยเลือกโหนดที่เป็นจุดเริ่มต้น ต่อมาให้เยือนโหนดอื่นที่ใกล้กันกับโหนดเริ่มต้นที่ละระดับ จนเยือนหมดทุกโหนดในกราฟ (แบบคิว)
2.การท่องแบบลึก (Depth First Traversal) คล้ายกับการท่องทีละระดับของทรี กำหนดเริ่มต้นที่โหนดแรกและเยือนโหนดถัดไปตามแนววิถีจนไปสู่ปลายวิถี จากนั้นย้อนกลับ (backtrack) ตามแนววิถีเดิม จนสามารถดำเนินการต่อเนื่องเข้าสู่แนววิถีอื่นๆ เพื่อเยือนโหนดอื่นๆ ต่อไปจนครบทุกโหนด (แบบสแตก)

วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2552

DTS 09-24/08/2009

เรื่อง ทรี (Tree)

ทรี (Tree) เป็นโครงสร้างข้อมูลไม่เชิงเส้น โดยจะมีการเรียงข้อมูลลดหลั่งลงเป็นลำดับๆไปส่วนมากจะใช้ให้เห็นถึงความสำคัญข้อมูลว่าอันไหนสำคัญกว่าเเละอันไหนรองๆลงมา

ชื่อเรียกของโหนด
  • จะมีการเีรียงข้อมูลโดยข้อมูลที่อยู่ในระดับสูงสุดจะเรียกว่า โหนดราก
  • รองลงมาจะเป็นโหนดเเม่
  • ข้อมูลที่ออกมาจากโหนดเเม่ คือ โหนดลูก
  • โหนดที่มีเเม่เป็นโหนดเดียวกัน เรียกว่าโหนดพี่น้อง
  • โหนดที่ไม่มีลูกคือ โหนดใบ
  • เส้นที่ลากเเสดงความสัมพันธ์คือ กิ่ง

นิยามของทรี

1.เป็นนิยามเเบบกราฟ

-ทรีคือ กราฟที่จะไม่มีวงจรปิดจำนวนโหนดทั้งหมด เท่ากับZ กิ่งของโหนดก็จะเท่ากับ Z-1 เสมอ

2. นิยามทรีด้วยรูปแบบรีเคอร์ซีฟ

-ทรีประกอบด้วยสมาชิกที่เรียกว่าโหนด ถ้าเป็นโหนดว่างคือนัลทรี เเละโหนดที่ออกมาจากโหนดราก คือ ทรีย่อย

นิยามที่เกี่ยวกับทรี

1. ฟอร์เรสต์ (Forest) คือ กลุ่มของทรีที่มีโหนดรากเเละย่อยๆออกมา

2. ทรีที่มีแบบแผน (Ordered Tree) คือ ทรีที่โหนดมีความสัมพันธ์ที่แน่นอนหรือมีเเบบเเผนนั้นเอง

3. ทรีคล้าย (Similar Tree) คือ ทรีที่มีโครงสร้างเหมือนเเต่ข้อมูลไม่เหมือนกัน

4. ทรีเหมือน (Equivalent Tree) คือ ทรีที่เหมือนกันโดยสมบูรณ์ ทั้งข้อมูลทั้งโครงสร้าง

5. กำลัง (Degree) คือ จำนวนทรีย่อยของโหนด

6. ระดับของโหนด (Level of Node) คือ การเเบ่งระดับของทรีเป็นชั้นๆเช่นโหนดรากคือระดับ1โหนดเเม่ระดับ 2 เป็นต้น

การเเทนที่ในหน่วยความจำมี 2 แบบ คือ

1. โหนดแต่ละโหนดเก็บพอยเตอร์ชี้ไปยังโหนดลูกทุกโหนด การแทนที่ทรีด้วยวิธีนี้ จะให้จำนวนฟิลด์ในแต่ละโหนดเท่ากันโดยกำหนดให้มีขนาดเท่ากับจำนวนโหนดลูกของโหนดที่มีลูกมากที่สุด

2.เเบบไบนารีทรี คือเเต่ละโหนดจะมีลิงค์เเค่2ลิงค์เท่านั้น

DTS 08-11/08/2009

เรื่อง คิว (Queue)


คิว (Queue) เป็นโครงสร้างข้อมูลแบบเชิงเส้นหรือลิเนียร์ลิสต์ซึ่งการเพิ่มข้อมูลจะกระทำที่ปลายข้างหนึ่งซึ่ง
เรียกว่าส่วนท้ายหรือเรียร์ (rear) และการนำข้อมูลออกจะกระทำที่ปลายอีกข้างหนึ่งซึ่งเรียกว่า ส่วนหน้า หรือฟรอนต์ (front) ลักษณะการทำงานของคิวเป็นลักษณะของการเข้าก่อนออกก่อนหรือที่เรียกว่า FIFO (First In First Out)



การทำงานของคิว
การใส่สมาชิกตัวใหม่ลงในคิว เรียกว่า Enqueue ซึ่งมีรูปแบบคือ enqueue (queue, newElement) หมายถึง การใส่ข้อมูล newElement ลงไปที่ส่วนเรียร์ของคิว

การนำสมาชิกออกจากคิว เรียกว่า Dequeue ซึ่งมีรูปแบบคือ dequeue (queue, element) หมายถึง การนำออกจากส่วนหน้าของคิวและให้ ข้อมูลนั้นกับ element

การทำงานของคิวโดยพื้นฐาน
1. การใส่สมาชิกตัวใหม่ลงในคิวเรียกว่า E
2. การนำสมาชิกออกจากคิว เรียกว่าDequeue
3. การนำข้อมูลที่อยู่ตอนต้นของคิวมาแสดงจะเรียกว่า Queue Frontแต่จะไม่ทำการเอาข้อมูลออกจากคิว
4. การนำข้อมูลที่อยู่ตอนท้ายของคิวมาแสดงจะ เรียกว่าQueue Rear แต่จะไม่ทำการเพิ่มข้อมูลเข้าไปในคิว




ตัวดำเนินการเกี่ยวกับคิว มีลักษณะคล้ายของสแตกมาก ดังนี้
1. Create Queue คือการ สร้างคิว มีผลคือได้คิวว่าง
2. Enqueue คือการเพิ่มสมาชิกลงไป
3. Dequeue คือการนำสมาชิกออกมา
4. Queue Front คือการนำส่วนของฟรอนด์ ออกมาเเสดงโดยไม่เอาข้อมูลออกมา
5. Queue Rear คือการนำข้อมูลส่วนเรียร์มาเเสดงเเต่ไม่เอาเข้ามูลเข้ามา
6. Empty Queue คือการตรวจสอบว่าคิวว่างหรือไม่ ถ้าเราเห้นว่าคิวว่างเเล้วยังจะลบข้อมูลอีกก็จะเกิดข้อ
ผิดพลาดที่เรียกว่า underflow
7. Full Queue คือการตรวจสอบว่าคิวเต็มหรือไม่ ถ้าตรวจสอบเเล้วคิวเต็มเเล้วเรายังจะเพิ่มข้อมูลเ้ข้าไป คิวจะเกิดข้อผิดพลาดที่เรียกว่าoverflow
8. Queue Count คือการนับจำนวนสมาชิกในคิว
9. Destroy Queue คือการล้างคิวทั้งหมด เหมือนลบทิ้งไป โดยจะได้คิวว่างมาเป็นผลลัพย์

วันจันทร์ที่ 10 สิงหาคม พ.ศ. 2552

DTS 06-04/08/2009

Lecture 4 : เรื่อง Stack


สแตก (Stack) เป็นโครงสร้างข้อมูลที่ข้อมูลแบบลิเนียร์ลิสต์ ที่มีคุณสมบัติที่ว่า การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ ปลายข้างเดียวกัน ซึ่งเรียกว่า Top ของสแตก (TopOf Stack) และ ลักษณะที่สำคัญของสแตก คือ ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จากสแตกเป็นลำดับแรกสุด เรียกคุณสมบัตินี้ว่า LIFO (Last In First Out)

การดำเนินงานพื้นฐานของสแตกการทำงานต่าง ๆ ของสแตกจะกระทำที่ปลายข้างหนึ่งของ สแตกเท่านั้น ดังนั้นจะต้องมีตัวชี้ตำแหน่งข้อมูลบนสุดของสแตกด้วยการทำงานของสแตกจะประกอบด้วยกระบวนการ 3 กระบวนการที่สำคัญ คือ

1.Push คือ การนำข้อมูลใส่ลงไปในสแตก เช่น สแตก s ต้องการใส่ข้อมูล i ในสแตก จะได้ push (s,i) คือ ใส่ข้อมูล i ลงไปที่ทอปของสแตก s ในการเพิ่มข้อมูลลงในสแตก จะต้องทำการตรวจสอบว่าสแตก เต็มหรือไม่ ถ้าไม่เต็มก็สามารถเพิ่มข้อมูลลงไปในสแตกได้ แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ที่ตำแหน่งข้อมูลใหม่ ถ้าส
แตกเต็ม (Stack Overflow) ก็จะไม่สามารถเพิ่มข้อมูลเข้าไปในสแตกได้อีก

2. Pop คือ การนำข้อมูลออกจากส่วนบนสุดของสแตก เช่น ต้องการนำข้อมูลออกจากสแตก sไปไว้ที่ตัวแปร i จะได้ i = pop (s)
การนำข้อมูลออกจากสแตก ถ้าสแตกมีสมาชิกเพียง 1 ตัว แล้วนำสมาชิกออกจากสแตก จะเกิดสภาวะสแตก
ว่าง (Stack Empty) คือ ไม่มีสมาชิกอยู่ในสแตกเลย

แต่ถ้าไม่มีสมาชิกในสแตก แล้วทำการ pop สแตก จะทำให้ เกิดความผิดพลาดที่เรียกว่า Stack Underflowเพราะฉะนั้นก่อนนำข้อมูลออกจากสแตกจะต้องตรวจสอบ ก่อนว่าสแตกว่างหรือเปล่า จึงจะนำข้อมูลออกจากสแตกได้และ ปรับตัวชี้ตำแหน่งให้ไปชี้ตำแหน่งของข้อมูลที่ต่อจากข้อมูลที่ถูกนำ ออกไป

การแทนที่ข้อมูลของสแตก :
การแทนที่ข้อมูลของสแตกสามารถทำได้ 2 วิธี คือ
1. การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์

การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์จะประกอบไปด้วย 2 ส่วน คือ
1. Head Node จะประกอบไปด้วย 2 ส่วนคือ top pointer และจำนวนสมาชิกในสแตก
2. Data Node จะประกอบไปด้วยข้อมูล (Data) และพอยเตอร์ ที่ชี้ไปยังข้อมูล

การดำเนินการเกี่ยวกับสแตก :
การดำเนินการเกี่ยวกับสแตก ได้แก่
1. Create Stack 5. Empty Stack
2. Push Stack 6. Full Stack
3. Pop Stack 7. Stack Count
4. Stack Top 8. Destroy Stack

3. Pop Stack การนำข้อมูลบนสุดออกจากสแตก

4. Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก โดยไม่มีการลบข้อมูลออกจากสแตก

5. Empty Stack เป็นการตรวจสอบการว่างของสแตก เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลออกจากสแตกที่ เรียกว่า " Stack Underflow "

6. Full Stack เป็นการตรวจสอบว่าสแตกเต็มหรือไม่ เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลเข้าสแตกที่เรียกว่า " Stack Overflow "

7. Stack Count เป็นการนับจำนวนสมาชิกในสแตก

8. Destroy Stack เป็นการลบข้อมูลทั้งหมดที่อยู่ในสแตก
2. การแทนที่ข้อมูลของสแตกแบบอะเรย์

การดำเนินการเกี่ยวกับสแตก :
การดำเนินการเกี่ยวกับสแตก ได้แก่
1. Create Stack 5. Empty Stack
2. Push Stack 6. Full Stack
3. Pop Stack 7. Stack Count
4. Stack Top 8. Destroy Stack

การประยุกต์ใช้สแตก :
การประยุกต์ใช้สแตก จะใช้ในงานด้านปฏิบัติการของเครื่องคอมพิวเตอร์ที่ขั้นตอนการทำงานต้องการเก็บข่าวสารอันดับแรกสุดไว้ใช้หลังสุด เช่น การทำงานของโปรแกรมแปลภาษานำไปใช้ในเรื่องของการโปรแกรมที่เรียกใช้โปรแกรมย่อย การคำนวณนิพจน์ทางคณิตศาสตร์ และรีเคอร์ชั่น (Recursion)

ขั้นตอนการแปลงจากนิพจน์ Infix เป็นนิพจน์ :
Postfix ..
1. อ่านอักขระในนิพจน์ Infix เข้ามาทีละตัว
2. ถ้าเป็นตัวถูกดำเนินการจะถูกย้ายไปเป็นตัวอักษรในนิพจน์ Postfix
3. ถ้าเป็นตัวดำเนินการ จะนำค่าลำดับความสำคัญของตัว ดำเนินการที่อ่านเข้ามาเทียบกับค่าลำดับความสำคัญของตัวดำเนินการที่อยู่บนสุดของสแตก
4. ตัวดำเนินการที่เป็นวงเล็บปิด “)” จะไม่ push ลงในสแตกแต่มีผลให้ตัวดำเนินการอื่น ๆ ถูก pop ออกจากสแตกนำไป เรียงต่อกันในนิพจน์ Postfix จนกว่าจะเจอ “(” จะ pop วงเล็บเปิดออกจากสแตกแต่ไม่นำไปเรียงต่อ
5. เมื่อทำการอ่านตัวอักษรในนิพจน์ Infix หมดแล้ว ให้ทำการ Pop ตัวดำเนินการทุกตัวในสแตกนำมาเรียงต่อในนิพจน์ Postfix

วันอาทิตย์ที่ 2 สิงหาคม พ.ศ. 2552

DTS 05-28/07/2009


Lecture 7 : เรื่อง Linked List

ลิงค์ลิสต์ (Linked List) เป็นวิธีการเก็บข้อมูลอย่างต่อเนื่องของอิลิเมนต์ต่าง ๆ โดยมีพอยเตอร์เป็นตัวเชื่อมต่อแต่ละอิลิเมนท์ เรียกว่าโนด (Node) ซึ่งในแต่ละโนดจะประกอบไปด้วย 2 ส่วน คือData จะเก็บข้อมูลของอิลิเมนท์ และส่วนที่สอง คือ Link Field จะทำหน้าที่เก็บตำแหน่งของโนดต่อไปในลิสต์
ในส่วนของ data อาจจะเป็นรายการเดี่ยวหรือเป็นเรคคอร์ดก็ได้ในส่วนของ link จะเป็นส่วนที่เก็บตำแหน่งของโหนดถัดไป ในโหนดสุดท้ายจะเก็บค่า Nullซึ่งไม่ได้ชี้ไปยังตำแหน่งใด ๆ เป็นตัวบอกการสิ้นสุดของลิสต์

ในลิงค์ลิสต์จะมีตัวแปรสำหรับชี้ตำแหน่งลิสต์ (List pointer variable) ซึ่งเป็นที่เก็บตำแหน่งเริ่มต้นของลิสต์ ซึ่งก็คือ : โหนดแรกของลิสต์นั่นเอง ถ้าลิสต์ไม่มีข้อมูล ข้อมูลในโหนดแรกของลิสต์จะเป็น Null



โครงสร้างข้อมูลแบบลิงค์ลิสต์ : จะแบ่งเป็น 2 ส่วน คือ

1. Head Structure จะประกอบไปด้วย 3 ส่วน ได้แก่
- จำนวนโหนดในลิสต์ (Count)
-พอยเตอร์ที่ชี้ไปยังโหนดที่เข้าถึง (Pos)
-พอยเตอร์ที่ชี้ไปยังโหนดข้อมูลแรกของลิสต์ (Head)

2. Data Node Structure จะประกอบไปด้วยข้อมูล(Data) และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป

กระบวนงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน :
1. กระบวนงาน Create List

หน้าที่ : สร้างลิสต์ว่าง
ผลลัพธ์ : ลิสต์ว่าง


2. กระบวนงาน Insert Node

หน้าที่ : เพิ่มข้อมูลลงไปในลิสต์บริเวณตำแหน่งที่ต้องการ
ข้อมูลนำเข้า : ลิสต์ ข้อมูล และตำแหน่ง
ผลลัพธ์ : ลิสต์ที่มีการเปลี่ยนแปลง

3. กระบวนงาน Delete Node

หน้าที่ : ลบสมาชิกในลิสต์บริเวณตำแหน่งที่ต้องการ
ข้อมูลนำเข้า : ข้อมูลและตำแหน่ง
ผลลัพธ์ : ลิสต์ที่มีการเปลี่ยนแปลง

4. กระบวนงาน Search list

หน้าที่ : ค้นหาข้อมูลในลิสต์ที่ต้องการ
ข้อมูล : นำเข้าลิสต์
ผลลัพธ์ : ค่าจริงถ้าพบข้อมูล ค่าเท็จถ้าไม่พบข้อมูล

5. กระบวนงาน Traverse

หน้าที่ : ท่องไปในลิสต์เพื่อเข้าถึงและ
ประมวลผล : ข้อมูลนำเข้าลิสต์
ผลลัพธ์ : ขึ้นกับการประมวลผล เช่น เปลี่ยนแปลงค่าใน node ,
รวมฟิลด์ในลิสต์ ,คำนวณค่าเฉลี่ยของฟิลด์ เป็นต้น

6. กระบวนงาน Retrieve Node

หน้าที่ : หาตำแหน่งข้อมูลจากลิสต์
ข้อมูล : นำเข้าลิสต์
ผลลัพธ์ : ตำแหน่งข้อมูลที่อยู่ในลิสต์

7. ฟังก์ชั่น EmptyList

หน้าที่ : ทดสอบว่าลิสต์ว่างข้อมูลนำเข้า ลิสต์
ผลลัพธ์ : เป็นจริง ถ้าลิสต์ว่าง
เป็นเท็จ : ถ้าลิสต์ไม่ว่าง

8. ฟังก์ชั่น FullList

หน้าที่ : ทดสอบว่าลิสต์เต็มหรือไม่ข้อมูล
นำเข้า : ลิสต์
ผลลัพธ์ : เป็นจริง ถ้าหน่วยความจำเต็ม
เป็นเท็จ : ถ้าสามารถมีโหนดอื่น

9. ฟังก์ชั่น list count

หน้าที่ : นับจำนวนข้อมูลที่อยู่ในลิสต์
ข้อมูลนำ : เข้าลิสต์
ผลลัพธ์ : จำนวนข้อมูลที่อยู่ในลิสต์

Algorithm listCount (val pList )
Pre pList is a pointer to a valid list head structure
Return count for number of node in list
1. Return (pList->count)
End listCount

10. กระบวนงาน destroy list

หน้าที่ : ทำลายลิสต์
ข้อมูลนำเข้า : ลิสต์
ผลลัพธ์ : ไม่มีลิสต์

Linked List แบบซับซ้อน :

1. Circular Linked List เป็นลิงค์ลิสต์ที่สมาชิกตัวสุดท้ายมีตัวชี้ (list) ชี้ไปที่สมาชิกตัวแรกของลิงค์ลิสต์ จะมีการทำงานไปในทิศทางเดียวเท่านั้นคือเป็นแบบวงกลม

2. Double Linked List เป็นลิงค์ลิสต์ที่มีทิศทางการทำงานแบบ 2 ทิศทาง ในลิงค์ลิสต์แบบ 2 ทิศทาง ส่วนข้อมูลจะมีตัวชี้ไปที่ข้อมูล
ก่อนหน้า (backward pointer)
และตัวชี้ข้อมูลถัดไป (forward pointer)

วันจันทร์ที่ 20 กรกฎาคม พ.ศ. 2552

DTS 04-20/07/2009

Lecture 3
เรื่อง Set and String



โครงสร้างข้อมูลแบบเซ็ต
เป็นโครงสร้างข้อมูลที่ข้อมูลแต่ละตัวไม่มี ความสัมพันธ์กัน ในภาษาซี จะไม่มีประเภทข้อมูลแบบเซ็ตนี้เหมือนกับในภาษาปาสคาล แต่สามารถใช้หลักการของการดำเนินงานแบบเซ็ตมาใช้ได้

ตัวดำเนินการของเซ็ต (Set operators) ประกอบด้วย
- set intersection
- set union
- set difference เป็นต้น


สมมติว่า ต้องการจัดตารางเรียน 4 วิชา ได้แก่ Math, English,Physics และ Chemistry ให้กับผู้ลงทะเบียนเรียน

วิธีการแก้ปัญหาเบื้องต้น
- จะต้องกำหนดเซ็ตของผู้เรียนที่ลงทะเบียนเรียนในแต่ละวิชา
- นำเซ็ตดังกล่าวที่ได้มาทำการ intersection กัน หากมีเซ็ตใดที่ทำการ intersect กันแล้ว มีข้อมูลสมาชิกในเซ็ตที่ซ้ำกันอยู่ จะไม่สามารถจัดให้วิชาดังกล่าวอยู่ในวันเวลาเดียวกันได้



โครงสร้างข้อมูลแบบสตริง
สตริง (String) หรือ สตริงของอักขระ (CharacterString) เป็นข้อมูลที่ประกอบไปด้วย ตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดต่อกันไป รวมทั้งช่องว่าง

การประยุกต์ใช้คอมพิวเตอร์ที่เกี่ยวกับข้อมูลที่เป็นสตริง
มีการนำไปใช้สร้างโปรแกรมประเภทบรรณาธิการข้อความ(text editor) หรือโปรแกรมประเภทประมวลผลคำ (word processing) ซึ่งมีการทำงานที่อำนวยความสะดวกหลายอย่างเช่น การตรวจสอบข้อความ การจัดแนวข้อความในแต่ละย่อหน้า และการค้นหาคำ เป็นต้น


สตริงกับอะเรย์
สตริง คือ อะเรย์ของอักขระเช่น char a[6] อาจจะเป็นอะเรย์ขนาด 6 ช่องอักขระ หรือ เป็นสตริงขนาด 5 อักขระก็ได้ โดยจุดสิ้นสุดของ string จะจบด้วย \0 หรือ null character
เช่น
char a[ ]={‘H’, ‘E’, ‘L’, ‘L’, ‘O’, ‘\0’};
char a[ ]=“HELLO”;



การกำหนดสตริง
การกำหนดสตริงทำได้หลายแบบ คือ
1. กำหนดเป็นสตริงที่มีค่าคงตัว (String Constants)
2. กำหนดโดยใช้ตัวแปรอะเรย์หรือพอยเตอร์



อะเรย์ของสตริง
ถ้าหากมีสตริงจำนวนมาก ก็ควรจะทำให้เป็นอะเรย์ของสตริง เพื่อที่จะเขียนโปรแกรมได้สะดวก การสร้างอะเรย์ของสตริง สามารถสร้างได้ทั้งแบบที่ให้ค่าเริ่มต้นและแบบที่กำหนดเป็นตัวแปร


การกำหนดตัวแปร country จะแตกต่างกับการกำหนดตัวแปรอะเรย์ เพราะเป็นการกำหนดตัวแปรพอย
เตอร์ขึ้น 4 ตัว โดยให้แต่ละตัวชี้ไปยังค่าคงตัวสตริงทั้ง4 ตัว โดยที่ contry[0] จะชี้ไปที่ข้อมูลแรก contry[1]จะชี้ข้อมูลที่สอง contry[2] จะชี้ข้อมูลที่สาม และcontry[3] จะชี้ข้อมูลตัวสุดท้าย
ในการเขียนค่าเริ่มต้น คือ ค่าคงตัวสตริง เขียนไว้ในเครื่องหมายวงเล็บปีกกา และข้อมูลในเครื่องหมาย
คำพูด คือ ค่าคงตัวสตริง



ฟังก์ชัน puts ( ) ใช้ในการพิมพ์สตริงออกทางจอภาพ โดยการผ่านค่าแอดเดรสของสตริงไปให้เท่านั้น
ข้อสังเกต
การกำหนดอะเรย์ของสตริงในลักษณะอย่างนี้ ไม่ใช่อะเรย์ที่แท้จริงตามหลักการของอะเรย์ เนื่องจากขนาดของช่องในอะเรย์ไม่เท่ากัน แต่อนุโลมให้ถือว่าเป็นอะเรย์




อะเรย์ของสตริงที่ยาวเท่ากันอะเรย์ในลักษณะนี้จะถือว่าเป็นอะเรย์ที่แท้จริงและสามารถกำหนดได้ทั้งเมื่อมีการให้ค่าเริ่มต้น และเมื่อกำหนดเป็นตัวแปร โดยดำเนินการตามแบบการกำหนดอะเรย์ 2 มิติ

เช่น
char fruit [3][7]={“Apple”, “Orange”, “Mango”};



กำหนดตัวแปร fruit เป็นแบบ 3 แถว 7 คอลัมน์ ในแต่ละช่องจะเก็บข้อมูลแบบอักขระอะเรย์ของสตริงที่ยาวเท่ากัน อะเรย์ในลักษณะนี้จะถือว่าเป็นอะเรย์ที่แท้จริง และสามารถกำหนดได้ทั้งเมื่อมีการให้ค่าเริ่มต้น และเมื่อกำหนดเป็นตัวแปร โดยดำเนินการตามแบบการกำหนดอะเรย์ 2 มิติ



สิ่งที่ได้รับจากการเรียน : ได้ทราบถึงการนำ Set และ String สามารถนำมาใช้กับ อะเรย์ ได้

วันอังคารที่ 30 มิถุนายน พ.ศ. 2552

DTS 03-30/06/2009

สรุปการเรียนรู้ : Lecture 2 เรื่อง "Array and Record"

Array : อะเรย์เป็นโครงสร้างข้อมูลที่เรียกว่า Linear List มีลักษณะ คล้ายเซ็ตในคณิตศาสตร์ คือ อะเรย์จะประกอบด้วยสมาชิกที่มีจำนวน คงที่ มีรูปแบบข้อมูลเป็นแบบเดียวกัน สมาชิกแต่ละตัวใช้เนื้อที่จัดเก็บ ที่มีขนาดเท่ากัน เรียงต่อเนื่องในหน่วยความจำหลัก

การประกาศอาร์กิวเมนต์ในฟังก์ชันเป็นอะเรย์ ถ้าเป็นอะเรย์มิติเดียว สามารถทำได้ทั้งหมด 3 วิธี
1. มีการประกาศขนาดของอะเรย์ที่ทำหน้าที่ในการรับค่า
2. ไม่ต้องมีการประกาศขนาดของอะเรย์ที่ทำหน้าที่ในการรับค่า
3. ตัวแปรที่ทำหน้าที่รับค่าถูกกำหนดเป็นพอยน์เตอร์

การกำหนดค่าเริ่มต้นให้กับสมาชิกของ structure
สามารถกำหนดค่าเริ่มต้นให้กับสมาชิกของ structure ได้โดยค่าเริ่มต้นที่จะกำหนดให้กับสมาชิกตัวใด จะต้องอยู่ในตำแหน่งที่ตรงกับสมาชิกตัวนั้นค่าเริ่มต้นจะต้องอยู่ในวงเล็บปีกกาและข้อมูลค่าเริ่มต้นแต่ละตัวแยกกันด้วยเครื่องหมาย ,

ตัวอย่าง !
structure account ประกอบด้วยสมาชิก ดังนี้
- เลขจำนวนเต็ม (int acct_no)
- อะเรย์ของอักขระจำนวน 30 ตัว (char name[30]);
- structure date

การผ่าน structure ให้ฟังก์ชัน
ประเภทของการส่งผ่าน structureให้ฟังก์ชันนั้น มี 2 ประเภท คือ
1. ส่งสมาชิกแต่ละตัวของ structure
สมาชิกแต่ละตัวของ structure สามารถส่งเป็นอาร์กิวเมนต์ ของฟังก์ชันและส่งกลับจากฟังก์ชันได้โดยใช้คำสั่ง return ซึ่งมีทั้งการส่งค่าของตัวแปรที่อยู่ในตัวแปรstructure และก็ส่งตำแหน่งที่อยู่ของตัวแปรนั้น ๆ ไปยังฟังก์ชัน
2. ส่งทั้ง structure
จะส่งผ่านในลักษณะของพอยน์เตอร์ไปยัง structureโดยหลักการจะเหมือนกับการส่งผ่านอะเรย์ไปให้ฟังก์ชัน ซึ่งเป็นลักษณะที่เรียกว่าPass by reference

Pointer : เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่ (Address) ของตัวแปรที่อยู่ในหน่วยความจำการประกาศชนิดของตัวแปรพอยน์เตอร์รูปแบบ
type *variable-name
type หมายถึง ชนิดของตัวแปร

* หมายถึง เป็นเครื่องหมายที่แสดงว่า ตัวแปรที่ ตามหลังเครื่องหมายนี้เป็นตัวแปรพอยน์เตอร์
ส่วน variable-name เป็นชื่อของตัวแปรที่ต้องการประกาศว่าเป็นชนิดพอยน์เตอร์
********************************************************
สิ่งที่ได้รับจากการเรียนครั้งนี้ : ทราบถึงการทำงานของ Array และการกำหนดค่าของ structure และอาจารย์ยังทบทวนการวน loob ให้เข้าใจได้ง่ายขึ้น

วันอาทิตย์ที่ 28 มิถุนายน พ.ศ. 2552

DTS 02-23/06/2009

#include "stdio.h"
#include "string.h"
void main()
{
struct Telephone
{
char brand[20];
char model[30];
char type[20];
char camera [30];
int code_member;
char color[15];
float price;
float discount;
}sale;
strcpy(sale.brand,"Nokia");
strcpy(sale.model,"5310 Xpress Music");
strcpy(sale.type,"Telephone");
strcpy(sale. camera," 2 million pixels");
sale.code_member=12234;
strcpy(sale.color,"black");
sale.price=9460;
sale.discount=450;
printf("Brand:%s\n",sale.brand);
printf("Model:%s\n",sale.model);
printf("Type:%s\n",sale.type);
printf("Camera:%s\n",sale.camera);
printf("Code_Member:%d\n",sale.code_member);
printf("Color:%s\n",sale.color);
printf("Price:%.2f\n",sale.price);
printf("Discount:%.2f\n",sale.discount);
}




สิ่งที่จากการเรียนวิชาโครงสร้างข้อมูล คือ ได้เรียนรู้และทราบถึงชนิดของข้อมูล และโครงสร้างข้อมูล และยังได้ทบทวบเกี่ยวกับภาษาซี

วันจันทร์ที่ 22 มิถุนายน พ.ศ. 2552

DTS 01-16/06/2009

ชื่อ สมฤทัย ชมภูนุช รหัสประจำตัว 50132792039

Miss. Somlutai Chompunuch

หลักสูตร การบริหารธุรกิจ (คอมพิวเตอร์ธุรกิจ) คณะวิทยาการจัดการ

มหาวิทยาลัยราชภัฏสวนดุสิต

E-mail : u50132792039@gmail.com