วันพุธที่ 14 ตุลาคม พ.ศ. 2552

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

สิ่งที่ได้รับจากการฝึกประสบการณ์วิชาชีพ 3
1. การตรงต่อเวลา
จากการเรียนวิชาเตรียมฝึกประสบการณ์วิชาชีพ 3 นั้นทำให้เราเป็นคนที่ตรงต่อเวลาในการเรียน ต่อการทำงาน แล้วยังสามารถนำสิ่งที่ได้รับจากตรงนี้ไปปฏิบัติต่อหน่วยงาน หรือต่อผู้อื่นในภาคหน้าได้ เพราะการตรงต่อเวลาเป็นตัวบ่งบอกถึงนิสัย บ่งบอกถึงความรับผิดชอบ และสิ่งอื่นๆอีกมากมายในตัวของเราเอง

2. ได้รับความรู้เพิ่มเติม
จากการเรียนวิชาเตรียมฝึกประสบการณ์วิชาชีพ 3 นั้นข้าพเจ้าได้รับความรู้เพิ่มเติมจากการเรียนครั้งนี้ ในสิ่งที่ข้าพเจ้าไม่เคยรู้ ไม่เคยเข้าใจ ในเรื่องที่เกี่ยวกับเทคโนโลยี การใช้ภาษา ฯลฯ นอกจากนี้แล้วยังทำให้ข้าพเจ้ารู้จักการพัฒนาตนเอง แล้วยังนำความรู้ที่ได้มาเสริมสร้างประสบการณ์ของตนเองต่อไป

3. มีความรับผิดชอบและความสามัคคีในการทำงาน
ในการเรียน การทำงานแต่ละครั้งเราอาจต้องทำงานร่วมกับผู้อื่น ทำให้เราต้องรู้จักช่วยเหลือ รับฟังความคิดเห็นของผู้อื่น และเมื่อเราต้องการให้งานเสร็จลุล่วงไปด้วยดี เราต้องมีความสามัคคีในการทำงาน แล้ววิชาเตรียมฝึกก็ได้สอนในเรื่องของการทำงานเป็นทีม จึงทำให้ข้าพเจ้าได้เรียนรู้การทำงานร่วมกับผู้อื่น ทำให้ข้าพเจ้ารู้จักรับผิดชอบในหน้าที่ที่ข้าพเจ้าได้รับมอบหมาย แล้วยังฝึกฝนให้ข้าพเจ้ามีความสามัคคีในการทำงานอีกด้วย

4. รู้จักกาลเทศะ ความเหมาะสมในเรื่องของการแต่งกาย
ในการอยู่ร่วมสังคมกับผู้อื่น เราต้องรู้จักการวางตัว รู้จักกาลเทศะ และเรื่องของการแต่งกาย ก็ถือว่าเป็นสิ่งสำคัญอย่างหนึ่งในชีวิตของคนเรา แล้วในการเรียนวิชาเตรียมฝึกประสบการณ์วิชาชีพ 3 ก็ช่วยแนะหรือคอยตักเตือนในเรื่องของการแต่งกายให้ถูกระเบียบอยู่เสมอ ทำให้ข้าพเจ้าได้ปฏิบัติตามในเรื่องของการแต่งกายให้ถูกระเบียบ ถูกต้องตามกาลเทศะว่าควรแต่งกายอย่างไรให้เหมาะสม เพื่อส่งเสริมหรือพัฒนาตนเองให้ดูดียิ่งขึ้น


ในการเรียนวิชาเตรียมฝึกประสบการณ์วิชาชีพ 3 ทำให้ข้าพเจ้าได้รับประโยชน์มากมายหลายอย่าง ได้ทั้งประสบการณ์การทำงาน ความรู้เพิ่มเติม แม้กระทั่งข้อคิดดีๆ ที่ได้จากอาจารย์ผู้สอน หรือจากวิทยากรต่างๆ ข้าพเจ้าหวังว่าจะนำสิ่งที่ได้มานี้มาใช้ในชีวิตประจำวันของข้าพเจ้าต่อไป

วันพุธที่ 16 กันยายน พ.ศ. 2552

DTS 11-16-09-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Searching

การค้นหาข้อมูล searching แบ่งเป็น 2 ประเภท
1.การค้นหาข้อมูลแบบภายใน
2.การค้นหาข้อมูลแบบภายนอก

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

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

การค้นหาแบบไบนารี (Binary Search)
จะใช้กับข้อมูลที่เรียงลำดับแล้วเท่านั้น โดยแบ่งข้อมูลออกเป็น 2 ส่วน การค้นหาเป็นวิธีค้นหาที่ไปยังค่ากลางเพื่อตรวจสอบหรือเปรียบเทียบว่าใช่ข้อมูลที่ต้องค้นหาหรือไม่ และจะละทิ้งข้อมูลส่วนหน้าหรือส่วนหลังขึ้นอยู่กับว่าข้อมูลที่ต้องการค้นหามีค่ามากกว่า หรือน้อยกว่าข้อมูลค่ากลาง

วันเสาร์ที่ 12 กันยายน พ.ศ. 2552

DTS 10-09-09-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Graph (ต่อ) และ Sorting

