วิชาการ.คอม - คลังความรู้ ปัญญาไทย เพื่อการศึกษาไทย เพราะเรารักเมืองไทย
เว็บส่งเสริมการเรียนรู้ดีเด่น 2547 (สมาคมผู้ดูแลเว็บไทย)   |   เว็บสื่อวิทยาศาสตร์ดีเด่น 2549 (กระทรวงวิทย์)   |   เว็บการศึกษาที่มียอดผู้เข้าชมสูงสุด 2549, 2550 (TrueHits)
ขอขอบคุณ บริษัท ปตท. จำกัด (มหาชน) และ สสวท ที่ให้การสนับสนุน  
โนตย่อโครงสร้างข้อมูลเชิญที่นี่จ้า(วิทย์คอม)
โพสต์เมื่อ: 15:12 วันที่ 27 ส.ค. 2548         ชมแล้ว: 8,372 ตอบแล้ว: 31

มีโน๊ตย่อโครงสร้างข้อมูลให้อ่านกันฟรีๆ
ใกล้สอบแล้ว อาจจะอ่านกันไม่ทัน


samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

จำนวน 30 ความเห็น, หน้า่ | -1- 2|
ความเห็นเพิ่มเติมที่ 1 27 ส.ค. 2548 (15:16)
อ้อ อันนี้เรื่อง คิวนะ

samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 2 27 ส.ค. 2548 (15:20)
โพสต์ภาพไม่ติด
ก้อบลงเลยละกัน
อันนี้เรื่องคิว
ขั้นตอนในการนำเข้าข้อมูลธรรมดา
If rear = max then คิวเต็ม
else
begin Rear = rear + 1
Q[rear] = data
if frount = 0 then frount = 1
end;
end if
ขั้นตอนในการนำข้อมูลออกธรรมดา
If frount = 0 then ไม่มีข้อมูล
else begin นำข้อมูลออก
if frount = rear then
begin
frount = 0
rear = 0
end;
else
frount = frount + 1
end if;
end;
end if
ขั้นตอนการนำข้อมูลเข้าสู่คิววงกลม
If (frount = 1and rear = max) or
(rear + 1 = frount) then คิวเต็ม
else
begin
If rear = max then rear = 1
else begin
rear = rear + 1
end;
end if;
end;
end if;
ขั้นตอนการนำข้อมูลออกจากคิววงกลม
If frount = 0 then ไม่มีข้อมูล
else begin นำข้อมูลออกจากคิว (data = Q[frount])
If frount = rear then
begin
frount = 0;
rear = 0;
end;
else
if front = max then front = 1
else front = front +1
end if;
end if
การใช้คิว อันนี้ก็สำคัญ
คิวธรรมดา ใส่ข้อมูล R ขยับ F อยู่เฉยๆ
ลบข้อมูล R อยู่เฉยๆ F เป็นฝ่ายขยับแทน
คิววงกลม frount - rear = 1 คิวเต็ม
frount น้อยกว่า rear ไม่เต็ม
Frount = rear ข้อมูลตัวเดียว
ตัวอย่าง f = 6 r = 2 แปลว่า ข้อมูลอยู่ที่ 6 (ซึ่งเป็นช่องสุดท้ายของคิว) และก็ 1 (ช่องแรกของคิว) ตามด้วย 2(ท้ายแถวในตอนนี้)
เวลาใส่ข้อมูล ใส่ท้ายแถว สมมุติ r = 2 ใส่ข้อมูล 1 ตัวก็จะได้ f = 6 r = 3
ลบข้อมูลอีกตัว r = 2 เหมือนเดิม r ห้ามขยับอยู่นิ่งๆ f = 4
อัลกอฉบับภาษาไทย
1. การเพิ่มข้อมูลคิวธรรมดา 1. ตรวจสอบว่า ท้ายแถว = ตำแหน่งสุดท้ายของคิว(ขนาดของคิว) หรือไม่ ถ้าเป็นเช่นนั้น สรุปว่า คิวเต็ม
2. ถ้าไม่ใช่ บวกตำแหน่งท้ายแถวไปอีก 1 คือ + ค่า r อีก 1 แล้วเอาข้อมูลใส่ในคิว
3. ตรวจสอบว่า ตอนนี้ต้นคิวเป็น 0 (คือไม่มีข้อมูล) หรือไม่ ถ้าใช่ให้เพิ่มค่า front อีก 1 ถ้าไม่ใช่ ให้อยู่เฉยๆๆ
4. จบการทำงาน เย้ๆๆๆๆ แต่ หยุด Stop อย่าลืมตรวจสอบความถูกต้องก่อนนาจ๊า
2. การลบข้อมูลคิวธรรมดา 1. ตรวจสอบว่า หัวแถว = 0 หรือไม่ ถ้าเป็นเช่นนั้น สรุปว่า ไม่มีข้อมูล
2. ถ้าไม่ใช่ให้นำข้อมูลออก แล้วเช็คว่า หัวคิว = ท้ายคิว หรือไม่ ถ้าเป็นเช่นนั้น ให้หัวคิวและท้ายคิว = 0
3. ถ้าไม่ใช่ให้บวกค่า f ไปอีก 1
4. จบการทำงาน เย้ๆๆๆๆ แต่ ช้าก่อน อย่าลืมตรวจสอบความถูกต้องก่อนอีกครั้งนา ใจเย็นๆ เวลาเยอะ
3. การเพิ่มข้อมูลคิววงกลม 1. ตรวจสอบว่า หัวคิวเป็น 1 และท้ายแถวของคิว = MAX หรือ ท้ายแถว + 1 = หัวแถว หรือไม่ ถ้าใช่ คิวเต็ม
2. ถ้าไม่ใช่ ท้ายแถวของคิว = MAX หรือไม่ งงล่ะซี้ ก็เมื่อกี้มัน and คือถ้าจะเป็นจริงต้องถูกทั้ง 2 เงื่อนไขนี่จ๊า
เอ้า ทำงานต่อ ขยันๆหน่อยเร็ว พวกเราชาวคอมพิวเตอร์ เดี๋ยวเขาจะหาว่าคอมพิวเตอรฺขี้เกียจ
3. ถ้าใช่ ให้เพิ่มค่า ท้ายแถว = 1 แปลว่าอะไร ก็แปลว่า ถ้าตอนนี้ท้ายแถวอยู่ตำแหน่งสุดท้าย ให้ย้ายหางแถวมาที่ 1
4. ถ้าไม่ใช่ล่ะ ก็ให้หางแถวบวกค่าไปอีก 1 เท่านั้นเอง ไม่ยากเลยน้อ ฮือออ ฮืออ บอกซิว่าไม่ยาก
5. จบการทำงานแล้วจ้าที่รัก อย่าลืมตรวจสอบความถูกต้องอีกครั้งนะ ต่อไปเรื่องสุดท้ายแล้ว
4. การลบข้อมูลคิววงกลม 1. ตรวจสอบว่า ท้ายแถว = 0 หรือไม่ ถ้าใช่สรุปว่า ว่าาาา บ่มีข้อมูลจะฮื้ออกแล้วเน้อ
2. ถ้าไม่ใช่ล่ะ ถ้าไม่ใช่ก็เอาข้อมูลออกจากคิวสิ
3. ต่อจากนั้นก็มาตรวจสอบว่า หัวคิว กับท้ายคิวเป็นตำแหน่งเดียวกันหรือไม่ ถ้าใช่ ให้ f และ r เป็น 0 ทั้งคู่
4. ถ้าหัวคิวกับท้ายคิวไม่เป็นตำแหน่งเดียวกัน ก็ให้ตรวจสอบอีกว่าหัวคิว = MAX หรือเปล่า
5. ถ้าหัวคิวไม่เท่ากับ MAX ให้หัวคิวกลับมาที่ 1
6. ถ้าหิวคิว = MAX ให้บวกค่า หัวคิวอีก 1 แล้วจบการทำงาน
เป็นไงบ้าง การเรียนแม้เหนื่อยยาก ต้องลำบากอย่างท้อถอย สุดทางที่รอคอย คือโปรเจ็กส์กับปริญญานาจ๊ะ อย่าลืม สู้โว๊ย
เอโพ้สต์แล้วจะเป็นยังไงนา
สงสัยต้องจัดหน้าใหม่
อ่านรู้เรื่องกันมั้ยอ่ะ ตัวเอง
เดี่ยวจัดหน้ากันเองนะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 3 27 ส.ค. 2548 (15:22)
อ้ะ เอาไปอีกเรื่อง
เรื่อง Stack
รื่องของ Stack
ข้อมูลเข้าทีละ 1 (พุช)
ออกทีละ 1 (ป้อบ)
เข้าก่อน ออกทีหลัง
เข้าทีหลัง ออกก่อน
ทางเข้าทางออกไม่ใช่ทางเดียวกัน
การคำนวน มี 2 ชนิดข้อมูล(ในนิพจน์)
1. operand ต่อไปจะเรียกตัวธรรมดาแบ่งได้อีก 2 อย่าง
1. ตัวแปร
2. ค่าคงที่ (Constant value , Constant Number)
2. operator เช่น + - * / ^[**] และ ( กับ )
นิพจน์ มี 2 ประเภท
1. Infix Operand Operator Operand เช่น A + B
2. postfix Operand Operand Operator เช่น A B +
3. prefix ไม่ต้องสนใจให้งงซะงั้น ไม่ออกสอบ
ค่าศักดิ์ของ + - * / ^[**] และ ( กับ ) ดังนี้
Operator Infix Postfix
+ - 1 1
* / 2 2
^ 3 3
( 4 0
) 0 ไม่มีค่า
การเปลี่ยนนิพจน์ธรรมดา เป็นนิพจน์ โพสต์ฟิกซ์
1. อ่านตัวเลขจาก ซ้ายไปขวา ใจเย็นๆอย่ารีบ มันง่ายเดี๋ยวผิดได้ ยิ่งนิพจน์ยาวๆยิ่งต้องระวัง!
2. หากเจอ เครื่องหมาย ให้ไปเก็บใน Stack
3. เจอตัวธรรมดา ไปใส่ที่ กล่องนิพจน์โพสต์ฟิกส์ (กล่องผลลัพธ์) กล่องยาวๆ ออกได้ทางตูดทางเดียว
4. ใน Stack มีกฎว่า (อันนี้สำคัญมากกก ต้องระวัง) ตัวที่จะเอาไปใส่ในสแตก ต้องตรวจสอบก่อนว่า
นิพจน์ใน Stack นั้นมีศักดิ์มากกว่าหรือเปล่าถ้าใช้ให้ ป้อปออกทีเดียวเท่านั้น
กฏนี้ไม่เกี่ยวกับวงเล็บปิด เปิด จะเข้ากฎนี้เอาออกได้เลย สำคัญมากก คราวที่แล้วก็ผิดตรงนี้ ใจเย็นๆ
หมายความว่าอย่างไรกฏนี้ หมายความว่า สมมุติในสแตกเป็น + อยู่ จะเอา * มาใส่ อันนี้ได้
แต่ถ้าในแสตกเป็น * อยู่ จะเอา + ใส่ ต้องเอา + ออกก่อน ถึงจะเอา * ใส่ได้
5. กฎข้อที่ 2 ของแสตก คือ ถ้ามีวงเล็บเปิดอยู่ในแสตก แล้วอ่านไปเรื่อยๆเจอวงเล็บปิด
ให้เอาสิ่งที่มีอยู่ในแสตก ออกจนถึงวงเล็บเปิดเท่านั้น ส่วนวงเล็บเปิดไม่ต้องแสยงใส่ในกล่องผลลัพธ์ด้วย
6. ค่อยๆอ่าน ค่อยๆทำไปเรื่อยๆ ถ้าข้อมูลหมดแล้วล่ะก็ ..... อันนี้สำคัญใจเย็นๆทำดีๆ
เอาข้อมูลใน Stack ออกให้หมด
การเอาข้อมูลออกทั้งข้อ 5 ข้อ 6
การป้อบ ป้อบได้ทีละ 1 เพราะฉะนั้น ตัวที่อยู่บน เอามาใส่ในกล่องผลลัพท์ก่อน
การคำนวณนิพจน์โพสต์ฟิกส์
1. เอาตัวธรรมดาไปเก็บใน Stack
2. ถ้าเจอเครื่องหมายเมื่อไร ให้ป้อบใน Stack ออกมา 2 ตัว (ป้อบ 2 ครั้ง)
3. ตัวที่ป้อบออกมาตัวแรก ไว้ข้างหลัง ตัวที่ป้อบตามมา เอาไว้ข้างหน้า (ระวังอย่าสับสน) ใส่เครื่องหมายตรงกลาง
4. พอคำนวณเสร็จ เก็บค่าไว้ในแสตก
5. มีข้อมูลต่อ อ่านต่อเรื่อยๆ
6. ไม่มีข้อมูล จบการทำงาน เอาตัวที่อยู่ใน Stack มาตอบ
ขอให้โชคดี ใจเย็นๆ อย่ารีบร้อน อย่าตื่นเต้น คือนอนให้เพียงพอ หายใจลึกๆ ทำได้อยู่แล้ว เก่งแล้วนี่

