วันจันทร์ที่ 27 กรกฎาคม พ.ศ. 2552

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

การเขียนโปรแกรมโดยใช้ iostream.h
#include
#include
void main()
{ int number1,number2,number3;
clrscr();
cout<< "Please enter 3 integer number : \n";
cin>>number1>>number2>>number3;
cout<< "\nPress any key to display...";
getch();
clrscr();
cout<< "You enter 3 number : \n\a";
cout<< "Value of number1 : " <cout<< "\nValue of number 2 : " <cout<< "\nValue of number 3 : " <cout<< "\n\nPress any key to exit...";
getch(); //wait press any key
}
การเขียนโปรแกรมโดยใช้ stdio.h
#include
#include
void main()
{
int number1,number2,number3;
clrscr();
printf("Please enter 3 integer number : \n");
scanf("%d",&number1);
scanf("%d",&number2);
scanf("%d",&number3);
printf("\nPress any key to display...");
getch();
clrscr();
printf( "You enter 3 number : \n\a");
printf( "Value of number1 : %d",number1);
printf( "\nValue of number 2 : %d",number2);
printf( "\nValue of number 3 : %d",number3);
printf( "\n\nPress any key to exit...");
getch();
}

DTS05-22/07/2552

สรุป Linked List and Stack
ลิงค์ลิสต์หลายทาง
มีอยู่หลายกรณีที่นำลิงค์ลิสต์มาใช้งานตามความเหมาะสมซึ่งแต่ละโหนดจะถูกกำหนดให้ส่วนการเชื่อมต่อมีมากกว่าสองทางเรียกว่าลิงค์ลิสต์หลายทาง (Multi-linked List) อย่างเช่นในรูป ที่แต่ละโหนดในลิงค์ลิสต์จะมีตัวชี้สามทางโดยมีพื้นฐานเป็นลิงค์ลิสต์สองทางซึ่งมีส่วนเก็บข้อมูลคือ NameLength เก็บค่าความยาวของสตริง กับส่วนเชื่อมต่อที่เป็นตัวชี้ Right และ Left และส่วนที่เชื่อมต่อที่สาม คือ ตัวชี้ NamePtr ใช้ชี้ไปยังข้อมูลจริงอีกทีซึ่งมีโครงสร้างข้อมูลสตริงเก็บไว้ในหน่วยความจำที่ขอมาแทนการเก็บไว้ภายในโหน

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




Operation ของสแตค
  • การเพิ่มข้อมูลลงในสแตค (pushing stack)
  • การดึงข้อมูลออกจากสแตค (popping stack)

การเพิ่มข้อมูลลงในสแตค
การเพิ่มข้อมูลลงในสแตค คือ การนำเข้ามูลเข้าสู่สแตคโดยทับข้อมูลที่อยู่บนสุดของสแตค ข้อมูลจะสามารถนำเข้าได้เรื่อยๆ จนกว่าสแตคจะเต็ม สมมติว่าสแตคจองเนื้อที่ไว้ N ตัว ถ้าหากค่า TOP เป็น 0 แสดงว่าสแตคว่าง หากค่า TOP = N แสดงว่าสแตคเต็มไม่สามารถเพิ่มข้อมูลลงในสแตคได้อีก


จากรูปแสดง การ Push ข้อมูล ABC ลงในสแตคที่มีการจองเนื้อที่ไว้ N ตัว โดยมี TOP ชี้ข้อมูลตัวที่เข้ามาล่าสุด โดยค่าของ TOP จะเพิ่มขึ้นทุกครั้งเมื่อมีข้อมูลเข้ามาในสแตค
การดึงข้อมูลออกจากสแตค
ก่อนที่จะดึงข้อมูลออกจากสแตคต้องตรวจสอบก่อนว่าสแตคมีข้อมูลอยู่หรือไม่ หรือว่าเป็นสแตคว่าง (Empty Stack)

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

-การวางจานซ้อนกันต้องวางจานลงบนกล่องเก็บจานจากล่างสุดที่ละใบ และสามารถใส่ได้จนเต็มกล่อง และเมื่อมีการวางจานจนเต็มกล่องแล้วจะไม่สามารถวางจานซ้อนได้อีกเพราะกล่องมีสภาพเต็ม แต่เมื่อเราจะหยิบจานไปใช้ เราต้องหยิบใบบนสุด ซึ่งเป็นจานที่ถูกวางเก็บเป็นอันดับสุดท้ายออกได้เป็นใบแรก และสามารถหย

-แก้วน้ำพาสติก,แก้วน้ำกระดาษ

-สก็อตเทปใส

-ยากัดยุงชนิดจุดไฟ

-ตั๋วรถเมล์

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