การท่องไปในกราฟ
1.การค้นหาแบบกว้าง จะมีการกำหนดจุดเริ่มต้น แล้วท่องไปยังโหนดประชิดของจุดเริ่มต้นไปเรื่อยๆจนครบทุกโหนด
- การค้นหาแบบกว้าง ในกราฟไม่มีทิศทาง โหนดที่พบมีได้หลายรายการแล้วแต่ลำดับของโหนดประชิดที่ได้จัดเรียงไว้
- การค้นหาแบบกว้าง ในกราฟมีทิศทาง การค้นหาโหนดทำได้ง่ายขึ้น โดยใช้คิวเก็บลำดับของโหนดประชิด และใช้ตารางเก็บค่าโหนดประชิด
2.การค้นหาแบบลึก ต้องมีการกำหนดจุดเริ่มต้นสำหรับเยี่ยมเป็นจุดแรก มีหลักการคล้ายกับแบบลำดับของทรี

กราฟมีน้ำหนัก คือ กราฟที่ทุกเอดจ์มีค่าน้ำหนักกำกับ ค่าน้ำหนักนี้อาจหมายถึงระยะทาง เวลา เป็นต้น ใช้แก้ปัญหา ดังนี้
1.การสร้างต้นไม้ทอดข้ามน้อยที่สุด มีขั้นตอนดังต่อไปนี้
- เรียงเอดจ์ตามน้ำหนัก
- สร้างป่าที่มีแต่ต้นไม้ว่าง
- เลือกเอดจ์ที่มีน้ำหนักน้อยที่สุด และไม่เคยถูกเลือก ถ้าค่าซ้ำกันให้เลือกมา 1 เส้น
- พิจารณาเอดจ์ที่จะเลือกมาประกอบเป็นต้นไม้ทอดข้าม แต่ห้ามเกิดวงรอบ ถ้าเกิดตัดทิ้ง
- ตรวจสอบเอดจ์ที่ต้องอ่านในกราฟ
2.การหาเส้นทางที่สั้นที่สุด
ข้อกำหนด
เซต S เก็บโหนดที่ผ่านได้และมีระยะทางจากจุดเริ่มต้นสั้นสุด
ให้ W แทนโหนดนอกเซต
ให้ D แทนระยะทาง
ขั้นตอนการทำงาน
- เซต S คือจุดเริ่มต้น
- คำนวณหาระยะทางจากโหนดเริ่มต้นไปยังทุกโหนด โดยยอมให้โหนดในเซต S เป็นทางผ่าน
*** ถ้าโหนดในเซต S ที่เป็นทางผ่านมีมากกว่า 1 ให้เลือกระยะทางที่สั้นที่สุดไปใส่ใน D
- เลือกโหนด W ที่ห่างจากจุดเริ่มต้นน้อยที่สุดไปไว้ใน S

Sorting
การเรียงลำดับ ช่วยในการค้นหาข้อมูลหรือสิ่งของต่างๆมีความง่ายมากยิ่งขึ้น ทำให้เป็นระเบียบแบบแผน เกิดประสิทธิภาพในการทำงาน

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

วิธีการเรียงลำดับ
วิธีการเรียงลำดับสามารถแบ่งออกได้ 2 วิธี
1.การเรียงลำดับแบบภายใน เป็นการเรียงลำดับข้อมูลที่อยู่ในหน่วยความจำหลัก เวลาที่ใช้จะคำนึงถึงเวลาที่ใช้เปรียบเทียบและเลื่อนข้อมูล
2.การเรียงลำดับแบบภายนอก เป็นการเรียงลำดับข้อมูลที่อยู่ในหน่วยความจำสำรอง เวลาที่ใช้จะคำนึงถึงเวลาที่เสียไประหว่างการถ่ายเทข้อมูล

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

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

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

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

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

วันอาทิตย์ที่ 6 กันยายน พ.ศ. 2552

DTS 09-02-09-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Tree (ต่อ) และ Graph
เอ็กซ์เพรสชั่นทรี
เป็นการนำนิพจน์มาเก็บยังโครงสร้างทรี โดยแต่ละโหนดจะเก็บตัวดำเนินการ (Operator) และตัวถูกดำเนินการ (Operand) ซึ่งตัวถูกดำเนินการจะเก็บอยู่ที่โหนดใบ ส่วนตัวดำเนินการจะเก็บอยู่ที่โหนดกิ่ง แต่ต้องคำนึงถึงความสำคัญของเครื่องหมายตามลำดับด้วย คือ
-ฟังก์ชั่น
-วงเล็บ
-ยกกำลัง
-เครื่องหมายหน้าเลขจำนวน
-คูณ หาร
-บวก ลบ

***ถ้ามีความสำคัญในระดับเดียวกันให้ทำจากซ้ายไปขวา

ไบนารีเซิร์ซทรี
ค่าของโหนดรากจะมีค่ามากกว่าโหนดย่อยทางด้านซ้าย และมีค่าน้อยกว่าหรือเท่ากับโหนดย่อยทางด้านขวา

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

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

