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

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

ลูกแรดเตรียมพร้อมล่าเหยื่อ
วันศุกร์ ที่ 26 เดือน มิถุนายน พ.ศ. 2552
วันปฐมนิเทศน์
- ได้รู้จักการเตรียมความพร้อมก่อนที่จะเข้าเรียนในรายวิชาเตรียมฝึกประสบการณ์วิชาชีพ
- ได้รู้กฏระเบียบของการเข้าเรียน การมาเรียนในรายวิชาเตรียมฝึกประสบการณ์วิชาชีพ
- ได้รู้การปฏิบัติตัวที่ดีให้อยู่ในกฏระเบียบที่วางไว้
- ได้รู้เกณฑ์การตัดสินคะแนนในรายวิชาเตรียมฝึกประสบการณ์วิชาชีพ

วันศุกร์ ที่ 3 เดือน กรกฏาคม พ.ศ. 2552
หลักการประกันคุณภาพ
- รู้จักความหมายของหลักการประกันคุณภาพ
- รู้ว่ามหาวิทยาลัยใช้หลักการประกันคุณภาพอย่างไร
- รู้จักการวางแผนในการทำงาน

วันศุกร์ ที่ 10 เดือน กรกฏาคม พ.ศ. 2552
คุณธรรมจริยธรรม
- ได้รับความรู้เกี่ยวกับเรื่องของคุณธรรม จริยธรรม
- รู้จักหลักการดำเนินชีวิตในชีวิตประจำวัน
- ได้นำหลักธรรมที่เรียนมาปรับใช้ในชีวิตประจำวัน
- ได้พัฒนาความรู้เกี่ยวกับการใช้ปัญญาแก้ปัญหา

วันศุกร์ ที่ 17 เดือน กรกฏาคม พ.ศ. 2552
การเงินส่วนบุคคล
- ได้ความรู้เกี่ยวกับแหล่งการเ งิน
- ได้จัดทำการบันทึกรายรับ-รายจ่ายให้ทราบเกี่ยวกับการใช้เงิน รู้จักการอดออม และการประหยัด
- ได้ความรู้เรื่องการบริหารการเงิน

วันศุกร์ ที่ 24 เดือน กรกฏาคม พ.ศ. 2552
การพัฒนาบุคคลิกภาพ
- รู้จักการแต่งกายให้ถูกระเบียบ ถูกกาละเทศะ และตามโอกาสต่างๆ
- รู้เรื่องการแต่งหน้าตามโอกาสต่างๆ
- ได้เรียนรู้เรื่องการพัฒนาบุคคลิกภาพตนเอง


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

วันศุกร์ ที่ 14 เดือน สิงหาคม พ.ศ. 2552
กิจกรรมแขนงธุรกิจระหว่างประเทศ
- รู้จักในเรื่องของวัฒนธรรม ความเชื่อ แนวความคิดระหว่างประเทศ

วันศุกร์ ที่ 21 เดือน สิงหาคม พ.ศ. 2552
กิจกรรมแขนงการตลาด
- รู้จักเส้นทางแห่งความสำเร็จ
- รู้วิธีการดำเนินชีวิตที่ดี การทำงานอย่างมีประสิทธิภาพ

วันศุกร์ ที่ 11 เดือน กันยายน พ.ศ. 2552
ภาษาไทยในชีวิตประจำวัน
-รู้จักประเภทของภาษาไทย
- การใช้ภาษาไทยที่ถูกต้อง
- การรักษาวัฒนธรรมการใช้ภาษาไทย
- การใช้ภาษาไทยในโอกาสต่างๆ

วันศุกร์ ที่ 18 เดือน กันยายน พ.ศ. 2552
วันปัจฉิมนิเทศ
- รู้จักการกตัญญูกตเวทีต่อผู้มีพระคุณ
- การอยู่ร่วมกันอย่างเป็นสุข สงบสุขในสังคม
- การแก้ปัญหาเมื่อปัญหาเกิดขึ้นอย่างถูกต้อง

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

DTS08-26-08-2552

