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

DTS 05-22/07/52

สรุปเรื่อง Stack

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

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

DTS 04-15/07/52

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

โครงสร้างข้อมูลแบบลิงค์ลิสต์
โครงสร้างข้อมูลแบบลิงค์ลิสต์จะแบ่งเป็น 2 ส่วน คือ
1. Head Structure
2. Data Node Structure
กระบวนงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน
1. กระบวนงาน Create Listหน้าที่ สร้างลิสต์ว่าง ผลลัพธ์ ลิสต์ว่าง
2. กระบวนงาน Insert Node หน้าที่เพิ่มข้อมูลลงไปในลิสต์บริเวณตำแหน่งที่ต้องการข้อมูลนำเข้า ลิสต์ ข้อมูล และตำแหน่ง ผลลัพธ์ ลิสต์ที่มีการเปลี่ยนแปลง
3. กระบวนงาน Delete Node หน้าที่ ลบสมาชิกในลิสต์บริเวณตำแหน่งที่ต้องการข้อมูลนำเข้า ข้อมูลและตำแหน่งผลลัพธ์ลิสต์ที่มีการเปลี่ยนแปลง
4. กระบวนงาน Search list หน้าที่ ค้นหาข้อมูลในลิสต์ที่ต้องการข้อมูลนำเข้าลิสต์ ผลลัพธ์ ค่าจริงถ้าพบข้อมูล ค่าเท็จถ้าไม่ พบข้อมูล
5. กระบวนงาน Traverse หน้าที่ ท่องไปในลิสต์เพื่อเข้าถึงและประมวลผลข้อมูล นำเข้าลิสต ผลลัพธ์ ขึ้นกับการประมวลผล เช่นเปลี่ยนแปลงค่าใน node , รวมฟิลด์ในลิสต์ , คำนวณค่าเฉลี่ยของฟิลด์ เป็นต้น
6. กระบวนงาน Retrieve Nodeหน้าที่ หาตำแหน่งข้อมูลจากลิสต์ข้อมูลนำเข้าลิสต์ผลลัพธ์ ตำแหน่งข้อมูลที่อยู่ในลิสต์
7. ฟังก์ชั่น EmptyListหน้าที่ ทดสอบว่าลิสต์ว่างข้อมูลนำเข้า ลิสต์ผลลัพธ์ เป็นจริง ถ้าลิสต์ว่าเป็นเท็จ ถ้าลิสต์ไม่ว่าง
8. ฟังก์ชั่น FullListหน้าที่ ทดสอบว่าลิสต์เต็มหรือไม่ข้อมูล นำเข้าลิสต์ผลลัพธ์ เป็นจริง ถ้าหน่วยความจำเต็ม เป็นเท็จ ถ้าสามารถมีโหนดอื่น
9. ฟังก์ชั่น list countหน้าที่ นับจำนวนข้อมูลที่อยู่ในลิสต์ข้อมูลนำเข้าลิสต์ผลลัพธ์ จำนวนข้อมูลที่อยู่ในลิสต์
10. กระบวนงาน destroy list หน้าที่ ทำลายลิสต์ข้อมูลนำเข้า ลิสต์ผลลัพธ์ ไม่มีลิสต์

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

DTS 03-01/07/52

โครงสร้างข้อมูลแบบเซ็ต เป็นโครงสร้างข้อมูลที่ข้อมูลแต่ละตัวไม่มีความสัมพันธ์กัน ในภาษาซีจะไม่มีประเภทข้อมูลแบบเซ็ตนี้เหมือนกับในภาษาปาสคาล แต่สามารถใช้หลักการของการดำเนินงานแบบเซ็ตมาใช้ได้
โครงสร้างข้อมูลแบบสตริง สตริงหรือสตริงของอักขระ เป็นข้อมูลที่ประกอบไปด้วย ตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดต่อกันไป รวมทั้งช่องว่าง การประยุกต์ใช้คอมพิวเตอร์ที่เกี่ยวกับข้อมูลที่เป็นสตริงมีการนำไปใช้สร้างโปรแกรมประเภทบรรณาธิการข้อความหรือโปรแกรมประเภทประมวลผลคำ
การกำหนดค่าคงตัวสตริง สามารถกำหนดได้ทั้งนอกและในฟังก์ชัน เมื่อกำหนดไว้นอกฟังก์ชัน ชื่อค่าคงตัวจะเป็นพอยเตอร์ชี้ไปยังหน่วยความจำที่เก็บสตริงนั้น
การกำหนดตัวแปรสตริง ในการกำหนดตัวแปรของสตริง อาศัยหลักการของอะเรย์ เพราะสตริงก็คืออะเรย์ของอักขระที่ปิดท้ายด้วย null character (/0) และมีฟังก์ชันพิเศษสำหรับทำงานกับสตริงโดยเฉพาะ
อะเรย์ของสตริง ถ้าหากมีสตริงจำนวนมากก็ควรจะทำให้เป็นอะเรย์ของสตริง เพื่อจะเขียนโปรแกรมได้สะดวก การสร้างอะเรย์ของสตริง สามารถสร้างได้ทั้งแบบที่ให้ค่าเริ่มต้นและแบบที่กำหนดเป็นตัวแปร
อะเรย์ของสตริงที่ยาวเท่ากัน อะเรย์ในลักษณะนี้จะถือว่าเป็นะเรย์ที่แท้จริง และสามรถกำหนดได้ทั้งเมื่อมีการให้ค่าเริ่มต้น และเมื่อกำหนดเป็นตัวแปร โดยดำเนินการตามแบการกำหนดอะเรย์ 2 มิติ การกำหนดตัวแปรในลักษณะนี้ จะแตกต่างจาการกำหนดตัวแปรแบบความยาวไม่เท่ากัน คือ ในแบบความยาวไม่เท่ากัน ท้ายของสตริงจะฟังก์ชันหะที่อยู่ในแฟ้มข้อมูล stdio.h เก็บอยู่ใน C Library อยู่แล้วสามารถนำมาใช้ได้ โดยการใช้คำสั่ง #include ในการเรียกใช้

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

การบ้านโครงสร้างข้อมูล

#include "stdio.h"
#include"string.h"
main()
{
struct address
{
char name[30];
int age;
char sex[20];
char address[40];
char road[20];
char district[30];
char province[30];
char code[20];
} address1;
strcpy(address1.name,"Supansa Chatthai");
address1.age=20;
strcpy(address1.sex,"female");
strcpy(address1.address,"24");
strcpy(address1.road,"-");
strcpy(address1.district,"Mueng");
strcpy(address1.province,"Patumtanee");
strcpy(address1.code,"12000");

printf("name:%s\n",address1.name);
printf("age:%d\n",address1.age);
printf("sex:%s\n",address1.sex);
printf("address:%s\n",address1.address);
printf("road:%s\n",address1.road);
printf("distric:%s\n",address1.district);
printf("province:%s\n",address1.province);
printf("code:%s\n",address1.code);
}