วิธีการดึงโหนดออก แยกได้ 3 วิธี
1. กรณีโหนดที่จะดึงออกเป็นโหนดใบ สามารถดึงได้เลยเพราะไม่มีผลกระทบต่อโหนดอื่นๆ แล้วเป็นวิธีที่ง่ายที่สุด
2. กรณีโหนดที่ดึงออกมีเฉพาะทรีย่อยด้านซ้ายหรือทรีย่อยด้านขวาเพียงด้านใดด้านหนึ่ง สามารถทำได้เหมือนวิธีแรก เพียงให้โหนดแม่ของโหนดที่ต้องการดึงออกชี้ไปยังโหนดลูกของโหนดนั้นแทน
3. กรณีโหนดที่ต้องการดึงออกมีทั้งทรีย่อยด้านซ้ายและทรีย่อยด้านขวา ต้องทำการเลือกว่าจะนำทรีย่อยด้านใดมาแทนโหนดที่ถูกดึงออก
***ถ้าเลือกทรีย่อยด้านซ้ายต้องเลือกโหนดที่มีค่ามากที่สุดมาแทน แต่ถ้าเลือกทรีย่อยด้านขวาต้องเลือกโหนดที่มีค่น้อยที่สุดมาแทน

Graph
เป็นโครงสร้างข้อมูลแบบไม่เชิงเส้น ประกอบด้วยกลุ่มของสิ่งสองสิ่ง คือ
1.โหนด แทนด้วย N
2.เส้นเชื่อมระหว่างโหนด แทนด้วย E
*** กราฟที่มีเส้นเชื่อมระหว่างโหนดที่ไม่มีลำดับ จะเรียกกราฟนั้นว่า กราฟแบบไม่มีทิศทาง
ส่วนกราฟที่มีเส้นเชื่อมระหว่างโหนดที่มีลำดับ จะเรียกกราฟนั้นว่า กราฟแบบมีทิศทาง หรือเรียกว่า ไดกราฟ

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

การแทนกราฟในหน่วยความจำ
สิ่งที่ต้องการจัดเก็บก็คือ เอ็จ ซึ่งเป็นเส้นเชื่อมระหว่างโหนดสองโหนด วิธีที่ง่ายคือ การเก็บเอ็จในแถวลำดับ 2 มิติ แต่จะเป็นการเปลืองเนื้อที่เพราะบางเอ็จมีการเก็บซ้ำ แต่สามารถแก้ปัญหานี้ได้โดยมิติแรกเก็บโหนดต่างๆ แล้วใช้พอยเตอร์ชี้ไปยังความสัมพันธ์กับโหนดในมิติ 2 แต่เป็นวิธีที่ยุ่งยาก ไม่เหมาะกับกราฟที่มีการเปลี่ยนแปลงตลอดเวลา

กราฟที่มีการเปลี่ยนแปลงตลอดเวลา อาจใช้วิธีแอดจาเซนซีลิสต์ คือการใช้ลิงค์ลิสต์ เพื่อความสะดวกในการเปลี่ยนแปลง

นอกจากนี้ยังมีวิธีแทนกราฟในความจำหลักอีกวิธีหนึ่งซึ่งเป็นที่นิยมใช้กันมากที่สุดคือ การแทนด้วยแอดจาเซนซีเมทริกซ์ โดยที่ถ้ากราฟ L มีทั้งหมด nโหนด แอดจาเซนซีเมทริกซ์เป็นเมทริกซ์จัตุรัสขนาด n*n วิธีนี้สามารถหาจำนวนเส้นทางได้ว่ามีกี่จำนวนเส้นทาง

การท่องไปในกราฟ
เป็นการไปเยือนโหนดในกราฟ ซึ่งแต่ละโหนดจะถูกเยือนเพียงครั้งเดียว แต่กราฟนั้นมาหลายเส้นทางเมื่อเยือนแล้วต้องทำเครื่องหมายว่าได้เยือนเรียบร้อย การท่องไปในกราฟมี 2 แบบ คือ
1.การท่องแบบกว้าง เป็นการกำหนดโหนดที่จะเยือนหรือโหนดเริ่มต้นแล้วทำการเยือนไปยังโหนดที่ใกล้เคียงจนกระทั่งครบทุกโหนด
2.การท่องแบบลึก โดยกำหนดเริ่มต้นที่โหนดแรกแล้วเยือนโหนดถัดไปตามแนววิถีจนถึงปลายวิถี แล้วย้อนกลับมาเพื่อเยือนโหนดอื่นๆ

วันพฤหัสบดีที่ 27 สิงหาคม พ.ศ. 2552

DTS 08-26-08-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Tree
ทรี (Tree)
ทรีเป็นกราฟแบบมีทิศทาง ที่มีโครงสร้างแบบลำดับชั้นและมีความสัมพันธ์ระหว่างโหนด ทิศทางของกราฟที่แทนทรีจะมีทิศทางจากบนลงล่าง ดังนั้นการวาดทรี เราจึงไม่นิยมแสดงทิศทางของเส้นเชื่อม

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

นิยามของทรี
1.ด้วยนิยามของกราฟ จะต้องมีคุณสมบัติดังนี้
-โหนดสองโหนดใด ๆ ในทรีต้องมีทางติดต่อกันทางเดียวเท่านั้น
-ทรีที่มี N โหนด ต้องมีกิ่งทั้งหมด N-1 เส้น
การเขียนรูปแบบทรีด้วยนิยามของกราฟสามารถเขียนได้ 4 แบบ
1.แบบที่มีรากอยู่ด้านบน
2.แบบที่มีรากอยู่ด้านล่าง
3.แบบที่มีรากอยู่ด้านซ้าย
4.แบที่มีรากอยู่ด้านขวา

