วันอังคารที่ 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 อักขระก็ได้
*********************************************************************************
วันอังคารที่ 30 มิถุนายน พ.ศ. 2552
การบ้าน data structure
#include
main()
{
struct car{
int day;int month;
int year;char name[20];
char last_name[20];
char brand[10];
char color[20];
float price;
}car1;
printf ("day=");
scanf ("%d",&car1.day);
printf ("month=");
scanf ("%d",&car1.month);
printf ("year=");
scanf ("%d",&car1.year);
printf ("name=");
scanf ("%s",&car1.name);
printf ("last_name=");
scanf ("%s",&car1.last_name);
printf ("brand=");
scanf ("%s",&car1.brand);
printf ("color=");
scanf ("%s",&car1.color);
printf ("price=");
scanf ("%f",&car1.price);
printf ("display data of car1\n");
printf ("Day=%d mont=%d year=%d\n",car1.day,car1.month,car1.year);
printf ("name=%s\n",car1.name);
printf ("last_name=%s\n",car1.last_name);
printf ("brand=%s\n",car1.brand);
printf ("color=%s\n",car1.color);
printf ("price=%f\n",car1.price);
}
วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552
DTS-02-24-06-2552
สรุปเนื้อหา"Data Structure"
เรื่อง อาร์เรย์(Array)
อาร์เรย์ คือ แถวหรือลำดับของข้อมูลชนิดเดียวกันที่มีจำนวนหลายตัวนำมาเก็บในตัวแปรชื่อเดียวกัน แต่ต่างกันที่บอกลำดับ ซึ่งเรียกว่าตัวห้อย(subscript)
ในการเขียนโปรแกรมต้องเกี่ยวข้องกับจำนวนข้อมูลมาก ข้อมูลอาจเป็นชุดหรือเป็นกลุ่มหลายๆกลุ่ม แต่ละกลุ่มมีหลายตัว
การที่จะกำหนดชื่อตัวแปรที่แตกต่างกันเพื่อเก็บข้อมูลทุกๆตัว ย่อมเป็นการยุ่งยากและเป็นวิธีที่ไม่เหมาะสม จึงทำให้ต้องมาใช้ตัวแปรชุด หรือที่เรียกว่าอาร์เรย์(Array) กับข้อมูลที่มีลักษณะเป็นชุดหรือเป็นกลุ่ม
ประเภทของอาร์เรย์แบ่งได้เป็น 2 ประเภท คือ
อาร์เรย์มิติเดียว(One dimension)
อาร์เรย์หลายมิติ(Multi dimension)
อาร์เรย์มิติเดียว(One dimension)
คือตัวเเปรอาร์เรย์ที่ใช้เก็บข้อมูลเป็นกลุ่ม มีลักษณะตำแหน่งที่ตั้งเป็นลักษณะแถวเดียว(วางตามแนวนอน) หรือคอลัมน์เดียว(วางตามแนวตั้ง)
#ชนิดของตัวแปร ชื่อของตัวแปร ขนาดของตัวแปรอาร์เรย์ เช่น int num [5]
รูปแบบการประกาศตัวแปรอาร์เรย์มิติเดียว
Data-type : ชนิดของตัวแปร
array-name : ชื่อของตัวแปร
Size : ขนาดของตัวแปรอาร์เรย์
อาร์เรย์หลายมิติ(Multi dimension)
คือ อาร์เรย์ตั้งแต่ 2 มิติเป็นต้นไป ใช้เก็บข้อมูลเป็นกลุ่มที่ข้อมูลนั้นใช้ตัวแปรชื่อเดียวกันแต่ต่างกันที่ตัวห้อย
(subscript) ซึ่งจะบอกลำดับความแตกต่างของตัวแปรว่าอยู่ในแถวใด ในคอลัมน์ที่เท่าไหร่ ลำดับใดในแถว
#ชนิดของตัวแปร ชื่อของตัวแปร ขนาดของแถว ขนาดของคอลัมม์ เช่น int num [2][3]
อาร์เรย์หลายมิติ จะมี 2 มิติ หรือ 3 มิติ จะแตกต่างจากอาร์เรย์มิติเดียวตรงที่ตัวห้อย คือ ตัวห้อยของอาร์เรย์จะมีขนาดของแถวและขนาดของคอลัมม์มาเป็นตัวบอกจำนวนสมาชิกด้วย รูปแบบของอาร์เรย์มิติหลายมิติ
*********************************************************************************