วันอังคารที่ 28 กรกฎาคม พ.ศ. 2552
การบ้าน iostream.h & stdio.h
#include
main()
{
char name [20];
char number [20];
char brand [20];
float price [20];
printf ("---------Buy Telephone---------\n");
printf ("name\n");
scanf("%s",&name);
printf ("number\n");
scanf ("%s",&number);
printf ("brand\n");
scanf ("%s",&brand);
printf ("price\n");
scanf ("%f",&price);
print ("---------Thank You---------");
}
เขียนโปรแกรมโดยใช้ iostream.h
#include
main ()
{
char name [20];
char number [20];
float brand [20];
char price [20];
cout <<"---------Buy Telephone---------\n";
cout <<"name:";
cin >>name;
cout <<"\nnumber:";
cin >> number;
cout << "\nbrand:";
cin >>brand;
cout <<"\nprice:";
cin >>price;
cout<< "---------Thank You---------";
}
DTS-05-22-07-2552
เรื่อง Stack
สแตก (Stack) เป็นโครงสร้างข้อมูลแบบลิเนียร์ลิสต์ที่มีคุณสมบัติที่ว่าการเพิ่มหรือลบข้อมูลในสแตก จะทำที่ปลายข้างเดียวกัน ซึ่งเรียกว่า Top ของสแตก (Top Of Stack)
ลักษณะที่สำคัญของสแตก คือ ข้อมูลที่ใส่หลังสุดจะถูกนำออกมาจากสแตกเป็นลำดับแรกสุด เรียกคุณสมบัตินี้ว่า LIFO (Last In First Out)
การดำเนินงานของสแตก
การทำงานของสแตกจะประกอบด้วย 3 กระบวนการที่สำคัญ คือ
- Push คือ การนำข้อมูลไปใส่ในสแตก เช่น สแตก s ต้อใส่ข้อมูล i ในสแตก จะได้ push (s,i) คือ ใส่ข้อมูล i ลงไปที่ทอปของสแตก s
- Pop คือ การนำข้อมูลออกมาจากส่วนบนสุดของสแตก เช่น ต้องการนำข้อมูลออกจากสแตก s ไปไว้ที่ตัวแปร i จะได้ i = pop(s)
- Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำเอาข้อมูลนั้นออกจากสแตก
การแทนที่ข้อมูลของสแตก
การแทนที่ข้อมูลของสแตกสามารถทำได้ 2 วิธี คือ
- การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์
- การแทนที่ข้อมูลของสแตกแบบอะเรย์
การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์จะประกอบไปด้วย 2 ส่วน คือ
- Head Node จะประกอบไปด้วย 2 ส่วนคือ top pointer และจำนวนสมาชิกในสแตก
- Data Node จะประกอบไปด้วยข้อมูล (Data) และพอยเตอร์ ที่ชี้ไปยังข้อมูลตัวถัดไป
การดำเนินงานเกี่ยวกับสแตก
การดำเนินงานเกี่ยวกับสแตกได้แก่
- Create Stack เป็นการจัดสรรหน่วยความจำ ได้แก่ Head Node และส่งค่าตำแหน่งที่ชี้ไปยัง Head ของสแตกกลับมา
- Push Stack เป็นการเพิ่มข้อมูลลงในสแตก กรณีที่ไม่มีข้อมูลอยู่ในสแตก
- Pop Stack เป็นการนำข้อมูลบนสุดออกจากสแตก
- Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก โดยไม่มีการลบข้อมูลออกจากสแตก
- Empty Stack เป็นการตรวจสอบการว่างของสแตก เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลออกจากสแตกที่เรียกว่า Stack Underflow
- Full Stack เป็นการตรวจสอบว่าสแตกเต็มหรือไม่ เพื่อไม่ให้เกิดควมผิดพลดในการนำข้อมูลเข้าสแตกที่เรียกว่า Stack Overflow
- Stack Count เป็นการนับจำนวนสมาชิกในสแตก
- Destroy Stack เป็นการลบข้อมูลทั้งหมดที่อยู่ในสแตก
การเข้าทีหลังออกก่อน
ตัวอย่างเช่น กระดาษรายงานที่เรียงกันทีละแผ่นเป็นปึ้งๆ เราจะต้องใช้แผ่นบนสุดก่อนเสมอ
*********************************************************************************
วันพุธที่ 15 กรกฎาคม พ.ศ. 2552
DTS-04-15-07-2552
เรื่อง Linked List
ลิงค์ลิสต์เป็นการจัดเก็บชุดข้อมูลเชื่อมโยงต่อเนื่องกันไปตามลำดับ ซึ่งอาจอยู่ในลักษณะแบบเชิงเส้นตรง (linear) หรือ ไม่เป็นเส้นตรง (nonlinear) ก็ได้ ซึ่งในลิสต์จะประกอบไปด้วยข้อมูลที่เรียกว่าโหนด (node) ในหนึ่งโหนดจะประกอบด้วยส่วนของข้อมูลที่ต้องการจัดเก็บ เรียกว่าส่วน Info และส่วนที่เป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป (Link) หรือชี้ไปยังโหนดอื่นๆที่อยู่ในลิสต์ หากไม่มีโหนดที่อยู่ถัดไป ส่วนที่เป็นพอยน์เตอร์หรือ Link จะเก็บค่า NULL หรือ NILL ใช้สัญลักษณ์ ^
โหนด (Note)
โครงสร้างแบบ Linked list แบ่งได้หลายแบบตามวิธีการชี้ไปยังโหนดต่างๆ ดังนี้
- Singly Linked list
- Doubly Linked list
- Multi-Linked list
ลักษณะของ Singly Linked list
หากทราบถึงโหนดแรกของ Linked list จะสามารถเข้าถึงข้อมูลทั้งหมดใน Linked list ได้ เนื่องจากแต่ละโหนดจะมีพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป ดังนั้น Linked list ต้องมี external พอยน์เตอร์ที่ชี้ไปยังโหนดแรกของ Linked list จากรูปใช้พอยน์เตอร์ H (Head)
Linked list ประกอบไปด้วย node ซึ่งมีข้อมูลของแต่ละ node อยู่ประกอบไปด้วย ข้อมูลและตัวที่บ่งชี้ถึงโหนดต่อไป หากเป็นโหนดสุดท้ายจะมีค่าเป็น null ในภาษา java เราสามารถอ้างถึง reference ได้โดย object จึงสามารถที่จะสร้าง linked list ได้เช่นกันเหมือนกับภาษา C หรืออื่นๆ
Circular Linked list
ในปกติ Linked list เมื่อถึงโหนดสุดท้าย ค่าในฟิลด์ LINK หรือ โหนดถัดไปจะมีค่าเป็น NULL ซึ่งเราสามารถใช้ประโยชน์ได้โดยการเปลี่ยนให้ ค่า NULL ในฟิลด์ LINK เป็นตำแหน่งของโหนดแรกในลิสต์ หรือชี้ไปที่ต้นลิสต์ใหม่นั่นเอง ซึ่งเราจะเรียก Linked list แบบนี้ว่า Circular Linked listCircular Linked list ใช้ประโยชน์เมื่อต้องการให้ข้อมูลมีลักษณะเป็นวนรอบหรือลูป โดยแต่ละขั้นตอนจะมีการทำงานภายในลูป จะมีการย้ายตำแหน่งของพอยน์เตอร์ไปยังโหนดถัดไปใน Linked list ในลักษณะแบบวงกลม
Doubly linked list ประกอบด้วยส่วนของ Info และ พอยน์เตอร์ที่ชี้ไป 2 ทิศทาง คือ ชี้ไปยังโหนดถัดไป และชี้ไปยังโหนดก่อนหน้า ดังนั้นเราจึงสามารถทำการอ่านข้อมูลได้ 2 วิธี คือ การอ่านไปข้างหน้า และอ่านไปทางข้างหลัง
*********************************************************************************
วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552
DTS-03-01-07-2552
เรื่อง Pointer , set and string
Pointer คือตัวแปรที่ทำหน้าที่เก็บตำแหน่งที่อยู่ของตัวแปรที่อยู่ในหน่วยความจำ
การประกาศชนิดของตัวเเปรพอยน์เตอร์รูปแบบจะเป็น
type *variable-name
ต้องมีระบุตัวดำเนินการ เพื่อบอกว่าตัวแปรดังกล่าวเป็นตัวแปรแบบตัวชี้โดยตัวดำเนินการที่ใช้คือ
1. เครื่องหมาย
เป็นเครื่องหมายที่ใช้เมื่อต้องการให้เอาค่าตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำออกมาใช้
เช่น m = &count;
เป็นการนำตำแหน่งในหน่วยความจำของตัวแปร count ใส่ลงไปในตัวแปร (แบบพอยท์เตอร์)
m ซึ่งตำแหน่งที่ว่านี้เป็นตำแหน่งของตัวแปรนั้น ๆ ภายในของคอมพิวเตอร์
2. เครื่องหมาย
ซึ่งจะมีการใช้งานอยู่ 2 ลักษณะ
- ใช้ในการประกาศ parameter
เช่น void swap(int*p,int*q)
{
............................
}
- ใช้เป็น dereferencing operator จะใช้เมื่อต้องการนำค่าที่อยู่ในตำแหน่งที่ตัวแปรพอยน์เตอร์นั้นชี้อยู่ออกมาแสดง
set and string
โครงสร้างข้อมูลแบบสตริง หรือ สตริงของอักขระเป็นข้อมูลที่ประกอบบไปด้วย ตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดต่อกันไปรวมทั้งช่องว่างการประยุกต์ใช้คอมพิวเตอร์ที่เกี่ยวกับข้อมูลที่เป็นสตริงมีการนำไปใช้สร้างโปรแกรมประเภทบรรณาธิการข้อความ หรือโปรแกรมประเภทประมวลคำซึ่งมีการทำงานที่อำนวยความสะดวกหลายอย่าง
เช่น การตรวจสอบข้อความ การจัดแนวข้อความ ในแต่ละย่อหน้า และการค้นหาคำ เป็นต้น
โดยจุดสิ้นสุดของ string จะจบด้วย \0 หรือ null character
เช่นchar a[]={'H','E','L','L','O','\0'};char a[]="hello";
เช่น "UNIVERSITY!" จะเป็นข้อมูลแบบสตริงยาว 10 อักขระ
สตริงกับอะแรย์สตริงคือ อะเรย์ของอักขระ เช่น char a[5]อาจจะเป็นอะเรย์ขนาด 6 ช่องอักขระหรือ เป็นสตริงขนาด 5 อักขระก็ได้
*********************************************************************************