สรุป เรื่อง Queues
คิวเป็นโครงสร้างข้อมูลแบบลำดับลักษณะของคิวเราจะสามารถพบได้ในชีวิตประจำอยู่แล้ว เช่น การเข้าแถวตามคิวเพื่อรอการบริการต่างๆ ลำดับการสั่งการพิมพ์งานเป็นต้น ซึ่งจะเห็นได้ว่าลักษณะของการทำงานจะเป็นแบบของใครเข้าคิวก่อน จะได้รับการบริการก่อน เรียกได้ว่าเป็นลักษณะของการทำงาน
แบบ FIFO (First In ,First Out)
ลักษณะของคิวนั้นจะมีปลายสองข้าง ซึ่งข้างหนึ่งจะเป็นช่องทางสำหรับข้อมูลเข้าที่เรียกว่า Rear และอีกข้างหนึ่งซึ่งเป็นช่องทางสำหรับข้อมูลออก เรียกว่า Front ในการทำงานกับคิวที่ต้องมีการนำข้อมูลเข้าและออกนั้นจะต้องมีการตรวจสอบว่าคิวว่างหรือไม่เมื่อต้องการนำข้อมูลเข้า เพราะหากว่าคิวเต็มก็จะไม่สามารถทำการนำข้อมูลเข้าได้ เช่นเดียวกันเมื่อต้องการนำข้อมูลออกก็ต้องตรวจสอบอีกด้วยเช่นกันว่า ในคิวนั้นมีข้อมูลอยู่หรือไม่ หากคิวไม่มีข้อมูลก็จะไม่สามารถนำข้อมูลออกได้ เช่นเดียวกัน
การกระทำกับคิว การเพิ่มข้อมูลเข้าไปในคิวจะกระทำที่ตำแหน่ง Rrar หรือท้ายคิวและก่อนที่จะเพิ่มข้อมูลจะต้องตรวจสอบก่อนว่าคิวเต็มหรือไม่ โดยการเปรียบเทียบค่า Rear ว่าเท่ากับค่า Max queue หรือไม่ หากว่าค่า Rear=Max queue แสดงว่าคิวเต็มไม่สามารถเพิ่มข้อมูลเข้าไปได้ แต่หากไม่เท่า แสดงว่าคิวยังมีที่ว่างสามารถเพิ่มข้อมูลได้ เมื่อเพิ่มข้อมูลเข้าไปแล้ว ค่า Rear ก็จะเป็นค่าตำแหน่งท้ายคิวใหม่
ส่วนในการนำข้อมูลออกจากคิวจะกระทำที่ตำแหน่ง Front หรือส่วนที่เป็นหัวของคิว โดยก่อนที่จะนำข้อมูลออกจากคิวจะต้องมีการตรวจสอบก่อนว่ามีข้อมูลอยู่ในคิวหรือไม่ หากไม่มีข้อมูลในคิวหรือคิวว่างก็จะไม่สามารถนำข้อมูลออกจากคิวได้
คิวแบบวงกลม (Circular Queue) จะมีลักษณะเหมือนคิวธรรมดา คือ จะมีตัวชี้ Front และ Rear ที่แสดงตำแหน่งหัวคิวและท้ายคิวตามลำดับ โดยมี Front และ Rear จะมีการเลื่อนลำดับทุกครั้งเมื่อมีการนำข้อมูลเข้าและออกจากคิว แต่จะแตกต่างจากคิวธรรมดาตรงที่ว่า คิวธรรมดาเมื่อ Rear ชี้ตำแหน่งสุดท้ายของคิว จะทำให้เพิ่มข้อมูลเข้าไปในคิวอีกไม่ได้ เนื่องจากเนื่องจาก ค่า Rear=Max queue ซึ่งแสดงว่าคิวนั้นเต็มไม่สามารถเพิ่มข้อมูลเข้าไปได้อีก ทั้งๆ ที่ยังมีเนื้อที่ของคิวเหลืออยู่ก็ตาม ทำให้การใช้เนื้อที่ของคิวไม่มีประสิทธิภาพ
สำหรับคิวแบบวงกลม จะมีวิธีการจัดการกับปัญหานี้ คือ เมื่อมีข้อมูลเพิ่มเข้ามาในคิว ในลักษณะดังกล่าว คือ ขณะที่ Rear ชี้ตำแหน่งสุดท้ายของคิว ถ้าหากมีการเพิ่มค่าของ Rear จะสามารถวนกลับมาชี้ตำแหน่งแรกสุดของคิวได้ ซึ่งจะทำให้คิวมีลักษณะเป็นแบบวงกลมแสดงคิวแบบวงกลมที่ Rear สามารถวนกลับมาชี้ที่ตำแหน่งแรกสุดของคิว
วันพฤหัสบดีที่ 20 สิงหาคม พ.ศ. 2552
วันอังคารที่ 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 ตามลำดับ
กระบวนการทำงานของสแตกจะประกอบไปด้วยการทำงานที่สำคัญ 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;
}
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. การประกอบเครื่องยนต์
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 หน้าที่คือ การทำลายลิสต์ ข้อมูลนำเข้าคือ ลิสต์และผลลัพธ์ คือไม่มีลิสต์

