วันพุธที่ 22 กรกฎาคม พ.ศ. 2552

สแตก ในชีวิตประจำวัน

สแตก คือ การนำสิ่งที่ใส่เข้าไปทีหลังออกมาก่อน หรือที่เยกง่ายๆคือ "ใส่หลังออกก่อน"
สแตรก ในชีวิตประจำวัน มีดังนี้
1. การตักข้าวจากถังข้าวสาร และการตักข้าวจากหม้อหุงข้าว
2. ตั้งของหนังสือชนิดเดียวกัน
3. สินค้าในสต็อกเก็บของ
4. นามบัตรในตลับใส่นามบัตร
5. การแจกชีท ซีล็อก ให้นักศึกษา
6. ของที่ถูกเก็บในลังหรือกล่อง
7. ของในห้องเก็บของ
8. สินค้าในตู้โชว์หรือในชั้นวางสินค้า
9. กองเอกสาร
10. น้ำตาลที่ใส่ในขวกโหล
11. น้ำแข็งในกระติกหรือในแก้วหรือในลัง
12. ซีดีในกล่องใส่ซีดี
13. ถุงพลาสติกในซองใส่
14. ขยะในถังขยะเวลา กทม. มาเก็บ
15. พวงมาลัยของเด็กขายพวงมาลัย(แบบคล้องท่อแป๊ป)แถวสี่แยก
16.การหยิบผ้ามาตากจากเครื่องซักผ้า

DST 05 -22/7/52

สรุปบทเรียน สแตก

สแตก (Stack) เป็นโครงสร้างข้อมูลที่ข้อมูลแบบลิเนียร์ลิสต์ ที่มีคุณสมบัติที่ว่า
การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ ปลายข้างเดียวกัน ซึ่งเรียกว่า
Top ของสแตก (TopOf Stack) และ ลักษณะที่สำคัญของสแตกคือ
ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จากสแตกเป็นลำดับแรกสุด
เรียกคุณสมบัตินี้ว่าLIFO (Last In First Out)
การทำงานของสแตกจะประกอบด้วยกระบวนการ 3 กระบวนการที่สำคัญ คือ
1.Push คือ การนำข้อมูลใส่ลงไปในสแตก โดยการเพิ่มข้อมูลลงในสแตก จะต้องทำการตรวจสอบว่า
สแตก เต็มหรือไม่ ถ้าไม่เต็มก็สามารถเพิ่มข้อมูลลงไปในสแตกได้ แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ที่
ตำแหน่งข้อมูลใหม่ ถ้าสแตกเต็ม (Stack Overflow) ก็จะไม่สามารถเพิ่มข้อมูลเข้าไปในสแตกได้อีก
2. Pop คือ การนำข้อมูลออกจากส่วนบนสุดของสแตก โดยการนำข้อมูลออกจากสแตก ถ้าสแตก
มีสมาชิก เพียง 1ตัว แล้วนำสมาชิกออกจากสแตก จะเกิดสภาวะสแตกว่าง (Stack Empty)
คือ ไม่มีสมาชิก อยู่ในสแตกเลย แต่ถ้าไม่มีสมาชิกในสแตก แล้วทำการ pop สแตก จะทำให้ เกิด
ความผิดพลาดที่เรียกว่า Stack Underflowเพราะฉะนั้นก่อนนำข้อมูลออกจากสแตกจะต้อง
ตรวจสอบ ก่อนว่าสแตกว่างหรือเปล่า จึงจะนำข้อมูลออกจากสแตกได้และ ปรับตัวชี้ตำแหน่งให้ไปชี้
ตำแหน่งของข้อมูลที่ต่อจากข้อมูลที่ถูกนำ ออกไป
3. Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำเอาข้อมูลนั้นออกจากสแตก
การแทนที่ข้อมูลของสแตกสามารถทำได้ 2 วิธี คือ
1. การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์ ประกอบไปด้วย2 ส่วน คือ
1. Head Node จะประกอบไปด้วย 2ส่วนคือ top pointer และจำนวนสมาชิกในสแตก
2. Data Node จะประกอบไปด้วยข้อมูล (Data) และพอยเตอร์ ที่ชี้ไปยังข้อมูลตัวถัดไป
2. การแทนที่ข้อมูลของสแตกแบบอะเรย์
การดำเนินการเกี่ยวกับสแตก ได้แก่
1. Create Stack 2. Push Stack 3. Pop Stack 4. Stack Top
5. Empty Stack 6. Full Stack 7. Stack Count 8. Destroy Stack
การประยุกต์ใช้สแตก การประยุกต์ใช้สแตก จะใช้ในงานด้านปฏิบัติการของเครื่องคอมพิวเตอร์
ที่ขั้นตอนการทำงานต้องการเก็บข่าวสารอันดับแรกสุดไว้ใช้หลังสุด เช่น การทำงานของโปรแกรม
แปลภาษานำไปใช้ในเรื่องของการโปรแกรมที่เรียกใช้โปรแกรมย่อย การคำนวณนิพจน์
ทางคณิตศาสตร์ และรีเคอร์ชั่น (Recursion)เป็นต้น

