วันพุธที่ 5 สิงหาคม พ.ศ. 2552

DTS07-05-08-2552

คิว(Queue)
คิวเป็นโครงสร้างข้อมูลเชิงเส้นที่สามารถเพิ่ม ข้อมูลเฉพาะตำแหน่งที่เรียกว่า Rear และลบข้อมูลเฉพาะตำแหน่งที่เรียกว่า Front คิวเป็นโครงสร้างข้อมูลแบบเข้าก่อนออกก่อน (First In First Out :FIFO)

การแทนที่ข้อมูลของคิว มี 2 วิธี คือ

1.การแทนที่ข้อมูลของคิวแบบลิงค์ลิสต์ ประกอบไปด้วย 2 ส่วน คือ

1.1.Head Node จะประกอบไปด้วย 3 ส่วน คือพอยเตอร์จำนวน 2 ตัว คือ Front และ rear กับจำนวนสมาชิกในคิว

1.2.Data Node จะประกอบไปด้วย ข้อมูล(Data) และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป

-Create Queue = จัดสรรหน่วยความจำให้แก่ Head Node และให้ค่า Pointer ทั้ง 2 ตัวมีค่าเป็น null และจำนวนสมาชิกเป็น 0

-Enqueue = การเพิ่มข้อมูลเข้าไปในคิว

-Dequeue = การนำข้อมูลออกจากคิว

-Queue Front = การนำข้อมูลที่อยู่ส่วนต้นของคิวมาแสดง

-Queue Rear = การนำข้อมูลที่อยู่ส่วนท้ายของคิวมาแสดง

-Empty Queue = การตรวจสอบว่าคิวว่างหรือไม่

-Full Queue = การตรวจสอบว่าคิวเต็มหรือไม่

-Queue Count = การนับจำนวนสมาชิกที่อยู่ในคิว

-Destroy Queue = การลบข้อมูลทั้งหมดที่อยู่ในคิว

2.การแทนที่ข้อมูลของคิวแบบอะเรย์

การนำข้อมูลเข้าสู่คิว จะไม่สามารถนำเข้าในขณะที่คิวเต็ม หรือไม่มีที่ว่าง ถ้าพยายามนำเข้าจะทำให้เกิดความผิดพลาดที่เรียกว่า Overflow

การนำข้อมูลออกจากคิว จะไม่สามารถนำอะไรออกจากคิวที่ว่างเปล่าได้ ถ้าพยายามจะทำให้เกิดความผิดพลาดที่เรียกว่า Underflow

แบบคิววงกลม (Circular Queue)

กรณีที่เป็นคิวแบบวงกลมคิวจะเต็มก็ต่อเมื่อมีการเพิ่มข้อมูลเข้าไปในคิวเรื่อยๆจนกระทั่ง rear มีค่าน้อยกว่า front อยู่หนึ่งค่าคือ rear=front-1

การประยุกต์ใช้คิว

คิวถูกประยุกต์ใช้มากในการจำลองระบบงานธุรกิจ เช่น การให้บริการลูกค้า ต้องวิเคราะห์จำนวนลูกค้าในคิวที่เหมาะสม ว่าเป็นจำนวนเท่าใด เพื่อให้ลูกค้าเสียเวลาน้อยที่สุดในด้านคอมพิวเตอร์ ได้นำคิวมาใช้ คือ ในระบบปฏิบัติการ (Operation System) ในเรื่องของคิวของงานที่เข้ามาทำงาน(ขอใช้ทรัพยากรระบบของ CPU)จะจัดให้งานที่เข้ามาได้ทำงานตามลำดับความสำคัญ

วันอังคารที่ 4 สิงหาคม พ.ศ. 2552

DTS06 28-07-2552