ลิงค์ลิสต์เป็นวิธีการเก็บข้อมูลอย่างต่อเนื่องของอิลิเมรต์ต่างๆ โดยจะมีพอยเตอร์เป็นตัวเชื่อมต่อ ในแต่ละ
อิลิเมนท์ จะเรียกว่า โนด (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);
}
ถ้าหามีสตริงจำนวนมากก็ควรที่จะทำให้เป็นอะเรย์ของสตริง เพื่อที่จะเขียนโปรแกรมได้สะดวก ในการสร้างอะเรย์ของสตริง
เรื่อง 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);
}
ถ้าหามีสตริงจำนวนมากก็ควรที่จะทำให้เป็นอะเรย์ของสตริง เพื่อที่จะเขียนโปรแกรมได้สะดวก ในการสร้างอะเรย์ของสตริง
วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552
DTS02-/24/06/52
สรุป บทเรียน Lecture 2 Array and Record
อะเรย์เป็นโครงสร้างข้อมูลที่มีลักษณะคล้ายเซ็ตในคณิตศาสตร์ คือ อะเรย์จะประกอบด้วยสมาชิกที่มีจำนวนคงที่ มีรูปแบบข้อมูลเป็นแบบเดียวกัน สมาชิกแต่ละตัวใช้เนื้อที่จัดเก็บที่มีขนาดเดียวกัน
การกำหนดอะเรย์จะต้องกำหนดชื่ออะเรย์ พร้อมกับ subscriptซึ่งเป็นตัวกำหนดขอบเขตของอะเรย์มีได้มากกว่า 1 ตัว อะเรย์มี subscript มากกว่า 1 ตัวจะเรียกว่า อะเรย์หลายมิติการกำหนด subscript แต่ละตัวจะประกอบไปด้วยค่าสูงสุดและค่าต่ำสุดของ subscript นั้น
subscript คือค่าต่ำสุดต้องมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดเสมอ
อะเรย์เป็นโครงสร้างข้อมูลที่มีลักษณะคล้ายเซ็ตในคณิตศาสตร์ คือ อะเรย์จะประกอบด้วยสมาชิกที่มีจำนวนคงที่ มีรูปแบบข้อมูลเป็นแบบเดียวกัน สมาชิกแต่ละตัวใช้เนื้อที่จัดเก็บที่มีขนาดเดียวกัน
การกำหนดอะเรย์จะต้องกำหนดชื่ออะเรย์ พร้อมกับ subscriptซึ่งเป็นตัวกำหนดขอบเขตของอะเรย์มีได้มากกว่า 1 ตัว อะเรย์มี subscript มากกว่า 1 ตัวจะเรียกว่า อะเรย์หลายมิติการกำหนด subscript แต่ละตัวจะประกอบไปด้วยค่าสูงสุดและค่าต่ำสุดของ subscript นั้น
subscript คือค่าต่ำสุดต้องมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดเสมอ
ค่าต่ำสุดเรียกว่า ขอบเขตล่าง
ค่าสูงสุดเรียกว่า ขอบเขตบน
อะเรย์ 1 มิติ รูปแบบ data-type array-name[expression]
data-type คือ ประเภทของข้อมูลอะเรย์ เช่น int float char
array-name คือ ชื่อของอะเรย์
expression คือ นิพจน์จำนวนเต็มซึ่งระบุจำนวนสมาชิกของอะเรย์
ค่าสูงสุดเรียกว่า ขอบเขตบน
อะเรย์ 1 มิติ รูปแบบ data-type array-name[expression]
data-type คือ ประเภทของข้อมูลอะเรย์ เช่น int float char
array-name คือ ชื่อของอะเรย์
expression คือ นิพจน์จำนวนเต็มซึ่งระบุจำนวนสมาชิกของอะเรย์
อะเรย์ 1 มิติ หมายถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำสำหรับตัวแปร ที่เป็นตัวอักษรให้เป็นตัวแปรชุดชนิด character เช่นสมาชิก 4 ตัว โดยหน่วยความจำจะเตรียมเนื้อที่ให้ 1 byte สำหรับชื่อตัวแปร เป็นการข้อมูลเพียงแถวเดียว
อะเรย์ 2 มิติ รูปแบบ type array-name[n][m];
type หมายถึง ชนิดของตัวแปรที่ต้องการประกาศ
array-name หมายถึง ชื่อของตัวแปรที่ต้องการประกาศเป็นอะเรย์
type หมายถึง ชนิดของตัวแปรที่ต้องการประกาศ
array-name หมายถึง ชื่อของตัวแปรที่ต้องการประกาศเป็นอะเรย์
n หมายถึง ตัวเลขที่แสดงตำแหน่งของแถว m หมายถึง ตัวเลขที่แสดงตำแหน่งของคอลัมน์
ตัวอย่างอะเรย์ 2 มิติ
กำหนดค่าเริ่มต้นให้ int a[4][8]
Structure
เป็นโครงสร้างข้อมูลที่ประกอบขึ้นจากข้อมูลต่างประเภทกัน ซึ่งรวมกันเป็น 1ชุดข้อมูลคือจะประกอบด้วย data element field ต่างประเภทซึ่งรวมกันอยู่ structure คือ โครงสร้างที่มีข้อมูลแต่ละประเภทที่แตกต่างกัน structure อาจจะมีสมาชิกเป็น ทศนิยม จำนวนเต็ม อักขระ อยู่รวมกัน
คำหลักที่ต้องมีเสมอคือ Structure
struc-name ชื่อกลุ่ม
type ชนิดของตัวแปรที่อยู่ในกลุ่ม
name-n ชื่อของตัวแปรชนิดโครงสร้าง
struc-variable ชื่อตัวแปรที่มีโครงสร้าง
structure จะเป็นการกำหนดให้ตัวแปร employee เป็นชื่อของกลุ่ม structure ที่ประกอบไปด้วย ตัวแปร name[20],age และ salary โดยมีตัวแปร personel เป็นตัวแปรชนิดโครงสร้างที่มีข้อมูลแบบเดียวกับตัวแปรemployee การอ้างถึงตัวแปรที่อยู่ในตัวแปรชนิดโครงสร้างสามารถอ้างถึงตัวแปรที่อยู่ในตัวแปรชนิดโครงสร้างได้รูปแบบ struct-variable.element-name struct-variable คือชื่อตัวแปรชนิดโครงสร้าง
element-name คือชื่อตัวแปรที่อยู่ภายใน structure
การบ้านโครงสร้างข้อมูล
struct family {
char fam_name[30];
char dad_name[50];
int age_dad;
char mom_name[50];
int age_mom;
char son_name;[50];
int age_son;
float fam_income;
} family1;
ตัวอย่าง
family1.age_dad=40;
family1.fam_income=50000;
char fam_name[30];
char dad_name[50];
int age_dad;
char mom_name[50];
int age_mom;
char son_name;[50];
int age_son;
float fam_income;
} family1;
ตัวอย่าง
family1.age_dad=40;
family1.fam_income=50000;
วันพฤหัสบดีที่ 25 มิถุนายน พ.ศ. 2552
ประวัติ
ชื่อ-นามสกุล นายวิสิทธิ์ รินจันทร์
ชื่อเล่น ตั้ม
วัน เดือน ปีเกิด 22 กันยายน พ.ศ. 2531
ส่วนสูง 173
น้ำหนัก 65
การศึกษา ศึกษาอยู่ที่ มหาวิทยาลัยราชภัฏสวนดุสิต
อาชีพ นักศึกษา
คติประจำใจ จงสร้าง บุญและทำความดีบนโลกนี้
สมัครสมาชิก:
บทความ (Atom)