DST 04 -22/7/52

สรุปบทเรียน ลิงค์ลิส

ลิงค์ลิสต์ (Linked List) เป็นวิธีการเก็บข้อมูลอย่างต่อเนื่องของอิลิเมนต์ต่าง ๆ
โดยมีพอยเตอร์เป็นตัวเชื่อมต่อ แต่ละอิลิเมนท์ เรียกว่าโนด (Node)
ซึ่งในแต่ละโนดจะประกอบไปด้วย 2 ส่วน คือ
ส่วนที่หนึ่ง คือ Data จะเก็บข้อมูลของอิลิเมนท์
และส่วนที่สอง คือ Link Field จะทำหน้าที่เก็บตำแหน่งของโนดต่อไปในลิสต์
ในส่วนของ data อาจจะเป็นรายการเดี่ยวหรือเป็นเรคคอร์ดก็ได้
ในส่วนของ link จะเป็นส่วนที่เก็บตำแหน่งของโหนดถัดไป ในโหนดสุดท้ายจะเก็บค่า Null
ซึ่งไม่ได้ชี้ไปยังตำแหน่งใด ๆ เป็นตัวบอกการสิ้นสุดของลิสต์
โครงสร้างข้อมูลแบบลิงค์ลิสต์จะแบ่งเป็น 2 ส่วน คือ
1. Head Structure จะประกอบไปด้วย 3 ส่วนได้แก่ จำนวนโหนดในลิสต์ (Count)
พอยเตอร์ที่ชี้ไปยังโหนดที่เข้าถึง (Pos) และพอยเตอร์ที่ชี้ไปยังโหนดข้อมูลแรกของลิสต์ (Head)
2. Data Node Structure จะประกอบไปด้วยข้อมูล(Data) และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป

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

ฟังก์ชัน < stdio.h > และ < iosteam.h > ในการเขียนสูตรคูณ

แบบใช้ "stdio.h"
#include "stdio.h"
main()
{
int a;
printf("Enter an intiger(0 to stop):");
scanf("%d",&a);
for(int i = 1;i<=12;i++) { printf("%d",a); printf(" X %d\t",i); printf(" = %d\n",a*i); } } แบบใช้ "iosteam.h"
#include "iosteam.h"
void Table (int);
int main ()
{
int a;
cout<<"Enter an intiger(0 to stop):"; cin>>a;
Table (a);
return 0;
}
void Table (int x)
{
for(int i=1;i<=12;i++)
cout<< x << " X " << i << "\t= " << (x*i) << endl;
return ;
}

DST 03 -21/07/52

สรุปบทเรียน เซ็ตและสตริง

โครงสร้างข้อมูลแบบเซ็ต
เป็นโครงสร้างข้อมูลที่ข้อมูลแต่ละตัวไม่มีความสัมพันธ์กัน
ในภาษาซี จะไม่มีประเภทข้อมูลแบบเซ็ตนี้เหมือนกับในภาษาปาสคาล
แต่สามารถใช้หลักการของการดำเนินงานแบบเซ็ตมาใช้ได้

