วันอาทิตย์, กรกฎาคม 19, 2552

DTS 04 15-07-52

(การบ้าน)

#includemain()
{struct resume{char First_Name[30];
char Last_Name[30];
char Nickname[10];
char Sex[10];i
nt Age;
int Height;
int Weight;
char Birthday[40];
char Address[20];
char Province[30];
char City[20];
char Country[30];
char Postal_Code[10];
}resume1;
cout<<"Insert Data\n\n";
cout<<"First Name : ";
cin>>resume1.First_Name;
cout<<"Last Name : ";
cin>>resume1.Last_Name;
cout<<"Nickname : ";
cin>>resume1.Nickname;
cout<<"Sex : ";
cin>>resume1.Sex;
cout<<"Age : ";
cin>>resume1.Age;
cout<<"Height : ";
cin>>resume1.Height;
cout<<"Weight : ";
cin>>resume1.Weight;
cout<<"Birthday : ";
cin>>resume1.Birthday;
cout<<"Address : ";
cin>>resume1.Address;
cout<<"Province : ";
cin>>resume1.Province;
cout<<"City : ";
cin>>resume1.City;
cout<<"Country : ";
cin>>resume1.Country;
cout<<"Postal code : ";
cin>>resume1.Postal_Code;
}

#include
#include
main()
{struct resume
{char First_Name[30];
char Last_Name[30];
char Nickname[10];
char Sex[10];
int Age;
int Height;
int Weight;
char Birthday[40];
char Address[20];
char Province[30];
char City[20];
char Country[30];
char Postal_Code[10];
}resume1;
clrscr();
printf("Insert Data\n\n");
printf("First Name : ");
scanf("%s",&resume1.First_Name);
printf("Last Name : ");
scanf("%s",&resume1.Last_Name);
printf("Nickname : ");
scanf("%s",&resume1.Nickname);printf("Sex : ");
scanf("%s",&resume1.Sex);
printf("Age : ");
scanf("%d",&resume1.Age);
printf("Height : ");
scanf("%d",&resume1.Height);
printf("Weight : ");
scanf("%d",&resume1.Weight);
printf("Birthday : ");
scanf("%s",&resume1.Birthday);
printf("Address : ");
scanf("%s",&resume1.Address);
printf("Province : ");
scanf("%s",&resume1.Province);
printf("City : ");
scanf("%s",&resume1.City);
printf("Country : ");
scanf("%s",&resume1.Country);
printf("Postal code : ");
scanf("%s",&resume1.Postal_Code);
clrscr();


/output//

printf("Your Resume\n\n");
printf("Your Name is :%s %s\n",resume1.First_Name,resume1.Last_Name);
printf("Nickname :%s\n",resume1.Nickname);
printf("Sex :%s\n",resume1.Sex);
printf("Age :%d\n",resume1.Age);
printf("Height :%d cm\n",resume1.Height);
printf("Weight :%d km\n",resume1.Weight);
printf("Birthday :%s\n",resume1.Birthday);
printf("Address :%s\n",resume1.Address);
printf("Province :%s\n",resume1.Province);
printf("City :%s\n",resume1.City);
printf("Country :%s\n",resume1.Country);
printf("Postal Code :%s\n",resume1.Postal_Code);
}

สรุป (linked list) และ (Stack)

การจัดเก็บที่มีรูปแบบเรียงตามลำดับ(Sequential)เปลี่ยนมาใช้รูปแบบไม่เรียงตามลำดับ (Non-sequential)ซึ่งรูปแบบการเรียงตามลำดับจะมีสมาชิกเรียงต่อเนื่องติดกันในทางตรรกะ (Logical) และทางกายภาพ(Physical) เป็นแบบเดียวกัน สมาชิกมีการชี้ (Point) ต่อไปยังสมาชิกตัวถัดไป สมาชิกทุกตัวในรายการจึงถูกเชื่อมต่อ (Link) เรียกว่าลิ้งค์ลิสต์ (Linked List) มีสมาชิก N ตัว แต่ละสมาชิกเรียกว่าโหนด (Node)
โหนดเป็นโครงสร้างข้อมูลเรคคอร์ด ประกอบด้วยสองส่วน คือ 1.ส่วนเก็บข้อมูล (Info) ใช้เก็บข้อมูลข่าวสารที่มีโครงสร้างข้อมูลเบื้องต้นหรือเรียบง่าย
2.ส่วนการเชื่อมต่อ (Next) เป็นตัวชี้หรือพอยน์เตอร์เก็บค่าแอดเดรสใช้อ้างไปยังโหนดถัดไปในหน่วยความจำสำหรับในทางกายภาพของลิ้งค์ลิสต์