2.ด้วยรูปแบบรีเคอร์ซีฟ กรณีที่โหนดว่างเรียกว่า (Null Tree) ถ้ามีโหนดเป็นโหนดราก ส่วนที่เหลือจะเป็นทรีย่อย

3.นิยามที่เกี่ยวข้อง
1.ฟอร์เรสต์ คือ การนำโหนดรากออก ส่วนทรีย่อยจะเป็นฟอร์เรสต์
2.ทรีที่มีแบบแผน คือ โหนดต่างๆ มีความสัมพันธ์กัน จะแตกต่างกันตรงที่ทิศทางการเดินของข้อมูล แต่เหมือนกันตรงที่ มีจำนวนโหนดในทรีเท่ากัน และใช้ชื่อโหนดเหมือนกัน
3.ทรีคล้าย คือ ทรีที่มีทิศทางการเดินของข้อมูลเหมือนกัน ถึงแม้ชื่อโหนดจะต่างกัน
4.ทรีเหมือน คือ ทรีที่เหมือนกันทุกอย่างไม่ว่าจะเป็น ทิศทางการเดินของข้อมูล ชื่อของโหนด จำนวนโหนด
5.กำลัง คือ จำนวนโหนดลูกของโหนดนั้นๆ
6.ระดับของโหนด คือ ชั้นของโหนดที่ระบุด้วยหมายเลข โดยกำหนดให้โหนดรากอยู่ในระดับที่ 1 และไล่ระดับของโหนดด้วยการเพิ่มจำนวนทีละ 1

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

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

ไบนารีทรีแบบสมบูรณ์นั้นจะมีโหนดทรีย่อยทางด้านซ้ายและขวา ยกเว้นโหนดใบหรือโหนดที่ไม่มีลูก แต่โหนดใบจะต้องอยู่ในระดับเดียวกัน

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

การท่องไปในไบนารีทรี
เป็นการเยือนทุกๆโหนด อย่างมีระบบแบบแผน สามารถเยือนโหนดได้โหนดละหนึ่งครั้ง วิธีการท่องนั้นอยู่ที่ว่าต้องการลำดับการเยือนอย่างไร โดย
- N อาจเป็นโหนดแม่
- L ทรีย่อยทางซ้าย
- R ทรีย่อยทางขวา

วิธีการท่องไปในทรีมี 6 วิธี แต่นิยมใช้กันมากคือ NLR , LNR , LRN
1. การท่องไปแบบพรีออร์เดอร์ เป็นการเยือนด้วยวิธี NLR ในลักษณะการเข้าถึงจะเริ่มต้นจากจุดแรกคือ N จากนั้นจึงเข้าไปทรีย่อยด้านซ้ายและเข้าถึงทรีย่อยด้านขวา

2. การท่องไปแบบอินออร์เดอร์ เป็นการเยือนด้วยวิธี LNR สำหรับการเข้าถึงแบบอินออร์เดอร์จะดำเนินการเข้าเยี่ยมทรีย่อยด้านซ้ายก่อน จากนั้นจึงเข้าเยี่ยม N และสิ้นสุดการเข้าเยี่ยมที่ทรีย่อยด้านขวา

3. การท่องไปแบบโพสออร์เดอร์ เป็นการเยือนด้วยวิธี LRN การประมวลผลของโพสออร์เดอร์ จะเริ่มต้นด้วยทรีย่อยด้านซ้ายจานั้นมาประมวลผลต่อที่ทรีย่อยด้านขวาและสิ้นสุดการประมวลผลที่ N

วันพุธที่ 5 สิงหาคม พ.ศ. 2552

DTS 07-05-08-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Queue

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

การทำงานของคิว
1.การใส่ข้อมูลตัวใหม่ลงในคิว เรียกว่า Enqueue ก่อนที่จะใส่ข้อมูลลงไปต้องตรวจสอบก่อนว่าคิวเต็มหรือไม่ ถ้าพยายามใส่ข้อมูลลงไปอาจเกิดข้อผิดพลาด ที่เรียกว่า overflow
2.การนำสมาชิกออกจากคิว เรียกว่า Dequeue จะไม่สามารถนำข้อมูลออกจากคิวที่ว่างได้ ถ้าพยายามนำข้อมูลออกอาจเกิดข้อผิดพลาดที่เรียกว่า underflow
3.การนำข้อมูลที่อยู่ตอนต้นของคิวหรือข้อมูลที่อยู่ลำดับแรกมาแสดง เรียกว่า Queue Front เพื่อรู้ว่าข้อมูลตัวต่อไปคืออะไร
4.การนำข้อมูลที่อยู่ตอนท้ายของคิว หรือข้อมูลที่เข้ามาตัวสุดท้ายมาแสดง เรียกว่า Queue Rear เพื่อรู้ว่าข้อมูลตัวสุดท้ายคืออะไร

