วิชา cosc2202 โครงสร้างข้อมูล (data structure)

34
ททททททททททท Array ททท struct pointer ททททททททททททททททททททท ทททททททททท ทททท COSC2202 ททททททททททททททท (Data Structure)

Upload: george-massey

Post on 04-Jan-2016

51 views

Category:

Documents


0 download

DESCRIPTION

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure). ทบทวนเรื่อง Array และ struct pointer การเขียนโปรแกรมติดต่อแฟ้มข้อมูล. ทบทวนเรื่อง Array. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ทบทวนเรื่�อง Array และ struct pointer การื่เขี�ยนโปรื่แกรื่มติ�ดติ�อแฟ้�ม

ขี�อม�ล

ว�ชา COSC2202 โครื่งสรื่�างขี�อม�ล (Data Structure)

Page 2: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ทบทวนเรื่��อง Array Array เป"นโครื่งสรื่�างขี�อม�ลท�ปรื่ะกอบด�วยกล#�มขีอง

ติ$วแปรื่ท�เป"นค�าอะไรื่ก&ได� แติ�ติ�องม�ชน�ดเด�ยวก$น ขี�อม�ลแติ�ละติ$วใน Array เรื่�ยกว�าสมาช�กขีอง array การื่อ�างถึ)งจะเรื่�ยกช�อติ$วแปรื่ array แล�วติามด�วยหมายเลขีด$ชน� (index ) ขีองสมาช�กท�ติ�องการื่อ�างถึ)ง โดยสมาช�กติ$วแรื่กจะแทนด�วยล,าด$บหมายเลขี 0 สมาช�กติ$วท�2 แทนด�วยล,าด$บหมายเลขี 1 ..จนถึ)งล,าด$บท� n

Page 3: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ทบทวนเรื่��อง Arrayติ$วอยาง char a[4]; int num[10]; int a[2][3];

ขีนาดขีอง subscript = upper bound – lower bound + 1

ขีนาดขีองอะเรื่ย = ผลค�ณขีองขีนาดขีอง subscript แติละติ$ว

สมการื่ค,านวณหาติ,าแหน�งขี�อม�ล i -0Loc (A[i]) = L + (i L)C

Page 4: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Pointers และ Arrays ของ Pointers Pointer เป"นติ$วแปรื่ชน�ดหน)งท�ท,าหน�าท�เก&บติ,าแหน�งท�อย��

(Address ) ขีองติ$วแปรื่ท�อย��ในหน�วยความจ,า รื่�ปแบบ

   - *type variable name

type หมายถึ)ง   ชน�ดขีองติ$วแปรื่ *       หมายถึ)ง   เป"นเครื่�องหมายท�แสดงว�า ติ$วแปรื่ท�ติามหล$งเครื่�องหมาย

น�2เป"นติ$วแปรื่พอยน4เติอรื่4

variable-name    เป"นช�อขีองติ$วแปรื่ท�ติ�องการื่ปรื่ะกาศว�าเป"นชน�ดพอยน4เติอรื่4

Page 5: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Pointers และ Arrays ของ Pointers

char  * prt;                                หมายความว�า   ปรื่ะกาศว�าติ$วแปรื่ prt เป"นติ$วแปรื่พอยน4เติอรื่4ท�ใช�เก&บติ,าแหน�งเรื่�มติ�นท�จะเก&บ character            

int  * a;                       หมายความว�า  ปรื่ะกาศว�าติ$วแปรื่ a เป"นติ$วแปรื่พอยน4เติอรื่4ท�ใช�เก&บติ,าแหน�งเรื่�มติ�นท�จะใช�เก&บ integer

Page 6: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Pointers และ Arrays ของ Pointers

เครื่�องหมาย & เป"นเครื่�องหมายท�ใช�เม�อติ�องการื่ให�เอาค�าติ,าแหน�งท�อย��ขีองติ$วแปรื่ท�เก&บไว�ในหน�วยความจ,าออกมาใช� เช�น x=10 (ก,าหนดให�ติ$วแปรื่ x ซึ่)งอย��ท�ติ,าแหน�ง 1000 ม�ค�า 10 เก&บอย��)

  int  * y , x=10;   y = &x;