Tree
ทรี (Tree) เป็นโครงสร้างที่มีความสัมพันธ์ระหว่าง โหนดจะมีความสัมพันธ์ลดหลั่นกันเป็นลำดับชั้น (Hierarchical Relationship) เช่นแผนผังองค์ประกอบของหน่วยงานต่างๆ โครงสร้างสารบัญหนังสือ เป็นต้น

ความสัมพันธ์ของโหนดใน Tree

แต่ละโหนดจะมีความสัมพันธ์กับโหนดในระดับที่ต่ำลงมาหนึ่งระดับได้หลายๆ โหนด เรียกโหนดดังกล่าวว่า โหนดแม่ (Parent or Mother Node)โหนดที่อยู่ต่ำกว่าโหนดแม่อยู่หนึ่งระดับ เรียกว่า โหนดลูก(Child Node)โหนดทีอยู่ในระดับสูงสุดและไม่มีโหนดแม่ เรียกว่า โหนดราก(Root Node)โหนดที่มีโหนดแม่เป็นโหนดเดียวกัน เรียกว่า โหนดพี่น้อง(Siblings)โหนดที่ไม่มีโหนดลูก เรียกว่า โหนดใบ(Leave Node)เส้นเชื่อมแสดงความสัมพันธ์ระหว่างโหนดสองโหนด เรียกว่า กิ่ง(Branch)

นิยามของทรี(Tree)

ทรี คือ กราฟที่ต่อเนื่องโดยไม่มีวงจรปิด(loop)ในโครงสร้าง โหนดสองโหนดใดๆ ในทรีต้องมีทางติดต่อกัน ทางเดียวเท่านั้น และทรีที่มี N โหนดต้องมีกิ่งทั้งหมด N-1เส้น

ทรีประกอบด้วยสมาชิกที่เรียกว่า โหนด โดยที่ว่าง ไม่มีโหนดใดๆ เรียกว่านัลทรี(Null Tree) และถ้ามีโหนดหนึ่งเป็นโหนดราก ส่วนที่เหลือจะแบ่งเป็นทรีย่อย (Sub Tree)

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

1.ฟอร์เรสต์ (Forest) หมายถึง กลุ่มของทรีที่เกิดจากการเอาโหนดรากของทรีออก หรือ เซตของทรีที่แยกออกจากกัน(Disjoint Trees)
2.ทรีที่มีแบบแผน (Ordered Tree) หมายถึง ทรีที่โหนดต่างๆในทรีนั้นมีความสัมพันธ์ที่แน่นอน เช่น ไปทางขวา ไปทางซ้าย เป็นต้น
3.ทรีคล้าย (Similar Tree) คือ ทรีที่มีโครงสร้างเหมือนกัน หรือทรีที่มีรูปร่างของทรีเหมือนกัน โดยไม่คำนึ่งถึงข้อมูลทีอยู่ในแต่ละโหนด
4.ทรีเหมือน (Equivalent Tree) คือ ทรีที่เหมือนกันโดยสมบูรณ์โดยต้องเป็นทรีที่คล้ายกันและแต่ละโหนดในตำแหน่งเดียวกันมีข้อมูลเหมือนกัน
5.กำลัง (Degree) หมายถึง จำนวนทรีย่อยของในโหนดนั้นๆ
6.ระดับของโหนด (Level of Node) คือ ระยะทางในแนวดิ่งของโหนดนั้นๆ ที่อยู่ห่างจากโหนดราก เมื่อกำหนดให้ โหนดรากของทรีนั้นอยู่ระดับ 1และกิ่งแต่ละกิ่งมีความเท่ากันหมด คือยาวเท่ากับ 1 หน่วยซึ่งระดับของโหนดจะเท่ากับจำนวนกิ่งที่น้อยที่สุดจากโหนดรากไปยังโหนดใดบวกด้วย 1และจำนวนเส้นทางตามแนวดิ่งของโหนดใดๆซึ่งห่างจากโหนดราก เรียกว่า ความสูง (Height) หรือความลึก(Depth)

การแทนที่ทรีในหน่วยความจำหลัก

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

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

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

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

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