DTS04-15/07/2552

ลิงค์ลิสต์(Linked List)

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



โครงสร้างข้อมูลแบบลิงค์ลิสต์ประกอบด้วย 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 ถัดไปให้ถูกต้องด้วย

กระบวนงานและฟังกชั่นที่ใช้ดำเนินงานพื้นฐาน

1. กระบวนงาน Create List หน้าที่ สร้างลิสตว่าง ผลลัพธ์ ลิสต์ว่าง

2. กระบวนงาน Insert Nodeหน้าที่เพิ่มข้อมูลลงไปในลิสตบริเวณตำแหน่งที่ต้องการข้อมูลนำเข้าลิสต์ ข้อมูล และตำแหน่งผลลัพธ์ ลิสตที่มีการเปลี่ยนแปลง

3. กระบวนงาน Delete Node หน้าที่ลบสมาชิกในลิสตบริเวณตำแหน่งที่ต้องการข้อมูลนำเข้าข้อมูลและ ตำแหน่งผลลัพธ์ ลิสตที่มีการเปลี่ยนแปลง


ลิงค์ลิสต์ (Link List)

โครงสร้างข้อมูลแบบลิงค์ลิสต์ เป็นโครงสร้างข้อมูลแบบไดนามิก โดยที่ขนาด ของมันสามารถเปลี่ยนแปลงได้ โดยสมาชิกแต่ละตัวของลิงค์ลิสต์จะถูกเรียกว่าโหนด (Node) ประกอบด้วย 2 ส่วนคือ ส่วนของข้อมูล (Data) และส่วนที่เป็นตำแหน่งที่อยู่ของ โหนดตัวต่อไปในลิงค์ลิสต์ (Next Address) หรืออาจเรียกว่า พอยเตอร์ (Pointer) ซึ่งทำให้ เราสามารถกำหนดตำแหน่งของโหนดตัวต่อไปได้ กล่าวคือ โหนดตัวแรกจะมี พอยเตอร์ ชี้ไปยังโหนดตัวที่สอง โหนดตัวที่สอง มีพอยเตอร์ชี้ไปยังโหนดตัวที่สาม เป็นเช่นนี้ไปเรื่อยๆ

ลิงค์ลิสต์แบบวงกลม (Circular Link List)

ลิงค์ลิสต์ที่มีการกำหนดให้โหนดสุดท้ายชี้ไปยังโหนดแรก ซึ่งจะเรียกลิสต์แบบนี้ว่า ลิงค์ลิสต์แบบวงกลม การท่องลิสต์แบบนี้เมื่อมาถึงโหนดสุดท้าย สามารถวนไปยัง โหนดแรกได้

ลิงค์ลิสต์แบบ 2 ทิศทาง (Doubly Link List)

โครงสร้างข้อมูลลิงค์ลิสต์แบบ 2 ทิศทาง เป็นโครงสร้างข้อมูลที่สมาชิกแต่ละตัวของ ลิงค์ลิสต์หรือโหนด ประกอบด้วย 3 ส่วน ส่วนแรกเป็นข้อมูล (data) ส่วนที่สอง เป็นตำแหน่งที่อยู่ของโหนดก่อนหน้า(previous address) ในลิงค์ลิสต์ ส่วนที่สาม เป็นตำแหน่งที่อยู่ของโหนดตัวต่อไป (next address) ในลิงค์สิศต์ ทำให้เราสามารถลบ หรือเพิ่มโหนดที่อยู่ก่อนหน้า และสามารถลบหรือเพิ่มโหนดที่อยู่ตามหลังโหนดนั้นๆ ได้ง่ายขึ้น รวมทั้งสามารถแสดงข้อมูลของโหนดที่อยู่ก่อนหน้า และโหนดที่อยู่ตามหลังโหนดนั้นๆได้


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

DTS03-2/07/2552

สรุป Pointer , Set and String
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";
การกำหนดสตริง
การกำหนดสตริงทำได้หลายแบบ คือ
1. กำหนดเป็นสตริงที่มีค่าคงที่ (String Constants)
2. กำหนดโดยใช้ตัวแปรอะเรย์หรือพอยเตอร์
สามารถกหนด ได้ทั้งนอกและในฟังก์ชัน เมื่อกำหนดไว้นอกฟังก์ชัน ซึ่งค่าคงตัวจะเป็นพอนยเตอร์ชี้ไปยังหน่อยความจำที่เก็บตัวมันเอง
การกำหนดค่าให้กับสตริงนั้น เราจะใช้เครื่องหมาย double quote (" ") เช่น "abc" คือ ชุดของอักขระที่มีขนาด4 (รวม \0ด้วย)