จัดหน้าเองนะคะเพื่อนๆ
ก้อบลง Word แล้วจัดกันตามสบายนะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 4 27 ส.ค. 2548 (15:44)
ลืมบอกไป เนื้อหาที่จะเอาโพสต์เป็นฉะนี้
1 เรื่องอะเรย์
อะเรย์ 1 2 3 มิติ
การหาตำแหน่งเริ่มต้น
การหาตำแหน่งใดๆ
การหาขนาดแต่ละช่อง
การหาขนาของหน่วยความจำที่ใช้ทั้งหมดของอะเรย์
การหาจำนวนสมาชิก
2 ลิงค์ลิสต์
เพิ่มข้อมูลในลิสต์
ด้านซ้ายสุด
ด้านขวาสุด
ตรงกลาง
ทั้งลิงค์หัวเดียว และ 2 หัว
ลบข้อมูลในลิสต์
ด้านซ้ายสุด
ด้านขวาสุด
ตรงกลาง
ทั้งลิงค์หัวเดียว และ 2 หัว
แสดงเส้นทางการเดินทางของลิสต์
บอกไว้ก่อนนะจ๊ะว่าจัดหน้าไม่ได้
หากจะดูโปรแกรมให้รู้เรื่อง
ให้ก้อบไปเปิดที่ word แล้วจัดตามหลักการของมัน
ต่อไปเป็นเรื่องของแสตก
การนำข้อมูลเข้า และออก
การเปลี่ยนอินฟิกซ์เป็นโพสต์ฟิกต์
การคำนวนผลลัพธ์ของอินฟิกส์
สุดท้ายของที่นี่(บางทีอาจเขียนเพิ่มก็ได้)คือ
เรื่องของคิว
เขียนอธิบายขั้นตอนการนำเข้าข้อมูลใส่คิว
และนำออกจากคิว
แสดงการหาตำแหน่งของหัวคิวและท้ายคิว
ในการดำเนินการตามที่กำหนดให้จ้า
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 5 27 ส.ค. 2548 (15:49)
อธิบายเรื่องคิวนิดหนึ่ง
ค่า f , r , max เป็นค่าที่กำหนดขึ้นมาใช้ในการทำงาน
เป็นตัวแปรชนิด Non Constant
คือเปลี่ยนค่าได้
ตามผลของการทำงานจ้า
อีกเรื่องหนึ่ง
ภาษาที่ใช้ในการเขียนจะเป็นภาษาปาสคาลเท่านั้น
เพื่อนคนไหนสนใจจะเขียนเป็นภาษาอื่นก็เขียนเองนะจ้ะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 6 27 ส.ค. 2548 (15:56)
ใครอ่านโปรแกรมแล้วเวียนหัว
เราเก็บต้นฉบับไว้ที่เมมมอรีที่บ้าน
ส่งอีเมลล์ไปขอได้จ้า
คลิกที่ชื่อ ส่งไปตามอีเมลล์เลย
อ้อมีอีเมลล์เพิ่มเติมบอกในโพสต์บอกว่ามีโปรแกรมโหลดฟรีอ่ะค่ะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 7 27 ส.ค. 2548 (16:39)
อรกเรื่องเรื่องลิงค์ลิสต์ วันนี้เสร็จแค่นี้ก่อน
เดี๋นวจะมาโพสต์ใหม่จ้า
บ้าย บาย
ลิงค์ลิสต์
สาเหตุการเกิดลิงค์ลิสต์ คือมีปัญหาของการใช้อะเรย์ดังนี้
1. ขนาดคงที่
2. การเพิ่มข้อมูลจะต้องขยับทั้งหมด และต้องเสียเวลาในการเรียงลำดับใหม่
3. การลบข้อมูลเช่นเดียวกับด้านบน
คำที่จะเจอเมื่อ อะเรย์เต็ม คือ Out of Memory หรือ Too Many Memory จ๊ะ
เราเรียกสมาชิกของลิงค์ลิสต์ว่า โหนด
โหนดจะมีลักษณะที่อนุมาณได้ว่า มีช่อง 2 ช่อง
ช่องหนึ่งเก็บข้อมูล อีกช่องเก็บว่าช่องที่เก็บข้อมูลต่อไปเก็บที่ไหน
การเรียกชื่อโหนดต่างๆของลิงค์ลิสต์แขนเดียว
Null แปลว่าเป็นลิงค์ลิสต์ตัวสุดท้าย ไม่ได้จับกับใครอีก
สมมุติเราชื่อ A แล้วเราไปจับกับเธอ ซึ่งเธอยังไม่มีชื่อ
เมื่อเราจับเธอเสร็จเรียบร้อยแล้ว เธอจะชื่อว่าเป็นลิงค์ของเรา เช่นเธอชื่อว่า Link(A)
และเมื่อเธอไปจับกับคนอื่นต่อ คนที่เธอไปจับเขาจะเรียกว่า Link(link(A))
การกระทำกับลิงค์ลิสต์ที่สำคัญ
1. การเพิ่มข้อมูล
2. การลบข้อมูล
ซึ่งสิ่งสำคัญอยู่ที่ว่า ลิงค์ลิสต์สามารถแทรกตรงกลางได้ค่ะ
ลิงค์ลิสต์มี 2 ประเภท
1. ลิงค์ลิสต์เดี่ยว
2. ลิงค์ลิสต์คู่
ลักษณะของลิงค์ลิสต์คู่ เหมือนคนเรามีแขน 2 แขน
แต่ละแขนไปจับเธอ
เช่นเดียวกันเธอก็ต้องจับเราด้วย
แต่ถ้าเรากับเธอแค่แขนเดียว
หรือเธอจับเราโดยที่เราไม่จับเธอ
สายก็ไม่ขาด-
การเรียกชื่อโหนดต่างๆของลิงค์ลิสต์แขนเดียว
มันก็คล้ายๆกับการเรียกของลิงค์ลิงส์เดี่ยว แต่เธอมีสิทธิ์ที่จะจับใครก็ได้อีกคน คือจับ 2 มือได้
การเรียกแขน เนื่องจากมี 2 แขน
จึงเรียกดังนี้ แขนซ้ายเราจะเรียกว่า Rlink(x)
x คือชื่อว่าใครจับเธอ ก็ใส่ชื่อคนนั้นแทนใน x เลย
ซึ่งคนคนนั้นที่เขามาจับเธอ
แน่นอน แขนขวาก็ต้องเรียกเป็นลิงค์เช่น
เธอไปจับ Rlink(P) ด้วยแขนขวา เธอก็จะชื่อ Llink(Rlink(P))
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกขวาสุดของลิงค์(ลิงค์ตัวสุดท้าย)
Rlink(New) = Null
Llink(New) = Null
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกตรงกลางของลิงค์
Llink(Rlink(P)) = New
Rlink(New) = Rlink(P)
Llink(New) = P
Rlink(P) = New
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกขวาสุดของลิงค์(ลิงค์ตัวสุดท้าย)
Rlink(New) = L
Llink(L) = New
L = New
Llink(New) = Null
การลบโหนดในลิงลิสต์คู่ที่มีโหนดเดียว
L = Null
R = Null
การลบโหนดซ้ายสุดของลิงค์ลิสต์คู่
L = Rlink(P)
Llink(P) = Null
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 8 27 ส.ค. 2548 (16:41)
ภาพของเรื่องลิงค์ลิสต์ขอได้นะจ๊ะ
เรื่องนี้เรียนแล้วต้องใช้ภาพ
อ้อมีแบบฝึกให้ด้วยนะ
แต่โพสต์แล้วมันไม่ติดง่ะ
เจอกันคราวหน้านะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 9 28 ส.ค. 2548 (14:20)
คือว่าลิงค์ลิสต์มัน Error ไปแล้ว
ใครอ่านไม่รู้เรื่อง ช่วยตัวเองละกันนะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 10 28 ส.ค. 2548 (15:06)
เอาเรื่องลิงค์ใหม่นะ รบกวนพี่ทีมงานลบกระทู้ที่ 7 ด้วยค่ะ เดี๋ยวงง
ลิงค์ลิสต์
สาเหตุการเกิดลิงค์ลิสต์ คือมีปัญหาของการใช้อะเรย์ดังนี้
1. ขนาดคงที่
2. การเพิ่มข้อมูลจะต้องขยับทั้งหมด และต้องเสียเวลาในการเรียงลำดับใหม่
3. การลบข้อมูลเช่นเดียวกับด้านบน
คำที่จะเจอเมื่อ อะเรย์เต็ม คือ Out of Memory หรือ Too Many Memory จ๊ะ
เราเรียกสมาชิกของลิงค์ลิสต์ว่า โหนด
โหนดจะมีลักษณะที่อนุมาณได้ว่า มีช่อง 2 ช่อง
ช่องหนึ่งเก็บข้อมูล อีกช่องเก็บว่าช่องที่เก็บข้อมูลต่อไปเก็บที่ไหน
การเรียกชื่อโหนดต่างๆของลิงค์ลิสต์แขนเดียว
Null แปลว่าเป็นลิงค์ลิสต์ตัวสุดท้าย ไม่ได้จับกับใครอีก
สมมุติเราชื่อ A แล้วเราไปจับกับเธอ ซึ่งเธอยังไม่มีชื่อ
เมื่อเราจับเธอเสร็จเรียบร้อยแล้ว เธอจะชื่อว่าเป็นลิงค์ของเรา เช่นเธอชื่อว่า Link(A)
และเมื่อเธอไปจับกับคนอื่นต่อ คนที่เธอไปจับเขาจะเรียกว่า Link(link(A))
การกระทำกับลิงค์ลิสต์ที่สำคัญ
1. การเพิ่มข้อมูล
2. การลบข้อมูล
ซึ่งสิ่งสำคัญอยู่ที่ว่า ลิงค์ลิสต์สามารถแทรกตรงกลางได้ค่ะ
ลิงค์ลิสต์มี 2 ประเภท
1. ลิงค์ลิสต์เดี่ยว
2. ลิงค์ลิสต์คู่
ลักษณะของลิงค์ลิสต์คู่ เหมือนคนเรามีแขน 2 แขน
แต่ละแขนไปจับเธอ
เช่นเดียวกันเธอก็ต้องจับเราด้วย
แต่ถ้าเรากับเธอแค่แขนเดียว
หรือเธอจับเราโดยที่เราไม่จับเธอ
สายก็ไม่ขาด-
การเรียกชื่อโหนดต่างๆของลิงค์ลิสต์แขนเดียว
มันก็คล้ายๆกับการเรียกของลิงค์ลิงส์เดี่ยว แต่เธอมีสิทธิ์ที่จะจับใครก็ได้อีกคน คือจับ 2 มือได้
การเรียกแขน เนื่องจากมี 2 แขน
จึงเรียกดังนี้ แขนซ้ายเราจะเรียกว่า Rlink(x)
x คือชื่อว่าใครจับเธอ ก็ใส่ชื่อคนนั้นแทนใน x เลย
ซึ่งคนคนนั้นที่เขามาจับเธอ
แน่นอน แขนขวาก็ต้องเรียกเป็นลิงค์เช่น
เธอไปจับ Rlink(P) ด้วยแขนขวา เธอก็จะชื่อ Llink(Rlink(P))
การท่องไปในลิงค์ลิสต์เดี่ยว
P = Link(P)
การแทรกข้อมูลลิงค์ลิสต์เดี่ยวโดยแทรกทางซ้ายสุดของลิงค์(ลิงค์ตัวแรก)
Link(New) = Frist
Frist = New
การแทรกข้อมูลลิงค์ลิสต์เดี่ยวโดยแทรกตรงกลางของลิงค์
Link(New) = Link(P)
Link(P) = New
การแทรกข้อมูลลิงค์ลิสต์เดี่ยวโดยแทรกทางขวาสุดของลิงค์(ลิงค์ตัวสุดท้าย)
Link(P) = New
การลบข้อมูลลิงค์ลิสต์เดี่ยวทางซ้ายสุดของลิงค์(ลิงค์ตัวแรก)
First = Link(P)
การลบข้อมูลลิงค์ลิสต์เดี่ยวตรงกลางของลิงค์
Link(P) = Link(link(P))
การลบข้อมูลลิงค์ลิสต์เดี่ยวทางขวาสุดของลิงค์(ลิงค์ตัวสุดท้าย)
Link(P) = Null
การท่องไปในลิงค์ลิสต์คู่
P = Link(P)
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกซ้ายสุดของลิงค์(ลิงค์ตัวแรก)
Rlink(New) = Null
Llink(New) = Null
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกตรงกลางของลิงค์
Llink(Rlink(P)) = New
Rlink(New) = Rlink(P)
Llink(New) = P
Rlink(P) = New
การแทรกข้อมูลในลิงค์ลิสต์คู่โดยแทรกขวาสุดของลิงค์(ลิงค์ตัวสุดท้าย)
Rlink(New) = L
Llink(L) = New
L = New
Llink(New) = Null
การลบโหนดในลิงลิสต์คู่ที่มีโหนดเดียว
L = Null
R = Null
การลบโหนดซ้ายสุดของลิงค์ลิสต์คู่
L = Rlink(P)
Llink(P) = Null
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 11 28 ส.ค. 2548 (15:09)
ต่อไปเรื่องของอะเรย์ยังไม่เสร็จสมบูรณ์
ก็แบบว่าบางเรื่องเรายังงงๆๆอยู่
ถ้าใครเข้ามาดูแล้วรู้คำตอบ โพสต์ให้ด้วยนะ
ที่เว้นไว้เดี๋ยวมาเติมให้
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 12 28 ส.ค. 2548 (15:17)
รื่องของ Arrays
Arrays มี หลาย มิติ
1. มิติ I(1)
2 มิติ I(1,5) มิติที่ 1 , มิติที่ 2
3 มิติ I(1,4,5) มิติที่ 1 , มิติที่ 2 , มิติที่ 3
การเก็บข้อมูลแบบ Arrays
มีวิธีในการเก็บข้อมูลในหน่วยความจำ 2 แบบ
1. แบบ ROW คือเก็บจากซ้ายไปขวา พอหมดแถวก็เริ่มเก็บที่ซ้ายมือของแถวล่างถัดไปเรื่อยๆจนเต็ม Arrays เช่น Pascal
2. แบบ Column คือเก็บจากบนลงล่าง และแน่นอนหากหมดคอลัมน์ก็จะเริ่มเก็บจากข้างบนของคอลัมน์ถัดไป เช่น Basic
การหาตำแหน่งเริ่มต้นของ Arrays
การหาตำแหน่งใดๆ 1 มิติ = โจทย์ให้หา X(I)
= พื้นที่หน่วยความจำหน่วยแรก + เนื้อที่แต่และตำแหน่ง * (I - ตัวที่เริ่มต้น)
เช่น = 100 + 2 Byte * (I - 1) หรือ
= 150 + 4 Byte * (I - 4) กรณีเริ่มกำหนดตัวแปรที่ 4
2 มิติ = โจทย์ให้หา X(I,J) มี N แถว และ M คอลัมน์ มิติแต่ละมิติคั่นด้วย ,
= พื้นที่หน่วยความจำหน่วยแรก + (I -
3 มิติ =
การหาขนาดแต่ละช่อง 1 มิติ =
2 มิติ =
3 มิติ =
การหาขนาดของ Memory ทั้งหมด = ขอบเขตบน - ขอบเขตล่าง + 1
= ตัวแรก - ตัวที่ 2 + 1
= (U - L + 1)
การหาจำนวนสมาชิกทั้งหมด 1 มิติ = (U - L + 1) = X
2 มิติ = X^2
3 มิติ = X^3
การหาลำดับแบบ 1มิติ แบบ ROW = Ncol * (I - 1) + J = X1
แบบ COL = Nrow * (J - 1) + I = X2
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 13 30 ส.ค. 2548 (10:41)
เรื่องของอะเรย์ ฉบับถามอาจารย์แล้ว
เรื่องของ Arrays
Arrays มีหลายมิติ - 1 มิติ = I(1)
- 2 มิติ = I(2,3) มิติที่ 1 , มิติที่ 2
- 3 มิติ = I(1,5,6) มิติที่ 1 , มิติที่ 2 , มิติที่ 3
การเก็บข้อมูลบน Arrays - แบบ COL บนลงล่าง (Basic)
- แบบ ROW ซ้ายไปขวา (Pascal)
การหา.Addressแรกของ Array = Addressสุดท้าย – (ขนาด * จน.สมาชิก)
การหาตน.ใดๆของ Arrays1 มิติ = Address + ขนาด (I – ขอบเขตบน) เช่น 100 + 2 * (I – 4)
2 มิติ = Address + [(I – ขอบเขตบน) * Ncol + ( J- ขอบเขตบน)] * C ---> แบบ Row ใน [] คือ x
= Address + [(J – ขอบเขตบน) * Nrow + ( I- ขอบเขตบน)] * C ---> แบบ Col ใน [] คือ x
3 มิติ = Address + [(K – ขอบเขตบน) * Ncol * Nrow + x] * C ---> แบบ Row หรือ Col
ขนาด จะหาว่า กี่ไบต์ = พิจารณาว่ากี่มิติ แล้วแทนค่าในสมการด้านบน แก้สมการหาค่า C
การหาขนาดของ Mem ทั้งหมด = ขอบเขตบน – ขอบเขตล่าง + 1
หาจำนวนสมาชิกทั้งหมด = Address สุดท้าย – Address แรก – 1
= (Address สุดท้าย – Address แรก – 1)^2
= (Address สุดท้าย – Address แรก – 1)^3
ถ้ากำหนดให้ Arrays x [0:3] จะได้ ขอบเขตบน = 0 ขอบเขตล่าง = 3
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 14 15 พ.ย. 2548 (14:39)
สแตก
pampretty@thaimail.com (IP:202.29.50.249,,)

ความเห็นเพิ่มเติมที่ 16 19 พ.ย. 2548 (22:44)
อยากให้พี่ส่งเข้าเมลผมน่ะครับ แต่รู้สึกพี่ส่งทีไรผมรับไม่ได้เลย
แนะนำเว็บอัพโหลดรูปละกันครับ http://photobucket.com/ เผื่อพี่ใช้อัพรูปแทน แล้วแจกurlรูปเอานะครับ ==a
ตอนนี้ผมก็ต้องสอบเรื่องนี้ ถ้าส่งได้ก้รบกสวนอัด zip แล้วส่งมาก็ได้ครับ ><b
cliffe เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 5 ครั้ง - ได้รับดาวแล้ว 152 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 17 19 พ.ย. 2548 (22:45)
อ้อ เพิ่มเติมนิกนึง มีโค้ดของc++ ไหมครับ ไม่ได้เรียนพาสคาลมาง่ะ ==a
cliffe เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 5 ครั้ง - ได้รับดาวแล้ว 152 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 18 20 พ.ย. 2548 (09:21)
ใสเจียเสียใจด้วยน้องคลิปจ๋า ไฟล์มันหายไปแล้วจ้า
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 19 20 พ.ย. 2548 (09:22)
แย้วพี่ก็จะสอบสถาปัติคอมด้วย
ม่ายว่าง ลองเอาไปช่วยตัวเองก่อนละกานนะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 20 20 พ.ย. 2548 (09:23)
อ้อ สุดท้ายก่อนจากกัน ขอให้โชค A นะจ๊ะ
samongi เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 996 ครั้ง - ได้รับดาวแล้ว 249 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 21 24 ม.ค. 2549 (17:49)
ครัยที่มีเนื้อหาเรื่องสแตกกรุณาส่งให้ด้วยนะค่ะ
จะเป็นพระคุณอย่างยิ่ง
kon_mimefan@hotmail.com (IP:202.29.37.52,,)

หากจะโพสต์คำตอบสำหรับกระทู้ในห้องนี้ ล๊อกอินก่อนนะคะ
สมัครสมาชิก ฟรี ตลอดชีพ ที่ http://www.vcharkarn.com/my ค่ะ

ขอบคุณผู้สนับสนุน

Hot Links

Google
 
ติดต่อลงโฆษณา :   คุณอันนา 086-4907600,
0-2583-2802
และ 086-4907585
สำนักงาน :   0-2642-7828
อีเมล์ :   
Copyright© 2000-2007, Vcharkarn.Com. All rights reserved.
คลิ๊กเพื่อดูสถิติ
รับรองและสนับสนุนโดย

สสวท.

มูลนิธิ พสวท.

พสวท.