ติ$วแปรื่ y ซึ่)งปรื่ะกาศเป"นติ$วแปรื่พอยน4เติอรื่4จะเก&บค�า 1000 ซึ่)งเป"นติ,าแหน�งท�อย��

Page 7: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง Pointers และ Arrays ของ Pointers

ค,าส$งท� 1 : int a, *ptr, b, c , *d;

int a, *ptr, b, c , *d; a=25;ptr = &a;

b = a; ค,าส$งท� 2 : a = 25c = *ptr;d = ptr;

Page 8: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง Pointers และ Arrays ของ Pointers

ค,าส$งท� 3   :  ptr = &a;int a, *ptr, b, c , *d; a=25;ptr = &a;

b = a; ค,าส$งท� 4   :   b = a; c = *ptr;d = ptr;

Page 9: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง Pointers และ Arrays ของ Pointers

ค,าส$งท� 5 : c = *ptr;int a, *ptr, b, c , *d; a=25;ptr = &a;

b = a; ค,าส$งท� 6 : d = ptr; c = *ptr;d = ptr;

Page 10: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Struct Struct เป"นท�เก&บช#ดขีองขี�อม�ลคล�ายก$บ Array แติ�

ถึ�าเป"น Array น$2น Array ติ$วหน)งสามารื่ถึเก&บขี�อม�ลได�เฉพาะท�เป"นชน�ดเด�ยวก$นเท�าน$2น (Data Type เด�ยวก$น ) แติ�ส,าหรื่$บ Struct ติ$วหน)ง ๆ สามารื่ถึเก&บขี�อม�ลได�หลาย ๆ ชน�ด เช�น int, float, char ด�วยการื่ใช�ช�อติ$วแปรื่เด�ยวก$น ชื่��อชื่��อ สกุ�ลสกุ�ล อายุ�อายุ�เกุรื่ดเฉล��ยุเกุรื่ดเฉล��ยุ

Page 11: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Structปรื่ะกาศ Struct โดยใช�ช�อ Struct ว�า data_recใน data_rec ม�ขี�อม�ลเก&บได� 4 fields ได�แก� ติ$วแปรื่ first_name เป"น String ขีนาด 20 ช�อง ติ$วแปรื่ last_name เป"น String ขีนาด 20 ช�อง ติ$วแปรื่ age เป"นชน�ดจ,านวนเติ&ม ติ$วแปรื่ gpa เป"นชน�ดทศน�ยม ปรื่ะกาศ Struct ติ$วน�2 ให�เป"นชน�ดขี�อม�ลใหม�ขีองเรื่าเอง โดยใช�ม$นช�อ

ว�า record ด$งน$2นค,าว�า record น�2 จะเสม�อนว�าม$น ค�อ int ม$นค�อ char ท,านองน$2น (Keyword ในการื่ปรื่ะกาศชน�ดขี�อม�ลใหม�ก&ค�อ typedef น$นเอง)

Page 12: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Struct การื่ปรื่ะกาศติ$วแปรื่

ส�งท�เรื่าได�ท,าไปค�อการื่สรื่�างชน�ดขี�อม�ลใหม�ขี)2นมา เวลาจะใช�งานม$นก&ติ�องปรื่ะกาศเป"นติ$วแปรื่ก�อน ด$งเช�น record student; หมายความว�า ให�ติ$วแปรื่ช�อ student ม�ชน�ดขี�อม�ล (data type)

เป"นแบบ record ซึ่)งจะเห&นว�าม$นก&คล�ายก$บ int x; น$นเอง การื่อ�างถึ)ง ท,าได�โดยการื่ใช�ช�อติ$วแปรื่ติามด�วยเครื่�องหมายจ#ด แล�วติามด�วยช�อ

field ท�ติ�องการื่ student.first_name;student.last_name;student.age;student.gpa ;

Page 13: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Struct

เรื่าสามารื่ถึปรื่ะย#กติ4การื่ใช� Struct เป"น Array of Struct ได�ด�วย ติ$วอย�างเช�น