การท่องไปในไบนารีทรี
1.การท่องไปแบบพีออร์เดอร์(Preorder Traversal)เป็นการเดินเข้าไปเยือนโหนดต่างๆใสทรีด้วยวิธี NLR มีขั้นตอนการเดินดังต่อไปนี้
1.1เยื่อนโหนดราก
1.2ท่องไปในทรีย่อยทางซ้ายแบบพรีออร์เดอร์
1.3ท่องไปในทรีย่อยทางขวาแบบพรีออร์เดอร์

2.การท่องไปอบบอินออร์เดอร์(Inorder Traversal)เป็นการเดินเข้าไปเยือนโหนดต่างๆในทรีด้วยวิธี LNRมีขั้นตอนการเดินดังต่อไปนี้
2.1ท่องไปในทรีย่อยทางซ้ายแบบอินออร์เดอร์
2.2เยื่อนโหนดราก
2.3ท่องไปในทรีย่อยทางขวาแบบอินออร์เดอร์

3.การท่องไปแบบโพสออร์เดอร์(Postorder Traversal)เป็นการเดินเข้าไปเยื่อนโหนดต่างๆในทรีด้วยวิธี LRNมีขั้นตอนการเดินดังต่อไปนี้
3.1ท่องไปในทรีย่อยทางซ้ายแบบโพสต์ออร์เดอร์
3.2ท่องไปในทรีย่อยทางขวาแบบโพสต์ออร์เดอร์3.3เยือนโหนดราก

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

DTS07-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

วันอังคารที่ 4 สิงหาคม พ.ศ. 2552

DTS06-30-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 เสียก่อน โดยลักษณะของการแปลงนิพจน์จะใช้การเปรียบเทียบความสำคัญของตัวดำเนินการ

ลำดับความสำคัญของตัวดำเนินการ
+ -
* /
(
)

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

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

วันอังคารที่ 28 กรกฎาคม พ.ศ. 2552

DTS05-04-27-2552

Linked List และ Stack
การลบโหนด (Delete node)
กำหนดค่า pList คือ พอยน์เตอร์เริ่มต้น
pPre คือ พอยน์เตอร์โหนด
pLoc คือ โหนดพอยน์เตอร์
dataout คือ ข้อมูลที่จัดเก็บในโหนด
หลักการทำงาน คือ ทำการลบข้อมูลพร้อมโหนดออกจากลิงค์ลิสต์และคืนค่าหน่วยความจำ
ก่อนการกำหนดค่า กำหนด pList คือ พอยน์เตอร์ที่ชี้ไปยังโหนดต้นลิสต์
pPre คือ พอยน์เตอร์ที่ใช้ไปยังลิงค์ของโหนดก่อนหน้าโหนดที่ต้องการ
pLoc คือ พอยน์เตอร์ที่ชี้ไปยังโหนดที่ต้องการลบ
dataout คือ ตำแหน่งโหนดที่จัดเก็บข้อมูลที่ต้องการลบ
หลังการทำงาน ข้อมูลจะถูกลบไปและทำการคืนพื้นที่ ที่จองให้กับหน่วยความจำ

การค้นหาลิสต์ (Search list)
กำหนดค่า pList พอยน์เตอร์เริ่มต้น
pPre พอยน์เตอร์โหนด
pLoc พอยน์เตอร์โหนด
target ชนิดของคีย์
หลักการทำงาน ทำการรันหาลิสต์และเทียบค่ากับตำแหน่งชนิดของคีย์
เพื่อตรวจสอบการตรงกันของตำแหน่ง
ก่อนการทำงาน กำหนด pList เป็นพอยน์เตอร์ชี้ค่าที่ตำแหน่งเริ่มต้น
กำหนด pPre เป็นพอยน์เตอร์ตัวแปรเก็บตำแหน่งโหนดก่อนหน้า
กำหนด pLoc เป็นพอยน์เตอร์ตัวแปรเก็บตำแหน่งตัวเลือก
กำหนด target เป็นคีย์ที่กำหนดการค้นหา
หลังการทำงาน กำหนด pLoc ชี้ไปยังโหนดและทำการเปรียบค่าคีย์ตามเงื่อนไขจนกว่าจะครบทุกโหนด
หรือค้นเจอลิสต์ที่ต้องการ
การคืนค่า คืนค่าจริงหากค้นเจอลิสต์
คืนค่าเท็จหากค้นไม่พบลิสต์

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

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

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

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