การแทนที่ข้อมูลของคิว มี 2 วิธี คือ
1.การแทนที่ข้อมูลของคิวแบบอะเรย์ มีการกำหนดขนาดของคิวไว้ล่วงหน้าว่ามีขนาดเท่าไร และจะมีการจัดสรรเนื้อที่หน่วยความจำให้เลย เมื่อพื้นที่ของอะเรย์มีพื้นที่ว่าง อาจหมายความว่า พื้นที่ว่างนั้นเคยเก็บข้อมูลแล้วกับพื้นที่ว่างนั้นยังไม่เคยเก็บข้อมูลมาก่อน
*** กรณีที่ Front ไม่ได้อยู่ช่องแรก พื้นที่ว่างจะไม่สามารถใช้งานได้อีก จะแก้โดยใช้คิวแบบวงกลม คือ ช่องสุดท้ายต่อกับช่องแรก คิวแบบวงกลมจะเต็มก็ต่อเมื่อ rear มีค่าน้อยกว่า front

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

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

การประยุกต์ใช้คิว จะถูกประยุกต์ใช้มากในระบบธุรกิจ เช่นการให้บริการลูกค้า คือลูกค้าที่มาก่อนย่อมต้องได้รับบริการก่อน และในด้านคอมพิวเตอร์ในระบบปฏิบัติงาน (Operating System) คือจัดให้งานที่เข้ามา ได้ทำงานตามความสำคัญ (Priority)
***เช่น สมมติว่า Priority มีงาน 3 ระดับ เรียงจากมากไปหาน้อยระบุโดยตัวเลข เลข 1 มากสุดเรื่อยไปจนถึง 3 น้อยสุด ถ้ามีงาน A,B,C เข้ามาขอใช้ CPU โดยมี Priority เป็น 4,2,1, ตามลำดับ ที่นี้งาน C จะถูกนำไปทำงานก่อน ตามด้วย B และ A

วันพฤหัสบดีที่ 30 กรกฎาคม พ.ศ. 2552

DTS 06-29-07-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Stack (ต่อ)

การแทนที่ข้อมูลของสแตก มี 2 วิธี คือ

การแทนที่ข้อมูลของสแตกด้วยอาร์เรย์
การแทนสแตกด้วยโครงสร้างอาร์เรย์นั้น เนื่องจากอาร์เรย์เป็นโครงสร้างที่ต้องมีการกำหนดจองพื้นที่เท่ากับขนาดที่ใหญ่ที่สุด(static) จึงจำเป็นต้องมีการกำหนดขนาดพื้นที่จัดเก็บข้อมูลสูงสุดให้เหมาะสมเมื่อมีการนำเอาข้อมูลเข้ามาก็จะนำเข้ามาจัดไว้ในอาร์เรย์แรกสุดจากนั้นจึงเรียงลำดับกันไปตามพื้นที่ที่กำหนด

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

การดำเนินงานเกี่ยวกับสแตก
1.Create Stack เป็นการสร้างสแตกขึ้นมาแล้วกำหนดค่าเริ่มต้นต่าง ๆ
2.Push Stack เป็นการนำข้อมูลมาใส่ลงในสแตก
3.Pop stack เป็นการนำข้อมูลที่อยู่บนสุดออกจากสแตก
4.Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตกแต่ ไม่มีการลบข้อมูลที่คัดลอกออกจากสแตก
5.Empty Stack เป็นการตรวจสอบว่าสแตกว่างหรือไม่ เพื่อไม่ให้เกิดข้อผิดพลาดที่เรียกว่า stack underflow
6.Full Stack เป็นการตรวจสอบว่าสแตกนั้นเต็มหรือไม่ เพื่อไม่ให้เกิดข้อผิดพลาดที่เรียกว่า stack overflow
7.Stack Count เป็นการนับข้อมูลในสแตกว่ามีจำนวนเท่าไหร่
8.Destroy Stack เป็นการลบข้อมูลในสแตกออกทั้งหมด

การคำนวณนิพจน์ทางคณิตศาสตร์ แบ่งเป็น 3 ประเภทคือ
1. นิพจน์ Infix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ(operator)อยู่กึ่งกลางตัวถูกดำเนินการ (operand) เช่น A + B
2. นิพจน์ Postfix คือ นิพจน์ที่มีเครื่องหมายดำเนิน(operator)การอยู่ด้านหลังตัวถูกดำเนินการ (operand) เช่น AB+
3. นิพจน์ Prefix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ(operator)อยู่ด้านหน้าตัวถูกดำเนินการ (operand) เช่น -AB

*** เครื่องหมายดำเนินการ (operand) ได้แก่เครื่องหมาย + - * ^ ตัวถูกดำเนินการ ได้แก่ สัญลักษณ์แทนค่าตัวเลข เช่น A B C D
หรือตัวแปรอื่น

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

ลำดับความสำคัญของตัวดำเนินการ
1.เครื่องหมาย (
2.เครื่องหมาย ^
3.เครื่องหมาย * /
4.เครื่องหมาย + -
5.เครื่องหมาย )

