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

DTS05/28/07/52

สแตก(stack)เป็นโครงสร้างข้อมูลที่ข้อมูลแบบเป็นลิเนียร์ลิสต์จะมีคุณสมบัติทีว่าการเพิ่ม หรือการลบข้อมูลในสแตก ลักษณะของสแตกคือข้อมูลที่ใส่หลังสุดหรือการนำเข้าไปหลังสุดแต่ว่าจะถูกนำออกมาจากสแตกเป็นอันดับแรกสุด ที่เรียกคุณสมบัตินี้ว่า LIFO (Last in First Out) การทำงานของสแตกนั้นจะทำที่ปลายข้างหนึ่งของสแตกเท่านั้น ดังนั้นสแตกจะต้องมีตัวชี้ตำแหน่งของข้อมูลบนสุดของสแตกด้วย

กระบวนการทำงานของสแตกจะประกอบไปด้วยการทำงานที่สำคัญ 3 กระบวนการ คือ
1.Push คือการนำข้อมูลเข้าไปใส่ลงในสแตก เช่น สแตก a ต้องการใส่ล b ในสแตก จะได้ Push (ab)
ในการเพิ่มข้อมูลลงในสแตกนั้นจะทำการตรวจสอบว่าในสแตก มีพื้นที่ว่างหรือไม่ถ้าสแตกเต็มก็จะไม่สามรถเพิ่มข้อมูลเข้าไปในสแตกได้อีก

2.Pop คือการนำข้อมูลออกจากส่วนบนสุดของสแตก ถ้าต้องการนำข้อมูลออกจากสแตก ถ้ามีสแตกมีสมาชิกเพียงตัวเดียวแล้วนำสมาชิกออกจากสแตก ก็จะเกิดภาวะสแตกว่าง คือไม่มีสมาชิกตัวใดอยู่ในแตกเลยเพราะฉะนั้นแล้วการนำข้อมูลออกจากสแตกควรตรวจสอบก่อนว่าสแตกว่างอยู่หรือป่าว

3.Stack Top คืออะไร เป็นการ copy คัดลอกไฟล์ข้อมูลที่อยู่ด้านบนสุดของสแตก แต่ไม่ได้นำเอาข้อมูลนั้นออกมาจากสแตก


การคำนวณ นิพจน์ของ stack
ในการเขียนนิพจน์เพื่อการคำนวณนั้นจะต้องคำนึงถึงความสำคัญของเครื่องหมายสำการคำนวณโดยจะแบ่งการเขียน ได้ เป็น 3 แบบ คือ
1.นิพจน์ infix นิพจน์นี้ operator จะอยู่ตรงกลางระหว่างตัวถูกดำเนินการ 2 ตัว
2.นิพจน์ postfix นิพจน์นี้แบบนี้ จะต้องเขียนตัวถูกดำเนินการตัวที่ 1 และ 2 ก่อน
แล้วจึงเขียน operator
3.นิพจน์ prefix นิพจน์แบบนี้ จะต้องเขียน operator ก่อนแล้วจึงเขียนตามด้วยตัวถูกดำเนินการตัวที่ 1 และ 2 ตามลำดับ

การบ้านเขียนโปรแกรม iostream.h และ stdio.h

#include
maim()
struct name {
char name[30];
char surname[40];
int age;
float salary;
int height;
int weight;
char status[10];
char birthday[40];
}name1;


printf("Insert Profile\n");
printf("Nane:");
scanf("%s",&name1.name);
printf("Surname:");
scanf("%s",&name1.surname);
printf("Age;");
scanf("%d",&name1.age);
printf("Salary:");
scanf("%f",&name1.salary);
printf("Height:");
scanf("%d",&name1.height);
printf("Weight:");
scanf("%d",&name1.weight);
printf("Status:");
scanf("%s",&name1.status);
print("Birthday:");
scanf("%s",&name1.birthday);

printf("\n\nYour Profile\n");
printf("Your name is : %s %s\n",name1.name,name1.surname);
printf("Age : %d\n",name1.age);
printf("Your Salary : %.2f\n",name1.salary);
printf("Height : %d and weight %d\n",name1.height,name1.weight);
printf("Status : %s\n",name1.status);
printf("Your BirthDay : %s\n",name1.birthday);

}