การทำงานของสแตก
Push หรือการนำเข้าข้อมูล
การนำเข้าข้อมูลเป็นการดำเนินการในลักษณะของการเพิ่มข้อมูลในสแตกกรณีที่ไม่มีข้อมูล
ใดอยู่ก็จะนำเข้าไปในตำแหน่งแรก ซึ่งเรียกข้อมูลแรกว่าตำแหน่ง top แต่หากนำข้อมูลเข้าไปใหม่
ตำแหน่ง top ก็จะเปลี่ยนไปเป็นของข้อมูลที่เข้าไปใหม่ และต้องระวังผิดพลาดที่เกิดจาก
stack over flow คือไม่มีพื้นที่ว่างสำหรับนำข้อมูลเข้า
Pop หรือการดึงออกข้อมูล
การดึงออกข้อมูล คือ การนำข้อมูลออกจากสแตก โดยการดึงข้อมูลจากตำแหน่ง top
แต่ก็ต้องตรวจสอบหากไม่มีข้อมูลในสแตกแล้วไปทำการ pop ข้อมูลจะเกิดการผิดพลาด
ที่เรียกว่า Stack Under Flow คือไม่มีข้อมูลภายในสแตกหรือสแตกว่าง

Top หรือตำแหน่งบนสุด
ตำแหน่งบนสุดของสแตกนั้นใช้ top เป็นตัวกำหนด ซึ่งจะทำให้รู้หากต้องการ pop
หรือ push ข้อมูลจะต้องทำที่ตำแหน่งนี้ top เป็นเพียงสิ่งที่บอกตำแหน่งของข้อมูลสูงสุดใหม่
หากมีการ push และ pop ตำแหน่งของ top ก็จะเปลียนไปเสมอ

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


การบ้าน


# include
main()
{
int num;
printf("Enter your num:");
scanf("%d",&num);
if(num >0)
printf("type+\n");
else
if (num==0)
printf("type0\n");
else
printf("type-");
}
แบบ

# inciude
main( )
{
int num;
cout<<“enter you num:”;
cin>>num;
if(num >0)
cout<<“type+\n”;
else if (num= =0)
cout<< “type0\n”;
else cout <<“type-\n”;
}

0utput
output
Enter your num:_
===========================
Enter 8_
type+

ความเหมือนหรือต่างกัน
มีความเหมือนกันในการใช้ เพราะว่า iostream.h นั้นถือได้ว่าเป็นฟังก์ชั่นของC++ เหมือนกันจึงเป็นฟัก์ชั่นที่สามารถใช้ได้ทั้ง C และ C++

วันอังคารที่ 21 กรกฎาคม พ.ศ. 2552

DTS04-15/07/2552

สรุปบทเรียน Set and String , Linked List

อาเรย์ของสตริงนั้นสามารถแบ่งได้เป็น 2 ประเภทคือแบบยาวเท่ากันและยาวไม่เท่ากันกรณียาวไม่เท่ากันนั้นทำได้ดังนี้
char *name[4]={“Thatchapol”, “John”, “Somchai”, “Ratchawee”};
แต่จะทำได้ก็ต่อเมื่อมีการกำหนดค่าเริ่มต้นเท่านั้น
กรณียาวเท่ากันนั้นเราจะทำการกำหนดอาเรย์ของสตริงเป็น 2 มิติ