ชื่��อชื่��อ สกุ�ลสกุ�ล อายุ�อายุ�เกุรื่ดเฉล��ยุเกุรื่ดเฉล��ยุ

Page 14: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Struct การื่อ�างถึ)ง ท,าได�โดยใช�ช�อติ$วแปรื่ติาม

ด�วยเครื่�องหมายก�ามป� [] ติามด�วยจ#ด แล�วติามด�วยช�อ Field ท�ติ�องการื่เช�น ชื่��อของแถวบนส�ด คื�อ

student[0].first_nameอายุ�ของแถวต่�อมา คื�อ student[1].last_nameเกุรื่ดเฉล��ยุของแถวส�ดท�ายุ คื�อ student[2].gpa

Page 15: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)
Page 16: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง

Page 17: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)
Page 18: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่เขี�ยนโปรื่แกรื่มติ�ดติ�อแฟ้�มขี�อม�ล ท าไมต่�องเข�ยุนโปรื่แกุรื่มต่$ดต่�อแฟ้&มข�อม'ล (File) การื่ใช�ติ$วแปรื่และปรื่ะมวลผลติ$วโปรื่แกรื่มท$2งหมด จะท,างานอย��ใน

หน�วยความจ,า (Memory) เท�าน$2น น$นก&หมายความว�าเม�อโปรื่แกรื่มท,างานเสรื่&จขี�อม�ลติ�าง ๆ ก&จะส�ญหายไป

ถึ�าติ�องการื่ให�ขี�อม�ล (ผลล$พธ์4 ) น$2นย$งคงอย�� เรื่าสามารื่ถึท,าได�โดยใช�หล$กง�าย ๆ ค�อเขี�ยนขี�อม�ลผลล$พธ์4น$2น เก&บเอาไว�ในไฟ้ล4น$นเอง

การื่เขี�ยนโปรื่แกรื่มเพ�อติ�ดติ�อไฟ้ล4 ย$งม�ปรื่ะโยชน4ในกรื่ณ�ท�เรื่าม�ไฟ้ล4ขี�อม�ล input อย��แล�ว ติ�องการื่อ�านม$นขี)2นมาแล�วปรื่ะมวลผล แทนท�จะติ�องมาน$งค�ย4ขี�อม�ลด�วยตินเองมาก ๆ

Page 19: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ปรื่ะเภทขีองไฟ้ล4 ส,าหรื่$บไฟ้ล4ขี�อม�ลในภาษาซึ่�ท�ใช�ในการื่ท,างานเพ�อเก&บ

ขี�อม�ลแบ�งออกเป"น 2 ปรื่ะเภทค�อ Text File (Sequential Access) (*)

เป"นไฟ้ล4ขี�อม�ล ท�เก&บพวกขี�อความ (เป=ดอ�านรื่� �เรื่�อง)

Binary File (Random Access) เป"นไฟ้ล4ขี�อม�ล ท�เก&บเป"น Binary (0/1) ด$งน$2นถึ�า

เรื่าใช�โปรื่แกรื่มเช�น Notepad เป=ดก&จะอ�านไม�รื่� �เรื่�อง

Page 20: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่ติ�ดติ�อไฟ้ล4 รื่'ปแบบกุารื่ปรื่ะกุาศใชื่�งานต่*วแปรื่ส าหรื่*บเรื่��องกุารื่

ต่$ดต่�อไฟ้ล,

FILEFILE เป-นปรื่ะเภทข�อม'ล เป-นปรื่ะเภทข�อม'ล (data type)(data type) ท��ใชื่�งานกุ*บไฟ้ล, คืล�ายุ ๆ ท��ใชื่�งานกุ*บไฟ้ล, คืล�ายุ ๆ กุ*บ กุ*บ int, charint, char

*fp*fp เป-นชื่��อต่*วแปรื่เป-นชื่��อต่*วแปรื่ pointer pointer ท��ใชื่�อ�างอ$งพื้�1นท��กุารื่ท างานท��ใชื่�อ�างอ$งพื้�1นท��กุารื่ท างาน

