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

DTS04-22/07/52

สรุป
Linked List
การลบโหนด (Delete node)
กำหนดค่า pList คือ พอยน์เตอร์เริ่มต้น
pPre คือ พอยน์เตอร์โหนดpLoc คือ โหนดพอยน์เตอร์
dataout คือ ข้อมูลที่จัดเก็บในโหนดหลักการทำงาน คือ ทำการลบข้อมูลพร้อมโหนดออกจากลิงค์ลิสต์และคืนค่าหน่วยความจำ
ก่อนการกำหนดค่ากำหนด pList คือ พอยน์เตอร์ที่ชี้ไปยังโหนดต้นลิสต์
pPre คือ พอยน์เตอร์ที่ใช้ไปยังลิงค์ของโหนดก่อนหน้าโหนดที่ต้องการ
pLoc คือ พอยน์เตอร์ที่ชี้ไปยังโหนดที่ต้องการลบ
dataout คือ ตำแหน่งโหนดที่จัดเก็บข้อมูลที่ต้องการลบหลังการทำงาน ข้อมูลจะถูกลบไปและทำการคืนพื้นที่ ที่จองให้กับหน่วยความจำ
การค้นหาลิสต์ (Search list)
กำหนดค่า pList พอยน์เตอร์เริ่มต้น
pPre พอยน์เตอร์โหนด
Loc พอยน์เตอร์โหนด
target ชนิดของคีย์หลักการทำงาน ทำการรันหาลิสต์และเทียบค่ากับตำแหน่งชนิดของคีย์
เพื่อตรวจสอบการตรงกันของตำแหน่งก่อนการทำงาน
กำหนด pList เป็นพอยน์เตอร์ชี้ค่าที่ตำแหน่งเริ่มต้น
กำหนด pPre เป็นพอยน์เตอร์ตัวแปรเก็บตำแหน่งโหนดก่อนหน้า
กำหนด pLoc เป็นพอยน์เตอร์ตัวแปรเก็บตำแหน่งตัวเลือก
กำหนด target เป็นคีย์ที่กำหนดการค้นหา
หลังการทำงาน กำหนด pLoc ชี้ไปยังโหนดและทำการเปรียบค่าคีย์ตามเงื่อนไขจนกว่าจะครบทุกโหนดหรือค้นเจอลิสต์ที่ต้องการการคืนค่า คืนค่าจริงหากค้นเจอลิสต์คืนค่าเท็จหากค้นไม่พบลิสต์
การตรวจสอบลิสต์ว่าง
หลักการทำงาน ทำการตรวจสอบลิสต์ว่างก่อนการทำงาน กำหนด pList ชี้ไปยังโหนดต้นลิสต์อ่านค่า countการคืนค่า คืนค่าจริงถ้า countว่างคืนค่าเท็จถ้า countไม่ว่าง
การตรวจลิสต์เต็ม
กำหนด pList เป็นพอยน์เตอร์เริ่มต้นหลักการทำงาน ทำการตรวจสอบลิสต์ว่าเต็มหรือไม่ก่อนการทำงาน ทำกำหนด pList ชี้ไปยังโหนดต้นลิสต์การคืนค่า คืนค่าจริงหากไม่สามารถสร้างลิสต์ใหม่ได้คืนค่าเท็จหากสามารถสร้างลิสต์ใหม่ได้การยกเลิกลิสต์การกำหนด pList พอยน์เตอร์เริ่มต้นหลักการทำงาน ทำการลบข้อมูลทั้งหมดในลิสต์และโหนดต่างๆออกให้หมดก่อนการทำงาน pList ชี้ไปยังโหนดต้นลิสต์ที่จัดเก็บข้อมูลของลิสต์หลังการทำงาน ข้อมูลทุกตัวพร้อมกับโหนดต้นลิสต์ถูกลบการคืนค่า พอยน์เตอร์มีค่าเป็น nul
Stack
สแต็ก คือ ส่วนที่ใช้สำหรับอ่านและเขียนในหน่วยความจำ (RAM) และใช้สำหรับ CPU เท่านั้นในการนำข้อมูลเข้าไปเก็บ ซึ่งเป็นที่เก็บข้อมูลชั่วคร่าว เพราะว่าพื้นที่ที่ใช้สำหรับเก็บข้อมูลของ CPU (รีจีสเตอร์) มีใช้งานอย่างจำกัดในส่วนที่เป็นสแต็กเราจะมีรีจีสเตอร์ที่ใช้อยู่ 2 ตัวคือ SS(Stack Segment) และ SP(Stack Pointer) โดยที่ SS จะเป็นตัวกำหนดที่อยู่ของสแต็ก และมี SP เป็นตัวชี้ที่อยู่ของข้อมูลแต่ละตัว โดยจะมีคำสั่งที่ใช้สำหรับเขียนและอ่าน อยู่ 4 คำสั่ง คือคำสั่งที่ใช้สำหรับเขียน PUSH คำสั่งที่ใช้สำหรับอ่าน POP คำสั่งที่ใช้สำหรับเก็บสถานะของแฟล็ก PUSHF คำสั่งที่ใช้สำหรับอ่านสถานะของแฟล้ก POPF
การเก็บข้อมูลลงในสแต็ก PUSH
ในการเก็บข้อมูลลงในสแต็กนั้น จะทำการลดค่าของ SP ลงครั้ง 2 ไบต์ในการเขียนแต่ละครั้ง เพราะว่าในการเขียนแต่ละครั้งจะทำการเขียนครั้งละ 16 บิต ซึ่งต้องใช้หน่วยความจำ 2 ไบต์ และในเก็บข้อมูลลงสู่สแต็ก นั้นใน 80x86 จะทำการเก็บไบต์ต่ำก่อน สมมุตว่า AH = 24H และ AL=12H เมื่อเราใช้คำสั่ง PUSH AX และนำไปเก็บในตำแหน่งหน่วยความจำที่แอดเดรส SS:1234 เก็บข้อมูลดังนี้ 12H และตำแหน่งที่ SS:1235 จะเก็บข้อมูลดังนี้ 24H
การอ่านข้อมูลออกจากสแต็ก POP