โครงสร้างข้อมูลแบบสตริ
สตริง (String) หรือ สตริงของอักขระ (CharacterString)
เป็นข้อมูลที่ประกอบไปด้วย ตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดต่อกันไป
รวมทั้งช่องว่าง
สตริงกับอะเรย์ สตริง คือ อะเรย์ของอักขระเช่น char a[6]
ความยาวของสตริง จะถูกกำหนดโดยขนาดของสตริง การกำหนดขนาดของสตริงนั้น
ต้องจองเนื้อที่ในหน่วยความจำให้กับ \0ด้วย
ในการกำหนดตัวแปรของสตริง อาศัยหลักการของอะเรย์ เพราะ สตริงก็คืออะเรย์ของอักขระ
ที่ปิดท้ายด้วย null character (\0) และมีฟังก์ชันพิเศษสำหรับทำงานกับสตริงโดยเฉพาะ

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

แบบฝึกหัด

1. ให้นักศึกษากำหนดค่าของ Array 1 มิติ และ Array 2 มิติ
#include"stdio.h"
main()
{
int a[1];
int b[2][3];
}

2. ให้นักศึกษาหาค่าของ A[2], A[6] จากค่า A={2,8,16,24,9,7,3,8}
#include"stdio.h"
main()
{
int a[]={2,8,16,24,9,7,3,8};
printf("%d\n",a[2]);
printf("%d\n",a[6]);
}
จะได้ ค่าของ A[2] = 16
และ ค่าของ A[6] = 3

3. จากค่าของ int a[2][3] = {{6,5,4},{3,2,1}};ให้นักศึกษา หาค่าของ a[1][0] และ a[0][2]
#include"stdio.h"
main()
{
int a[2][3] = {{6,5,4},{3,2,1}};
printf("%d\n",a[1][0]);
printf("%d\n",a[0][2]);
}
จะได้ ค่าของ A [1][0] = 3
และ ค่าของ A [0][2] = 4

4. ให้นักศึกษากำหนด Structure ที่มีค่าของข้อมูลจากน้อย6 Records
#include"stdio.h"
main()
{
struct number
{
int i;
int a;
}num;
struct date
{
int day;
int month;
int year;
};
struct product
{
float price;
char type[40];
int many;
struct date buy;
float total;
}pn;
{
printf("\t\tbuyer Data\n",num.i+1);
printf("Date of buy : ");
scanf("%d",&pn.buy.day);
printf("month of buy : ");
scanf("%d",&pn.buy.month);
printf("Year of buy : ");
scanf("%d",&pn.buy.year);
printf("Buy date : %d-%d-%d\n",pn.buy.day,pn.buy.month,pn.buy.year);
printf("How many type you will buy : ");
scanf("%d",&num.a);
for(num.i=0;num.i{
printf("Enter type name : ");
scanf("%s",&pn.type);
printf("price = ");
scanf("%f",&pn.price);
printf("How many you buy : ");
scanf("%d",&pn.many);
printf(" \n");
pn.total = pn.price*pn.many;
printf("\t\t Data buyer \n");
printf("Buy date : %d-%d-%d\n",pn.buy.day,pn.buy.month,pn.buy.year);
printf("Name : %s\n",pn.type);
printf("price : %.0f\n",pn.price);
printf("Pieces : %d\n",pn.many);
printf("total : %.2f\n\n",pn.total);
}
}
}

5. ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวชนิด Array กับตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล
ตัวแปร Pointer คือตัวแปรที่เก็บตำแหน่งของหน่วยความจำซึ่งตำแหน่งของหน่วยความจำนี้จะเป็นที่อยู่ของสิ่งอื่น ๆ ในหน่วยความจำ
Array คือกลุ่มของข้อมูล ที่มีชนิดของข้อมูลเป็นชนิดเดียวกัน การอ้างถึงกลุ่มของชุดข้อมูลนี้จะอ้างด้วยชื่อของตัวแปรเดียวกัน
ความแตกต่างระหว่างตัวแปร Array และ Pointer คือตัวแปรตารางอาเรย์จะเก็บเฉพาะค่าต่างๆ ที่เป็นชนิดกันเดียวกับตัวแปรอาเรย์แต่ ตัวแปรพอยเตอร์จะเก็บเฉพาะค่าตำแหน่ง Address ตัวแปรเท่านั้น