การปฏิบัติการพื้นฐานของลิงค์ลิสต์

สิ่งสำคัญอย่างหนึ่งในการใช้โครงสร้างข้อมูลลิงค์ลิสต์ คือ ตัวแปรพอยน์เตอร์ (Pointer Variable) ซึ่งเก็บค่าเป็นตำแหน่งแอดเดรสในหน่วยความจำ (Memory Address) ในการปฏิบัติการกับลิ้งค์ลิสต์และให้มีความถูกต้องจะใช้ตัวแปรพอยน์เตอร์ในการจัดการเรื่องต่อไปนี้1.ใช้ทดสอบกับค่า NULL2.ใช้ทดสอบว่ามีค่าเท่ากับตัวแปรพอยน์เตอร์อื่น 3.กำหนดให้มีค่าเป็น NULL4.กำหนดให้ชี้ไปยังโหนด ชุดปฏิบัติการของลิ้งค์ลิสต์ที่ทกวานร่วมกับตัวแปรพอยน์เตอร์

การแทรกโหนดในลิ้งค์ลิสต์

การแทรกโหนดใหม่ไว้ในลิ้งค์ลิสต์ โดยเริ่มต้นสร้างเป็นโหนด I ในหน่วยความจำกำหนดส่วนเก็บข้อมูลมีค่า L ส่วนการเชื่อมต่อมี่ค่าเป็น NULL ซึ่งมีตัวแปรพอยน์เตอร์
เมื่อการแทรกโหนดเสร็จสิ้น โหนด I จะมาต่อจากโหนดก่อนหน้าและแทนที่ลำดับของโหนดถัดไป การทำงานดังกล่าวจะมีเพียง 2 โหนดที่เดี่ยวขอ้งคือโหนดใหม่ I และโหนดที่ตัวแปรพอยน์เตอร์ P ชี้อยู่ ส่วนโหนดอื่นๆ ไม่ถูกเรียกใช้งานเรือเปลี่ยนแปลง

ตัวอย่างลิงค์ต่างๆ




ตัวอย่างที่1

ตัวอย่างที่2


สแตก (Stack)

เป็นโครงสร้างข้อมูลที่ข้อมูลแบบลิเนียร์ลิสต์ ที่มีคุณสมบัติที่ว่า การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ ปลายข้างเดียวกัน ซึ่งเรียกว่า Top ของสแตก (TopOf Stack) และ ลักษณะที่สำคัญของสแตกคือ ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จากสแตกเป็นลำดับแรกสุด เรียกคุณสมบัตินี้ว่า
LIFO (Last In First Out)
การแทนที่ข้อมูลของสแตก
การแทนที่ข้อมูลของสแตก
สามารถทำได้ 2 วิธี คือ
1. การแทนที่ข้อมูลของสแตกแบบลิงค์ลิสต์
2. การแทนที่ข้อมูลของสแตกแบบอะเรย์

Stack Topเป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก โดยไม่มีการลบข้อมูลออกจากสแตก

Full Stackเป็นการตรวจสอบว่าสแตกเต็มหรือไม่ เพื่อไม่ให้เกิดความผิดพลาดในการนำข้อมูลเข้าสแตกที่เรียกว่า Stack Overflow

การประยุกต์ใช้สแตกการประยุกต์ใช้สแตก จะใช้ในงานด้านปฏิบัติการของเครื่องคอมพิวเตอร์ที่ขั้นตอนการทำงานต้องการเก็บข่าวสารอันดับแรกสุดไว้ใช้หลังสุด เช่น การทำงานของโปรแกรมแปลภาษานำไปใช้ในเรื่องของการโปรแกรมที่เรียกใช้โปรแกรมย่อย การคำนวณนิพจน์ทางคณิตศาสตร์ และรีเคอร์ชั่น (Recursion)

