วันอังคารที่ 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 :.......

เป็นผลรวม

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

DTS03-02/07/52

สรุป
Pointer
เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่(Address) ของตัวแปรที่อยู่ในหน่วยความจำ
การประกาศชนิดของตัวแปรพอยน์เตอร์
รูปแบบ
type *variable-name
* หมายถึง เป็นเครื่องหมายที่แสดงว่า ตัวแปรที่ตามหลังเครื่องหมายนี้เป็นตัวแปรพอยน์เตอร์
type หมายถึง ชนิดของตัวแปร
variable-name
เป็นชื่อของตัวแปรที่ต้องการประกาศว่าเป็นชนิดพอยน์เตอร์
เครื่องหมายที่ใช้ทำงานกับตัวแปรพอยน์เตอร์
1. & หมายถึง เป็นเครื่องหมายที่ใช้เมื่อต้องการให้เอาค่าตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำออกมาใช้
ตัวอย่าง
char *prt;
หมายความว่า ประกาศค่าตัวแปร prt เป็นตัวแปรพอยน์เตอร์ ที่เก็บใช้ตำแหน่งเริ่มต้นที่จะเก็บ character
int *a;
หมายความว่า ประกาศค่าตัวแปร a เป็นตัวแปรพอยน์เตอร์ที่ใช้เก็บตำแหน่งเริ่มตนที่จะใช้เก็บ integer
2. เครื่องหมาย * มีการใช้สองลักษณะ คือ
- ใช้ในการประกาศ parameter ว่าเป็นตัวแปรแบบพอยน์เตอร์ เช่น
void swap(int *p,int *q)
{
.........................
}
- ใช้เป็น dereferencing operator จะใช้เมื่อต้องการนำค่าที่อยู่ในตำแหน่งที่ตัวแปรพอยน์เตอร์นั้นชี้อยู่ออกมาแสดง
การใช้ตัวแปรพอยน์เตอร์กับอะเรย์
ตัวแปรพอยน์เตอร์จะใช้อ้างถึค่าที่เก็บไว้ในตัวแปรชุดได้ ดังนี้
ตัวอย่าง char str[80], *pl;
pl = str;
บรรทัดที่ 1 เป็นการประกาศว่า หะพ เป็นตัวแปรชุดชนิด character 1 มิติ มีขนาดสมาชิก 80 สมาชิกและpl เป็นตัวแปรพอยน์เตอร์
บรรทัดที่ 2 เป็นการอ้างถึงข้อมูลที่เก็บไว้ในตัวแปรชุด str โดยการนำตำแหน่งที่อยู่ของตัวแปร str[0] ซึ่งเป็นสมาชิกตัวแรกไปเก็บไว้ใน ตัวแปรพอยน์เตอร์ pl เหมือนกันใช้คำส่ง
pl = &str[0]
การอ้างถึงตัวแปรชุด สามารถอ้างถึงโดยการเพิ่มหรือลดตัวแปรพอยน์เตอร์ได้ เช่น ต้องการอ้างถึงตัวแปร
str[4] ทำได้โดย *(pl+4)
โครงสร้างข้อมูลแบบเซ็ต
เป็นโครงสร้างข้อมูลที่ข้อมูลแตละตัวไม่มีความสัมพันธ์กัน ในภาษาซีจะไม่มีประเภทข้อมูลแบบเซ็ตนี้เหมือนกับภาษาปาสคาล
โครงสร้างข้อมูลแบบสตตริง
สตริง หรือ สตริงของอักขระ เป็นข้อมูลที่ประกอบบไปด้วย ตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดต่อกันไป รวมทั้งช่องว่าง
การประยุกต์ใช้คอมพิวเตอร์ที่เกี่ยวกับข้อมูลที่เป็นสตริงมีการนำไปใช้สร้างโปรแกรมประเภทบรรณาธิการข้อความ หรือโปรแกรมประเภทประมวลคำ ซึ่งมีการทำงานที่อำนวยความสะดวกหลายอย่าง เช่น การตรวจสอบข้อความ การจัดแนวข้อความ ในแต่ละย่อหน้า และการค้นหาคำ เป็นต้น
เช่น "This is String !" จะเป็นข้อมูลแบบสตริงยาว 16 อักขระ
สตริงกับอะแรย์
สตริง คือ อะเรย์ของอักขระ เช่น char a[6]
อาจจะเป็นอะเรย์ขนาด 6 ช่องอักขระ หรือ เป็นสตริงขนาด 5 อักขระก้อได้ โดยจุดสิ้นสุดของ string จะจบด้วย \0 หรือ null character เช่น
char a[]={'H','E','L','L','o','\0'};
char a[]="hello";