FILE *fp; FILE *fp;

ในภาษาซี� ต่*วอ*กุษรื่เล4กุ กุ*บ ใหญ่� ม�คืวามหมายุต่�างกุ*น (Case Sensitive) ซี6�ง FILE เป-น keyword ต่�องเข�ยุนด�วยุต่*วพื้$มพื้,ใหญ่�

Page 21: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ค,าส$งท�ใช�งานก$บไฟ้ล4ขี�อม�ล กุารื่เป7ดไฟ้ล, กุารื่ป7ดไฟ้ล, กุารื่ต่รื่วจสอบว�าในไฟ้ล,ยุ*งม�ข�อม'ลเหล�ออยุ'�หรื่�อไม� กุารื่อ�านข�อม'ลจากุ Text File กุารื่เข�ยุนข�อม'ลลง Text File

Page 22: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่เป=ดไฟ้ล4

fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4ท�เรื่าติ�องการื่ น$กศ)กษาจะติ$2งว�าอะไรื่ก&ได�

fopen ค�อ ค,าส$งส,าหรื่$บเป=ดไฟ้ล4 file name ค�อ รื่ะบ#ช�อไฟ้ล4พรื่�อมนามสก#ล ท�ติ�องการื่ให�ไปเป=ด mode ค�อ โหมดในการื่เป=ด เน�องจากในภาษาซึ่�ติ�องรื่ะบ#

ด�วยว�าจะให�เป=ดเพ�ออะไรื่ เช�น เป=ดเพ�ออ�าน , เขี�ยน ,เขี�ยนติ�อท�าย

เป"นติ�น

fp = fopen(“file name”,“mode”); fp = fopen(“file name”,“mode”);

Page 23: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Mode ในการื่เป=ดไฟ้ล4ModeMode คื าอธิ$บายุคื าอธิ$บายุ

r เป=ดไฟ้ล4 เพ�ออ�านเท�าน$2น

w เป"นการื่สรื่�างไฟ้ล4ใหม� ถึ�าหากไฟ้ล4น$2นม�อย��แล�วจะถึ�กสรื่�างท$บท$นท� (overwritten)

a การื่เป=ดไฟ้ล4 เพ�อบ$นท)กขี�อม�ลติ�อท�ายขี�อม�ลเด�ม , หรื่�อเป"นการื่สรื่�างไฟ้ล4 ถึ�าไฟ้ล4น$2นย$งไม�ม�อย��

r+ เป=ดไฟ้ล4 เพ�ออ�านและปรื่$บปรื่#งแก�ไขี

w+ เป"นการื่สรื่�างไฟ้ล4ใหม� และบ$นท)กขี�อม�ล ถึ�าหากไฟ้ล4น$2นม�อย��แล�วจะถึ�กสรื่�างท$บท$นท�

a+ การื่เป=ดไฟ้ล4 เพ�อบ$นท)กขี�อม�ลติ�อท�ายขี�อม�ลเด�ม,เป=ดไฟ้ล4 เพ�ออ�านและปรื่$บปรื่#งแก�ไขีขี�อม�ลท�ท�ายส#ดขีองไฟ้ล4,เป"นการื่สรื่�างไฟ้ล4 ถึ�าไฟ้ล4น$2นย$งไม�ม�อย��

Page 24: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Mode ในการื่เป=ดไฟ้ล4 ส,าหรื่$บการื่ท,างานก$บ Text File เรื่าติ�องใส�

อ$กษรื่ “t” เพ�มเขี�าไปใน mode ด�วย (rt, w+t เป"นติ�น)

ส,าหรื่$บการื่ท,างานก$บ Binary File เรื่าติ�องใส�อ$กษรื่ “b” เพ�มเขี�าไปใน mode ด�วย (wb, a+b เป"นติ�น)

Page 25: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่ป=ดไฟ้ล4 ใช�ค,าส$ง fclose เม�อเรื่าใช�งานไฟ้ล4เสรื่&จ หรื่�อ

ติ�องการื่เปล�ยน mode

fclose ค�อ ค,าส$งส,าหรื่$บป=ดไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4

น$2น ๆ

fclose(fp); fclose(fp);

Page 26: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติรื่วจสอบว�าย$งม�ขี�อม�ลเหล�ออย��ในไฟ้ล4หรื่�อไม�

feof ค�อ ค,าส$งติรื่วจสอบว�าย$งม�ขี�อม�ลอย��ในไฟ้ล4อ�กหรื่�อไม�

fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ

feof(fp); feof(fp);

Page 27: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่อ�านขี�อม�ลจาก Text File fscanf คล�าย ๆ ก$บค,าส$ง scanf ท�ท,างานก$บ

Memory ซึ่)งเวลาโปรื่แกรื่มท,างาน โปรื่แกรื่มก&ย$งคงติ�องอ�านขี�อม�ลเขี�าไปเก&บใน Memory เช�นเด�ม ด$งน$2น เม�อเรื่าใช�ค,าส$งอ�านขี�อม�ลจากไฟ้ล4 จ)งติ�องม�ติ$วแปรื่มารื่อรื่$บ โดยม�รื่�ปแบบการื่เขี�ยนค,าส$งค�อ fscanf (fp, "%s", fname); fscanf (fp, "%s", fname);

Page 28: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่อ�านขี�อม�ลจาก Text File

fscanf ค�อ ท�ใช�อ�านขี�อม�ลขี)2นมาจากไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ fname ค�อ ช�อติ$วแปรื่ ท�เรื่าจะเอาไว�เก&บค�า String โดยจะเก&บ String

ไปเรื่�อย ๆ จนกว�าจะเจอช�องว�าง (space) lname ค�อ ช�อติ$วแปรื่ ท�เรื่าจะเอาไว�เก&บค�า String ติ�อมาท�เจอ

fscanf (fp, "%s %s", fname, lname); fscanf (fp, "%s %s", fname, lname);

Page 29: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่อ�านขี�อม�ลจาก Text File

คื าว�า Computer จะถ'กุเอาไปเกุ4บในต่*วแปรื่ fname คื าว�า science จะถ'กุเอาไปเกุ4บในต่*วแปรื่ lname

Computer science Computer science

ส,าหรื่$บการื่อ�านขี�อม�ลปรื่ะเภทติ$วเลขีขี)2นมาค,านวณ ให�อ�านขี)2นมาโดยมองเป"น String ก�อนท$2งหมด เม�อขี�อม�ลอย��ใน Memory แล�วจ)งค�อยเปล�ยนให�ม�ลให�เป"น int, float หรื่�ออ�น ๆ เพ�อน,าไปใช�ติ�อไป

Page 30: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่เขี�ยนขี�อม�ลลง Text File

fprintf ค�อ ท�ใช�เขี�ยนขี�อม�ลลงไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ name ค�อ ช�อติ$วแปรื่ ท�เก&บ String ท�เรื่าติ�องการื่จะเขี�ยนลงไฟ้ล4 age ค�อ ช�อติ$วแปรื่ ท�เก&บค�าจ,านวนเติ&ม ท�เรื่าติ�องการื่จะเขี�ยนลง

ไฟ้ล4

fprintf (fp, "%s %d", name, age); fprintf (fp, "%s %d", name, age);

Page 31: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การื่เขี�ยนขี�อม�ลลง Text File ติ$วอย�าง

char name = “Teera”;int age = 30; fprintf (fp, "%s %d", name, age);fprintf (fp, "%s %d", name, age);

fprintf (fp, "%s\t%d", name, age);fprintf (fp, "%s\t%d", name, age);

Teera 30Teera

30

Page 32: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง#include<stdio.h>main(){

FILE *fp; //ปรื่ะกาศติ$วแปรื่ช�อ fp เป"น pointer ช�ไปหาไฟ้ล4fp = fopen("data.txt","wt"); //ส$งสรื่�างไฟ้ล4ใหม� ช�อ data.txt แล�วเอา fp ไปช�2ไว�fclose(fp); //ส$งป=ดไฟ้ล4 ท� fp ม$นช�2อย��

}

Page 33: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง

Page 34: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

ติ$วอย�าง