Linked List
ลิงค์ลิสต์เป็นรูปแบบหนึ่งของโครงสร้างเหมือนกับพอยน์เตอร์คือมีการจัดการข้อมูลแบบไม่ตายตัว (Dynamic Structure) โครงสร้างของลิงค์ลิสต์จะประกอบด้วยโหนดหลาย ๆ โหนดภายใน 1 โหนดจะแบ่งออกเป็น 2 ส่วนคือส่วน data กับ link โดยการเชื่อมโยงไปยังโหนดต่อ ๆ นั้นจะใช้รูปแบบของพอยน์เตอร์เป็นตัวชี้ไปยังโหนดต่อ ๆ ไป
ประเภทของลิงค์ลิสต์นั้นมีหลายประเภทเช่น
1. ลิงค์ลิสต์แบบทิศทางเดียว
2. ลิงค์ลิสต์แบบวงกลม
3. ลิงค์ลิสต์แบบ 2 ทิศทาง
4. ลิงค์ลิสต์แบบหลายทิศทาง

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

ทฤษฏีการดำเนินการ
1. การสร้างลิสต์เนื่องจากลิงค์ลิสต์มีโครงสร้างที่ไม่ตายตัวดังนั้นจะต้องมีการจองพื้นที่บนหน่วยความจำให้กับพอยน์เตอร์ด้วยซึ่งก็คือการสร้างลิสต์ขึ้นมา
หลักการทำงาน : จองพื้นที่หน่วยความจำให้กับลิงค์ลิสต์ก่อนดำเนินการ : ไม่มีการกำหนดค่าหลังการดำเนินการ : พอยน์เตอร์เริ่มต้นมีการจองพื้นที่บนหน่วยความจำการคืนค่า : เนื่องจากหน่วยความจำไม่มีที่ว่าง
2. การแทรกโหนด
กำหนดค่าเริ่มต้น : pList = Head nodeกำหนดค่าเริ่มต้น : pPre = Node pointerกำหนดค่าเริ่มต้น : dataIn = ค่าข้อมูลในโหนด
หลักการทำงาน : ทำการแทกรโหนดที่มีค่าข้อมูลลงในลิงค์ลิสต์ก่อนการทำงาน : กำหนดพอยน์เตอร์ของลิสต์ชี้ไปยังโหนดต้นลิสต์หลังการทำงาน : แทรกโหนดที่จัดเก็บข้อมูลเข้าไปยังลิสต์การคืนค่า : จริง คือแทรกโหนดเรียบร้อยการคืนค่า : เท็จ ถ้าหน่วยความจำเต็ม overflow

วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552

DTS03-01/07/2552

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

เรื่อง Pointer ,Set and String

pointer

ตัวแปร Pointer เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่Address ของตัวแปร แทนที่จะเก็บข้อมูลต่างๆ เหมือนตัวแปรชนิดอื่นๆ จากคุณสมบุติของ ตัวแปรชนิด Pointer จึงมองดูเหมือนกับ ตัวชี้ หรือพอยน์เตอร์ ซึ่งชี้ไปที่ Address ของตัวแปรการกำหนดตัวแปร Pointer
การกำหนดตัวแปร Pointer จะคล้ายกับการกำหนดตัวแปรชนิดต่างๆ เพียงแต่ต้องมีเครื่องหมาย * หน้าชื่อตัวแปร
ดังนี้
int *pt;
ในที่นี้กำหนดให้ pt เป็นตัวแปร Pointer ซึ่งเก็บ Address ของตัวแปรชนิดตัวเลขจำนวนเต็ม
ในเรื่อง Pointer มีเครื่องหมาย 2 ชนิด คือ * และ & เครื่องหมาย * จะให้ค่า ของข้อมูล ซึ่งเก็บอยู่ใน Address โดย Address นี้เก็บ อยู่ในตัวแปร Pointer ซึ่งอยู่หลังเครื่องหมาย * สำหรับเครื่องหมาย & จะให้ค่า Address ของตัวแปรซึ่งอยูหลังเครื่องหมาย &

ข้อสังเกตุเกี่ยวกับตัวแปร Pointer (ประเภท int)- การใช้งานตัวแปร pointer มีได้ 2 แบบดังนี้
*pt_age จะหมายถึงการนำค่าของ pt_age ออกมาแสดง
pt_age จะหมายถึงการนำตำแหน่งหน่วยความจำของ pt_age มาแสดง