วันอาทิตย์, กรกฎาคม 12, 2552

dts03-02/07/52

Set and String
โครงสร้างข้อมูลแบบเซ็ต
เป็นโครงสร้างข้อมูลของแต่ละตัวไม่มีความสัมพันธ์กัน ในภาษาซีจะไม่มีประเภทข้อมูลแบบเซ็ตนี้เหมือนกับในภาษาปาสคาล แต่สามารถใช้หลักการของการดำเนินงาน
แบบเซ็ตมาใช้ได้ตัวดำเนินการของเซ็ต (Set operators)
ประกอบด้วย
- set intersection
- set union
- set difference
โครงสร้างข้อมูลแบบสตริง
สตริง (String) หรือ สตริงของอักขระ (Character String) เป็นข้อมูลที่ประกอบไปด้วย ตัวอักษรตัวเลขหรือเครื่องหมายเรียงติดต่อกันไป รวมทั้งช่องว่างการประยุกต์ใช้คอมพิวเตอร์ที่เกี่ยวกับข้อมูลที่เป็นสตริง สตริงกับอะเรย์
สตริง คือ อะเรย์ของอักขระเช่น char a[6]อาจจะเป็นอะเรย์ขนาด 6 ช่องอักขระ
หรือเป็นสตริงขนาด 5 อักขระก็ได้ โดยจุดสิ้นสุดของstring จะจบด้วย \0 หรือ null character
การกำหนดสตริงทำได้หลายแบบ คือ
1. กำหนดเป็นสตริงที่มีค่าคงตัว(String Constants)
2. กำหนดโดยใช้ตัวแปรอะเรย์หรือพอยเตอร์
การกำหนดค่าคงตัวสตริงให้แก่ตัวแปรพอยต์เตอร์และอะเรย์สามารถกำหนดค่าคงตัวสตริงให้พอยเตอร์หรืออะเรย์ได้ในฐานะค่าเริ่มต้น
เช่น main ( )
{
char ary[ ] = “This is the house. ”;
char *cpntr=“This is the door.”;
printf(“%s %s”,ary,cpntr);
}
การกำหนดตัวแปรสตริง
อาศัยหลักการของอะเรย์ เพราะ สตริงก็คืออะเรย์ของอักขระที่ปิดท้าย
ด้วย null character (\0) และมีฟังก์ชันพิเศษสำหรับทำงานกับสตริงโดยเฉพาะ
เช่น ต้องการสตริงสำหรับเก็บชื่อบุคคลยาวไม่เกิน 40 อักขระ ต้องกำหนดเป็นอะเรย์ขนาด 41ช่อง เพื่อเก็บnull character อีก 1 ช่อง
อะเรย์ของสตริง
การสร้างอะเรย์ของสตริง สามารถสร้างได้ทั้งแบบที่ให้ค่าเริ่มต้นและแบบที่กำหนดเป็นตัวแปร
ฟังก์ชัน puts ( ) ใช้ในการพิมพ์สตริงออกทางจอภาพ โดยการผ่านค่าแอดเดรสของสตริงไปให้เท่านั้น
การกำหนดอะเรย์ 2 มิติ
เช่น
char fruit [3][7]={“Apple”, “Orange”, “Mango”};
กำหนดตัวแปร fruit เป็นแบบ 3 แถว 7 คอลัมน์ในแต่ละช่องจะเก็บข้อมูลแบบอักขระ
การดำเนินการเกี่ยวกับสตริงในการดำเนินการเกี่ยวกับสตริง จะมีฟังก์ชันที่อยู่ในแฟ้ม ข้อมูล stdio.h เก็บอยู่ใน C Library อยู่แล้วสามารถนำมาใช้ได้ โดยการใช้คำสั่ง #include ในการเรียกใช้ เช่น
- ฟังก์ชัน strlen(str) ใช้หาความยาวของสตริง
- ฟังก์ชัน strcpy (str1,str2) ใช้คัดลอกข้อมูลจาก string หนึ่งไปยังอีก string หนึ่ง