วันอาทิตย์, กรกฎาคม 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)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น