เรื่อง สแตก(ต่อ)
การใช้ สแตก เพื่อแปลรูปนิพจน์ทางคณิตศาสตร์รูปแบบนิพจน์ทางคณิตศาสตร์• นิพจน์ Infix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่ระหว่างตัวดำเนินการ (Operands) เช่น A+B-C• นิพจน์ Prefix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หน้าตัวดำเนินการ (Operands) เช่น +-AB• นิพจน์ Postfix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หลังตัวดำเนินการ (Operands) เช่น AC*+การแปลงจาก infix เป็น postfix Stack มีการทำงานแบบ LIFO ถูกนำมาอธิบายการทำงานของการแปลงจาก infix เป็น postfix อยู่เสมอ โดยพิจารณาน้ำหนักของเครื่องหมายในนิพจน์ และเครื่องหมายที่ถูกกระทำก่อนไปหลังคือ1. วงเล็บ Parenthesis ()2. ยกกำลัง Exponentiation ^ (Left to Right)3. คูณและหาร Multiplication *, Division / (Left to Right)4. บวกและลบ Addition +, Subtraction - (Left to Right) กฎเกี่ยวกับการแปลง1. ถ้าข้อมูลเข้า (input) เป็นตัวถูกดำเนินการ (operand) ให้นำออกไปเป็นผลลัพธ์ (output)2. ถ้าข้อมูลเข้าเป็นตัวดำเนินการ (operator) ให้ดำเนินการดังนี้2.1 ถ้าสแตกว่าง ให้ push operator ลงในสแตก2.2 ถ้าสแตกไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตก- ถ้า operator ที่เข้ามามีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตกให้ push ลงสแตก- ถ้า operator ที่เข้ามามีความสำคัญน้อยกว่าหรือเท่ากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตกให้ pop สแตกออกไปเป็นผลลัพธ์ แล้วทำการเปรียบเทียบ operator ที่เข้ามากับ operator ที่ตำแหน่ง TOP ต่อไป จะหยุดจนกว่า operator ที่เข้ามาจะมีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตก แล้วจึง push operator ที่เข้ามานั้นลงสแตก3. ถ้าข้อมูลเข้าเป็นวงเล็บเปิด ให้ push ลงสแตก4. ถ้าข้อมูลเข้าเป็นวงเล็บปิด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าจะถึงวงเล็บ เปิด จากนั้นทิ้งวงเล็บเปิดและปิดทิ้งไป5. ถ้าข้อมูลเข้าหมด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าสแตกจะว่าง

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

การบ้าน stdio.h และiostream.h

การเขียนโปรแกรม stdio.h



#include

void main()

{

c

การบ้าน stdio.h และiostream.h

การเขียนโปรแกรม stdio.h

#include
void main()
{
char name [10];
int age [5];
float high;
float weight;
int Tel[11];

printf("my rueme\n\n");
printf("name:");
scanf("%s",&name);
printf("age:");
scanf("%d",&age);
printf("high:");
scanf("%f",&high);
printf("weight:");
scanf("%f",&weight);
printf("Tel:");
scanf(%d",&Tel);
}



การเขียนโปรแกรม iostream.h

#include
void main()
{
char name [10];
int age[5];
float high;
float weight;
int Tel[11];

การบ้าน stdio.h และiostream.h

การเขียนโปรแกรม stdio.h



#include

void main()

{

char name [10]

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

DTS05-22-07-2552

สแตค (Stack)
สแตคเป็นโครงสร้างข้อมูลที่มีลักษณะแบบลำดับ (sequential) คือ การกระทำกับข้อมูลจะกระทำที่ปลายข้างเดียวกันที่ส่วนปลายสุดของสแตค
ข้อมูลของสแตคประกอบไปด้วย
การนำเข้าข้อมูลเข้า (PUSH) ที่ส่วนบนสุดของสแตค
การนำข้อมูลออก (POP) ที่ส่วนบนสุดของสแตคเช่นกัน

การจะ Push ข้อมูลเข้าก็ต้องตรวจสอบด้วยว่าข้อมูลในสแตคเต็มหรือไม่ หากสแตคเต็มก็จะไม่สามารถ Push หรือนำข้อมูลเข้าได้ เช่นเดียวกับการ Pop ข้อมูลออกก็ต้องตรวจสอบด้วยว่ามีข้อมูลอยู่ในสแตคหรือไม่ หากไม่มีข้อมูลอยู่ในสแตคหรือสแตคว่าง (empty stack) ก็ไม่สามารถ pop ได้การนำข้อมูลเข้า-ออก จากสแตค (push , pop) จะมีลักษณะแบบเข้าหลัง ออกก่อน (LIFO : Last In , First Out) คือ ข้อมูลที่เข้าไปในสแตคลำดับหลังสุด จะถูกนำข้อมูลออกจากสแตคเป็นลำดับแรก

การใช้สแตกในชีวิตประจำวัน
การใช้ดินสอกด
-เราต้องนำไส้ดินสอสอดเข้าไปก่อนเวลาเราใช้เราก็กดดังนั้นจึงเป็นการเข้าก่อนออกทีหลัง

การเล่นเกมส์กดห่วง
-การเล่นเกมส์กดของห่วงเราต้องโยนห่วงอันแรกเข้าไปแล้วก็ตามจนหมดห่วงของเกมส์เมื่อเราจะเริ่มเล่นเกมส์ใหม่เราก็เอาอันที่หลังออกก่อนห่วงอันแรกจึงออกทีหลัง


วันอาทิตย์ที่ 19 กรกฎาคม พ.ศ. 2552

DTS04-15/07/2552

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