#include
#include
main()
{
struct neme {
char name[30];
char surname[40];
char add[44];
int age;
float salary;
int h;
int w;
char status;
char bd[40];
}name1;

cout << "Insert Profile\n";

cout << "Name : ";
cin >> name1.name;
cout << " Surname:";

cin >> name1.surname;
cout << " Add :";

gets (name1.add);
cout << "Age : ";
cin >> name1.age;
cout << "Salary :";

cin >> name1.salary;
cout << "Height :";

cin >> name1.h;
cout << "Weight :";

cin >> name1.w;
cout << "Status :";

cin >> name1.status;
cout << "Birthday :";

cin >> name1.bd;

}




ตัวอย่าง สแตก(stack)ในชีวิตประจำวัน

1. การวางเหรียญซ้อนๆกัน
2. กล่องใส่แผ่นซีดีใส่แผ่นซีดีซ้อนๆกันไว้
3. การผับผ้าวางเป็นกองๆ
4. การวางหนังสือซ้อนกันเป็นหมวดหมู่
5. การใส่เสื้อผ้า
6. การใส่ถุงเท้ารองเท้า
7. การประกอบเครื่องยนต์

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

DTS04/21/07/52

สรุปบทเรียน เรื่อง Linked List

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

โครงสร้างของข้อมูลแบบลิงค์ลิสต์จะแบ่งเป็น 2 ส่วน คือ
Head Structure จะประกอบไปด้วย 3 ส่วน คือจำนวนโหนดในลิสต์ (Count) พอยเตอร์ที่ชี้ไปยัง

โหนดที่เข้าถึง (Pos)และพอยเตอร์ที่ชี้ไปยังโหนดข้อมูลแรกของลิสต์ (Head)
Data Node Structure ประกอบไปด้วยข้อมูลและพอยเตอร์ที่ชี้ไปยังข้อมูลถัดไป

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

Traverse คือ หน้าที่ท่องไปในลิสต์เพื่อเข้าถึงและ ประมวลผลข้อมูลนำเข้าลิสต์ ผลลัพธ์ ขึ้นกับการประมวลผล
เช่นการเปลี่ยนแปลงค่า ใน node,รวมกับฟิลด์ในลิสต์คำนวณค่าเฉลี่ยของฟิลด์ นั้นเป็นต้น
Retrieve Node หน้าที่ คือ หาตำแหน่งข้อมูลจากลิสต์ข้อมูลนำเข้าลิสต์ ผลลัพธ์คือ ตำแหน่งข้อมูลที่อยู่ใลสต์

ฟังก์ชั่น เป็น หน้าที่ ทดสอบว่าลิสต์ว่างข้อมูลนำเข้าลิสต์ ผลลัพธ์ ถ้าเป็นจริง
ลิสต์ว่าง ถ้าเป็นเท็จ ลิสต์ไม่ว่าง การทำงานของ FullList ทดสอบหน้าที่ ว่าลิสต์เต็มหรือไม่มีข้อมูลนำเข้าลิสต์ ผลลัพธ์คือ ถ้า เป็นจริง หน่วยความจำเต็ม เป็นเท็จ สามารถมีโหนดอื่น กระบวนการทำงานของ Destroy list หน้าที่คือ การทำลายลิสต์ ข้อมูลนำเข้าคือ ลิสต์และผลลัพธ์ คือไม่มีลิสต์





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

DTS03/12/07/52

สรุปการเรียน Lecture 3

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

-set intersection

-set union

-set difference

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

เช่น "This is the sun" จะเป็นข้อมูลยาว 16 อักขระ โดยจุดสิ้นสุดของ สตริงนั้นจะต้องจบด้วย \0 หรือ null character เช่น

char a[]={'s','u','n','\0'};

chsr a[]="sun";

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

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

โครงสร้างข้อมูลแบบสตริงในการกำหนดค่าคงตัวสตริงให้แก่พอยต์เตอร์กับอะเรย์สามารถกำหนดค่าคงตัวสตริงให้
พอยเตอร์อะเรย์ได้ในฐานะเริ่มต้น เช่น

main(){

char name[]="wisit.";

char *lastname="rinjan.";

printf("%s%s",name,lastname);

}

ถ้าหามีสตริงจำนวนมากก็ควรที่จะทำให้เป็นอะเรย์ของสตริง เพื่อที่จะเขียนโปรแกรมได้สะดวก ในการสร้างอะเรย์ของสตริง