โครงสร้างข้อมูลแบบ String

string หมายถึงอักขระที่มีความยาวมากกว่า 1 ตัวแรงต่อกันเป็นข้อความ โดยข้อมูลชนิดขด้อความต้องเขียนอยู่ภายในเครื่องหมาย " " (Double quote)
หรือพูดง่าย ๆ ก็คือ String เป็น Array ของ อักขระนั่นเอง ตัวอย่างเช่น
char name[20];
หมายถึง string ที่เก็บข้อความได้ 19 ตัวอักษร ตามปกติแล้วจุดสิ้นสุดของ string จะเป็น \0
มีฟังก์ชั่นที่เกี่ยวข้องกับ String ดังนี้
getchar(); // ใช้สำหรับรับข้อมูลชนิดอักขระเข้ามาจากคีย์บอร์ด โดยรับครั้งละ 1 อักขระเท่านั้น
gets(); // จะใช้รับข้อมูลชนิดข้อความเข้ามาทางคีย์บอร์ด
putchar(); // คือการแสดงผลอักขระออกทางหน้าจอ
puts(); // ใช้ในการแสดงข้อความออกจากหน้าจอ

โครงสร้างข้อมูลแบบเซต (set)

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

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

แนะนำตัว

DTS02-27/06/52

สรุปเรื่อง Array and Recor

ตัวแปรอาเรย์สามารถเก็บข้อมูลหลายๆข้อมูลไว้ได้โดยไม่ต้องใช้ตัวแปรหลายตัว เช่นถ้าต้องการเก็บอายุของเพื่อนทั้ง 20 คน ถ้าเราใช้ตัวแปรแบบ int เราจะต้องประกาศตัวแปร age1, age2, age3,.....,age20 ให้เป็นแบบ int ซึ่งเป็นการประกาศตัวแปรถึง 20 ตัวด้วยกัน แต่ถ้าใช้อาเรย์เราประกาศตัวแปร age ให้เป็นอาเรย์แบบ int เพียงตัวเดียวก็สามารถเก็บค่าทั้ง 20 ค่าได้แล้ว


อาร์เรย์ เป็นแบบหนึ่งของโครงสร้างที่เรียกว่า Linear List ซึ่งมีจำนวนรายการ ( Element) จำกัด และข้อมูลที่เก็บอยู่ในอาร์เรย์แต่ละช่องจะต้องเป็นข้อมูลชนิดเดียวกัน อยู่ภายใต้ตัวแปรชื่อเดียวกัน โดยขนาดของแต่ละช่องต้องเท่ากันหมด การอ้างถึงข้อมูลในแต่ละช่องของของอาร์เรย์ ต้องอาศัยตัวห้อย Subscript เช่น กำหนดให้ Array A มีขนาด 100 รายการ A[5] จะหมายถึง ค่าของอาร์เรย์ตำแหน่งที่ 5 ในอาร์เรย์นั้น ซึ่ง Subscript ก็คือ เลข 5 จำนวน Subscript ที่ต้องการใช้เวลาเรียกใช้ค่าใน Array เรียกว่า มิติ ไดเมนชั่น ( Dimention) ของ Array นั้น

อะเรย์ 1 มิติ


รูปแบบ
data-type array-name[expression]
data-type คือ ประเภทของข้อมูล เช่น int char float
array-name คือ ชื่อของอะเรย์
expression คือ นิพจน์จำนวนเต็มซึ่งระบุจำนวนสมาชิกของอะเรย์

Initialization คือ การกำหนดาเริ่มต้นให้กับอะเรย์
การกำหนดค่าให้กับตัวแปรชุดที่มีค่าเป็นตัวเลข
รูปแบบ
data-type array-name[n]={value1,value2,...,value n};
ตัวอย่าง int num[5]={1,2,3,4,5}; หรือ int num[]={1,2,3,4,5};



การกำหนดค่าให้กับตัวแปรชุดชนิด Character
รูปแบบ
char array-name[n]="string";
ตัวอย่าง char ch[9]="SAWASDEE"