ขั้นตอนการแปลง infix เป็น postfix
1.อ่านอักขระใน infix
2.ถ้าเป็น operand ย้ายไปใส่ใน postfix
3.ถ้าเป็น operator จะต้องดูลำดับความสำคัญของตัวดำเนินการด้วยแล้วใส่ลงในสแตกที่เก็บตัวดำเนินการ ถ้ามีค่ามากกว่าให้ push ถ้ามีค่าน้อยกว่าหรือเท่ากันให้ pop ออกแล้วไปเรียงต่อตัวอักษรใน postfix
4.ตัวดำเนินการที่เป็น ) จะไม่ถูก push แต่จะทำให้ตัวดำเนินการตัวอื่นถูก pop ออกมาแล้วไปเรียงต่อใน postfix
5.เมื่ออ่านอักขระใน infix หมด ให้ pop ตัวดำเนินการทุกตัวมาเรียงต่อใน postfix

การคำนวณค่า postfix
1.อ่านตัวอักษรจาก postfix ที่ละตัว
2.ถ้าเป็น operand ให้ push ไปเรื่อยๆ
3.ถ้าเป็น operator ให้ pop ตัวอักษรออก 2 ตัว แล้วทำการคำนวณตัวที่ถูก pop ที่หลังจะเป็นตัวตั้งแล้วนำ push ผลลัพธ์ลงไป

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

DTS 05-22-07-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Linked List และ Stack

Linked List (ต่อ)
Search list จะทำหน้าที่ค้นหาข้อมูลในลิสต์ตามที่ต้องการ

Traverse การท่องเข้าไปในลิสต์ คือ การท่องไปในทุกโหนดของลิงค์ลิสต์ เข้าถึงโครงสร้างทีละโครงสร้างที่อยู่ในลิสต์นั้น
**สมมติว่ามีลิงค์ลิสต์ H อยู่แล้ว ถ้าจะหาว่า X อยู่ในลิสต์นี้หรือไม่ เราจะสามารถรู้ได้โดยการค้นหาแบบลำดับ (sequential search) ตามลำดับ

Retrieve Node คือ การหาตำแหน่งข้อมูลในลิสต์ ว่าข้อมูลที่ต้องการนั้นอยู่ตำแหน่งที่เท่าไหร่ในลิสต์นั้น

EmptyList คือ ลิงค์ลิสต์ที่ไม่มี node อยุ่ภายใน หรือเป็นการทดสอบว่าลิสต์ว่างหรือไม่

List count คือ การนับจำนวนข้อมูลที่มีอยู่ในลิสต์ทั้งหมด ซึ่งสามารถดูค่าของจำนวนข้อมูลได้จาก Count

Destroy list คือ การทำลายลิสต์ทิ้ง โดยการลบข้อมูลในลิสต์ออกจนหมด

Linked List แบบซับซ้อน
1.Circular Linked Listหมายถึง ลิงค์ลิสต์ที่โหนดสุดท้ายสามารถวกกลับมาที่โหนดแรกได้
ใช้ประโยชน์เมื่อต้องการให้ข้อมูลมีลักษณะเป็นวนรอบหรือลูป โดยแต่ละขั้นตอนการทำงานภายในลูป จะมีการย้ายตำแหน่งของพอยน์เตอร์ไปยังโหนดถัดไป
2.Double Linked List หมายถึง ลิงค์ลิสต์ที่ทุกโหนดสามารถวกกลับมาที่โหนดก่อนหน้าของตนเองได้ ประกอบด้วยส่วนของ Info และ พอยน์เตอร์ที่ชี้ไป 2 ทิศทาง คือ ชี้ไปยังโหนดถัดไป และชี้ไปยังโหนดก่อนหน้า ดังนั้นเราจึงสามารถทำการอ่านข้อมูลได้ 2 วิธี คือ การอ่านไปข้างหน้า และอ่านไปทางข้างหลัง

Stack
สแตกเป็นลิเนียร์ลิสต์ที่มีคุณสมบัติที่ว่าเมื่อทำการเพิ่มข้อมูล หรือลบข้อมูลในสแตกจะกระทำที่ ปลายข้างเดียวกัน ปลายข้างนั้นเรียกว่า ท๊อปของสแตก (TOP OF STACK) ซึ่งมีคุณสมบัติเป็น ไลโฟลิสต์ (LIFO List) หรือพูชดาวน์ลิสต์ (Pushdown List) คือสมาชิกที่เข้าลิสต์ทีหลังสุดจะ ออกลิสต์ก่อน ตัวอย่างของสแตกที่เห็นง่าย ๆ และมักจะถูกอ้างเป็นตัวอย่างบ่อยครั้งที่สุด คือจาน ที่ตั้งซ้อนกัน เมื่อจะใช้จานก็ต้องหยิบจากใบบนสุด และถ้าจะนำจานมาไว้ก็ต้องวางทับไว้บนสุด เช่นกัน

การดำเนินงานพื้นฐานของสแตก ประกอบด้วยกระบวนการ 3 กระบวนการ
1.Push การนำข้อมูลใส่ลงไปในสแตก ซึ่งโดยปกติก่อนที่จะนำข้อมูลเก็บลงในสแตกจะต้องมีการตรวจสอบพื้นที่ในสแตกก่อน ว่ามีที่เหลือว่างให้เก็บข้อมูลได้อีกหรือไม่ การเพิ่มข้อมูลในสแตก สามารถทำได้โดยให้ทับบนข้อมูลสุดท้ายในสแตก และจะสามารถเพิ่มเข้าได้เรื่อย ๆ จนกว่าสแตกจะเต็มถ้าสแตกเต็มหรือ(Stack Overflow) จะไม่สามารถเพิ่มข้อมูลลงไปได้อีก