ในการในการอ่านข้อมูลออกจากสแต็กนั้น จะทำการเพิ่มค่าของ SP ขึ้นครั้ง 2 ไบต์ในการอ่านแต่ละครั้ง เพราะว่าในการอ่านแต่ละครั้งจะทำการอ่านครั้งละ 16 บิต ซึ่งต้องใช้หน่วยความจำ 2 ไบต์ และในอ่านข้อมูลออกจากสแต็ก นั้นใน 80x86 จะทำการอ่านไบต์ต่ำก่อน สมมุตว่าที่แอดเดรสที่ SS:1234Hมีข้อมูลดังนี้ 12H และที่ตำแหน่ง SS:1235Hมีข้อมูล 24Hตามลำดับ เมื่อเราใช้คำสั่ง POP AX ข้อมูลในรีจีสเตอร์ AX จะได้ดังนี้ AH=24H และAL=12H

ตัวอย่างสแตกที่เราเห็นในชีวิตประจำวันทั่วไป

1.เทปกาวสองหน้า = มันพันข้างในก่อนเวลาใช้ก็ต้องดึงข้างนอกออกใช้ก่อน

2.กล่องคุ๊กกี้ชิ้นใหญ่ๆที่มีคุ๊กกี้ = กล่องคุ๊กกี้ที่เรียงกันสวยๆจะเรียงอันล่างก่อนเวลากินก็ต้องกินจากข้างบน

ก่อน

3.ตู้ ATM = เงินที่เก็บอยู่ในตู้วางล่างสุดก่อนแล้วเวลาจะออกมาก็ใบบนออกมาก่อน

การบ้าน

แบบ Stdio.h

#include
void main()
{
int N1, N2, Sum;

printf("please input an integer number : ");
scanf("%d",&N1);
printf("please input another integer number : ");
scanf("%d",&N2);

Sum = N1 + N2;
printf("%d + %d = %d",N1,N2,Sum);
}



...................................................................................................................................
แบบ iostream.h

#include
void main()
{
int N1, N2, Sum;

cout<<"please input an integer number : "; cin>>N1;
cout<<"please input another integer number : "; cin>>N2;

Sum = N1 + N2;
cout

................................................................................................

0utput

แบบ Stdio.h

please input an integer number :......


please input another integer number :.......


เป็นผลรวม

แบบ iostream.h

please input an integer number :......

please input another integer number :.......

เป็นผลรวม

ไม่มีความคิดเห็น:

แสดงความคิดเห็น