การส่งอะเรย์ให้ฟังก์ชัน
มี 2 ลักษณะคือ
1. การกำหนด array element เป็นพารามิเตอร์ส่งค่าให้กับฟังก์ชัน ทำได้โดยอ้างถึงชื่ออะเรย์พร้อมระบุ subscript
2. ส่งอะเรย์ทั้งชุดให้ฟังก์ชัน ทำได้โดยอ้างถึงชื่ออะเรย์โดยไม่มี subscript


**การส่งผ่านอะเรย์ให้กับฟังก์ชันเป็นส่งผ่านโดยการอ้างอิงเรียกว่า Pass by reference


อะเรย์ 2 มิติ


รูปแบบ
type array-name[n][m];

type หมายถึง ชนิดของตัวแปรที่ต้องการประกาศเป็นอะเรย์
array-name หมายถึง ชื่อของตัวอปรที่ต้องการประกาศ
n หมายถึง ตัวเลขที่แสดงตำแหน่งของแถว
m หมายถึง ตัวเลขที่แสดงตำแหน่งของคอลัมน์


อาเรย์ 2 มิติจะเก็บข้อมูลไว้ในลักษณะของตาราง การสร้างอาเรย์ 2 มิตินั้นเราจะเขียนโค้ดภาษาซีดังนี้



int a[3][3];
int b[2][3];


การนำค่าที่ต้องการเก็บในอาเรย์เราจะต้องอ้างถึงลำดับของสมาชิกช่องนั้นๆ ทั้งลำดับในแนวนอนและลำดับในแนวตั้ง หรือจะมองในลักษณะของคู่ลำดับก็ได้ดังรูปต่อไปนี้
int a[3][3];
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][2] a[1][2] a[2][2]




จะเห็นว่าหมายเลขลำดับของอาเรย์ในแต่ละแนวเริ่มต้นจาก 0 จนถึง “ขนาดในแนวนั้นลบด้วย 1” เช่น ถ้าประกาศอาเรย์ 2 มิติขนาด 3x3 ลำดับในแนวนอนก็จะเริ่มจาก 0 ถึง 2 รวมทั้งหมด 3 ช่อง และในแนวตั้งก็จะเริ่มจาก 0 ถึง 2 รวมทั้งหมด 3 ช่องเช่นกันสำหรับวิธีการนำเอาข้อมูลใส่ลงในตัวแปรอาเรย์ 2 มิตินี้ก็จะใช้หลักการเดียวกันกับอาเรย์ 1 มิติ โดยระบุช่องที่ต้องการใส่ค่าลงไป เช่นถ้าจะใส่ค่า 10 ลงในช่อง a[1][2] เราจะเขียนโปรแกรมดังนี้



int a[3][3];
a[1][2] = 10;

int a[3][3];
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][2] 10 a[2][2]




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





การบ้าน

struct personal/Details
{
char name[30];
char Lastname
char nickname[10];
char address;
char sex;
int brithday;
int year;
int high;
int weight;
int telephone[10];
};
struct personal/Details1=

{"sarunya","pinta","oil",,"259 Moo.7 . Tumbol.danchai Umpor.danchai phare" ,1"female"
"19/08/1988","155cm"," 45","0837185714"}

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

รูป

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

ชื่อ :ศรัญญา ปินตา รหัส 50152792021
Name : sarunya pinta
ชื่อเล่น :ออย
วัน/เดือน/ปีเกิด : 19 มีนาคม 2531อายุ : 20 ปี
ที่อยู่ปัจจุบัน : 80/203ถนนบานา-ตราด แขวงดอกไม้ เขตประเวศ 12500
การศึกษาปัจจุบัน : มหาวิทยาลัยราชภัฎสวนดุสิต
หลักสูตร : การบริหารธุรกิจ ( คอมพิวเตอร์ธุรกิจ ) คณะวิทยาการจัดการ
งานอดิเรก : เล่นคอมพิวเตอร์
คติประจำใจ : อย่ากลัวที่จะลงมือทำ!