2.Pop การเอาข้อมูลที่อยู่บนสุดในสแตกออก ในการpop นั้นเราจะสามารถ pop ข้อมูลจากสแตกได้เรื่อย ๆ จนกว่า ข้อมูลจะหมดสแตก หรือ เป็นสแตกว่าง โดยก่อนที่จะนำข้อมูลออกจากสแตก จะต้องมีการตรวจสอบว่าใน สแตกมีข้อมูลเก็บ อยู่หรือไม่
**กรณีที่ในสแตกไม่มีข้อมูลอยู่จะทำให้เกิดข้อผิดพลาด เรียกว่า (Stack Underflow) หรือสแตกจม

3.Stack Top เป็นการคัดลอกข้อมูลในสแตก แต่ข้อมูลที่ถูกคัดลอกนั้นไม่ได้ถูกลบออกจากสแตก

**ตัวอย่างของสแตก = การว่างเก้าอี้ซ่อนกัน คือ เก้าอี้ตัวแรกจะถูกว่างไว้ข้างล่างสุดเมื่อต้องการใช้ก็ต้องดึงตัวที่อยู่บนสุดก่อนแล้วจึงจะใช้ตัวแรกที่ว่างอยู่ข้างล่างได้

การวางเหรียญซ่อนกัน คือ การวางเหรียญนั้นเหรียญแรกจะวางอยู่ล่างสุดแล้วเรียงต่อไปเรื่อยๆ การยิบเหรียญลงมาจึงต้องหยิบจากเหรียญบนสุดก่อนถึงจะหยิบเหรียญแรกได้

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

DTS 04-15-07-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Linked List

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

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

โครงสร้างข้อมูลแบบลิงค์ลิสต์ประกอบด้วย 2 ส่วน
1.Head Structure แบ่งเป็น 3ส่วน
-count เป็นการนับจำนวนข้อมูลที่มีอยู่ในลิสต์นั้น
-pos พอยเตอร์ที่ชี้ไปยังโหนดที่เข้าถึง
-head พอยเตอร์ที่ชี้ไปยังโหนดแรกของลิสต์
2.Data Node Structure จะประกอบด้วย ข้อมูลและพอยเตอร์ที่ชี้ไปโหนดถัดไป

การเพิ่มข้อมูลลงไปในลิงค์ลิสต์นั้น จากที่ Head Structure ในส่วนของ count จะมีค่าเป็น 0 นั้นหมายถึงในลิสต์นั้นยังไม่มีข้อมูลใดเลย ส่วน head จะมีเครื่องหมายกากบาท นั้นหมายถึงในลิสต์นั้นไม่มีการเชื่อมโยงไปยังข้อมูลแรก แต่ถ้าต้องการเพิ่มข้อมูลลงไปในลิสต์ Data Node ในส่วนของข้อมูล (Data)จะมีค่าเก็บอยู่ แล้ว count ก็จะเปลี่ยนค่าจาก 0 เป็น 1 คือ การบ่งบอกถึงจำนวนข้อมูลที่มีอยู่ในลิสต์นั้น แล้ว head ก็จะชี้ไปยังข้อมูล (Data) ตัวแรกของลิสต์ ส่วนพอยเตอร์ที่ชี้ไปโหนดถัดไปจะเป็นเครื่องหมายกากบาทแทน

การลบข้อมูลในลิงค์ลิสต์ ถ้าต้องการลบข้อมูลตัวใดในลิสต์สามารถลบได้เลย แต่ต้องเปลี่ยน head เพื่อชี้ไปยังข้อมูลตัวแรกของลิสต์กรณีที่ลบข้อมูลตัวแรกออก แล้ว link คือ เมื่อลบข้อมูลตัวใดออกควรชี้ link ถัดไปให้ถูกต้องด้วย

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

DTS 03-01-07-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Pointer และ Set and String

Pointer
ตัวแปร pointer เป็นตัวแปรที่ทำหน้าที่เก็บตำแหน่งที่อยู่ของตัวแปร สามารถอ้างอิงกลับไปกลับมาได้ มีขนาด 2 ไบต์เท่ากันหมด ไม่ว่าจะเป็น char,int,floatหรืออื่นๆ

ในการประกาศตัวแปร pointer จะต้องนำหน้าด้วยเครื่องหมาย * เช่น int*x // เป็นตัวแปร pointer

เครื่องหมาย & เป็นเครื่องหมายที่บอกตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำ

** ในกรณีที่ตัวแปรใดมีเครื่องหมาย & นำหน้าจะไม่สามารถนำมาคำนวณได้

ตัวอย่าง
int *ptr,count // เป็นการประกาศตัวแปร ptr เป็นตัวแปร pointer และประกาศตัวแปร count
count = 100 // เป็นการกำหนดค่าให้กับ count มีค่าเท่ากับ 100
ptr = &count // เป็นการกำหนดค่าให้กับ ptr มีค่าเท่ากับตำแหน่งที่อยู่ของ count

** ถ้าต้องการทราบว่า *ptr มีค่าเท่าไหร่หาได้จาก ณ ตำแหน่งที่ ptr เก็บอยู่ คือตำแหน่งที่เท่าไหร่แล้วดูว่าที่ตำแหน่งนั้นมีค่าเท่ากับเท่าไหร่

Set

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

1.set intersection

2.set union

3.set difference

String

เป็นข้อมูลที่ประกอบด้วย ตัวอักษร ตัวเลข หรือเครื่องหมายที่เรียงติดต่อกัน

ความยาวของสตริงจะถูกกำหนดโดยขนาดของสตริง ในการจองเนื้อที่นั้น ต้องทำการจองเนื้อที่ให้กับ \0 ด้วย

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

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

การบ้าน"Structure"

struct date{
int day;
int month;
int year;
};
struct mobile{
char brand[20];
char modle[20];
char color[10];
int item;
float price;
struct date date1;
}mobile1;


ตัวอย่างการเขียนโปรแกรม
#include
#include
void main ()
{
struct date{
int day;
int month;
int year;
};
struct mobile{
char brand[20];
char modle[20];
char color[10];
int item;
float price;
struct date date1;
}mobile1;

strcpy(mobile1.brand,"nokia");
strcpy(mobile1.modle,"N72");
strcpy(mobile1.color,"black");
mobile1.item=1;
mobile1.price=7800;
mobile1.date1.day=17;
mobile1.date1.month=04;
mobile1.date1.year=2550;

printf("\t\t\tmobile\n\n");
printf("brand:%s\n\n",mobile1.brand);
printf("modle:%s\n\n",mobile1.modle);
printf("color:%s\n\n",mobile1.color);
printf("item:%d\n\n",mobile1.item);
printf("price:%f\n\n",mobile1.price);
printf("day:%d\n\n",mobile1.date1.day);
printf("month:%d\n\n",mobile1.date1.month);
printf("year:%d\n\n",mobile1.date1.year);
printf("\t\t\tend\n");

}

วันเสาร์ที่ 27 มิถุนายน พ.ศ. 2552

DTS 02-24-06-2552

สรุปเนื้อหาบทเรียน "Data Structure"
เรื่อง Array and Record

Array
อาร์เรย์ คือ กลุ่มตัวแปรชนิดเดียวกันที่ใช้ชื่อเดียวกัน อาร์เรย์จะมีตัวห้อยหรือ subscript เป็นตัวระบุจำนวนสมาชิก อาร์เรย์จะแบ่งออกเป็น

1.อาร์เรย์มิติเดียว คือจะเก็บข้อมูลในแถวเดียวไม่ว่าจะเป็นแนวนอน หรือ แนวตั้ง รูปแบบของอาร์เรย์มิติเดียว
= ชนิดของตัวแปร ชื่อของตัวแปร ขนาดของตัวแปรอาร์เรย์ เช่น int num [5]

2.อาร์เรย์หลายมิติ จะมี 2 มิติ หรือ 3 มิติ จะแตกต่างจากอาร์เรย์มิติเดียวตรงที่ตัวห้อย คือ ตัวห้อยของอาร์เรย์จะมีขนาดของแถวและขนาดของคอลัมม์มาเป็นตัวบอกจำนวนสมาชิกด้วย รูปแบบของอาร์เรย์มิติหลายมิติ
= ชนิดของตัวแปร ชื่อของตัวแปร ขนาดของแถว ขนาดของคอลัมม์ เช่น int num [2][3]

* กรณีถ้ามีการกำหนดค่าให้กับตัวแปรชนิด character ขนาดของอาร์เรย์ก็จะมีขนาดเพิ่มขึ้นจากเดิมมาหนึ่งค่า เพื่อเก็บ "\0" จะทำหน้าที่บอกการสิ้นสุดของสายอักษร

Structure
คือ โครงสร้างข้อมูลที่มีประเภทข้อมูลแตกต่างชนิดกันได้ สมาชิกอาจเป็น จำนวนเต็ม ทศนิยม พอยเตอร์ ก็ได้
เมื่อต้องการอ้างถึงตัวแปรในโครงสร้างของ structure จะใช้ . มาเป็นตัวอ้าง เช่น personal.name

ประวัติส่วนตัว



ชื่อ-สกุล นางสาวกานต์รวี พัวประเสริฐ (Miss. Kanrawee Puaprasert)


ชื่อเล่น "มีน" ("Meen")


เกิดวันที่ 16 เมษายน 2532


อายุ 20 ปี


ที่อยู่ปัจจุบัน 99/138 ซอยเสนานิคม ถนน พหลโยธิน เเขวง ลาดพร้าว เขต ลาดพร้าว


จังหวัด กรุงเทพมหานคร 10230


E-mail meenz_aa @hotmail.com


คติพจน์ การดำเนินชีวิตโดยปราศจากเป้าเหมาย ก็เหมือนกับการเเล่นเรือโดยปราศจากเข็มทิศ



ปัจจุบันศึกษาอยู่ที่ มหาวิทยาลัยราชภัฏสวนดุสิต


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