Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
474,74 KB
Nội dung
0 K K Ỹ Ỹ THU THU Ậ Ậ T L T L Ậ Ậ P TRÌNH P TRÌNH THUẬT TOÁN VÀ CẤU TRÚC DỮ LIỆU 1 N N Ộ Ộ I DUNG I DUNG Thuật toán Kiểudữ liệuvàcấutrúcdữ liệu Mối liên hệ giữathuậttoánvàcấutrúcdữ liệu Kiểu con trỏ trong C Sử dụng kiểuarray trongC Kiểu xâu kí tự trong C Sử dụng struct trong C 2 KH KH Á Á I NI I NI Ệ Ệ M THU M THU Ậ Ậ T TO T TO Á Á N N Thuật toán (giảithuật) là một quy tắc để vớinhững dữ liệu ban đầu đã cho, tìm đượclờigiảisaumộtkhoảng thờigianhữuhạn Bài toán Thuật toán Máy tính Dữ liệu vào Kết quả ra 3 Tính kết thúc (tính dừng) Tính xác định Tính phổ dụng Tính hiệuquả • Thựchiện nhanh • Tiêu phí ít tài nguyên máy tính (bộ nhớ) C C Á Á C Đ C Đ Ặ Ặ C TRƯNG C C TRƯNG C Ủ Ủ A THU A THU Ậ Ậ T TO T TO Á Á N N 4 C C Á Á C Đ C Đ Ặ Ặ C TRƯNG C C TRƯNG C Ủ Ủ A THU A THU Ậ Ậ T TO T TO Á Á N N Thuật toán tìm UCLN của hai số nguyên dương 1. Nhậpvàohaisố nguyên dương a, b 2. So sánh hai số, chọnsố nhỏ nhấtgắn cho UCLN 3. Nếumột trong hai số a, b không chia hếtchoUCLN thìthực hiệnbước4, ngượclạithìthựchiệnbước5 4. GiảmUCLN một đơnvị và quay lạibước3 5. In UCLN. Kếtthúc ? Các đặctrưng củathuậttoántrên 5 TIÊU CHU TIÊU CHU Ẩ Ẩ N Đ N Đ Á Á NH GI NH GI Á Á THU THU Ậ Ậ T TO T TO Á Á N N Lựachọnthuật toán nào cho bài toán? Tiêu chuẩn1: Thuật toán đơngiản, dễ hiểu, dễ cài đặt Tiêu chuẩn2: Thuậttoánsử dụng tiếtkiệm tài nguyên máy tính (dung lượng không gian nhớ, thời gian) 6 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Ngôn ngữ dùng để mô tả thuật toán ? Tại sao phải dùng ngôn ngữ diễn đạtthuật toán ? Đặc điểmcủa ngôn ngữ diễn đạtthuật toán • Ngôn ngữ liệtkêtừng bước(Ngônngữ tự nhiên) • Sơđồkhối • Ngôn ngữ “giả code”: TựaPascal, tựaC, … – Các bước trong chương trình nên được đánh số thứ tự – Có thể bỏ qua phần khai báo dữ liệu, thay vào đólàđặctả cấutrúcdữ liệu trướckhiviếtgiảithuật Mô tả thuật toán • Thuật toán: <Tên thuật toán> • Vào (Input): <Dữ liệuvàocủathuật toán, mô tả rõ kiểudữ liệu> • Ra (Output): <Các dữ liệura-Kếtquả> 7 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Ngôn ngữ liệtkêtừng bước • Thuật toán: Euclid • Vào: m,n nguyên dương (m > n) • Ra: gcd là ước chung lớnnhấtcủa m và n r: số nguyên dương Bước1. Nhậpvàom, n Bước2. Nếu m, n >0 thì chuyển sang bước3, ngượclại thì thông báo “Dữ liệu vào không hợplệ”vàkết thúc thuậttoán Bước3. Nếu m > n thì chuyển sang bước4. Ngượclại, hoán chuyển giá trị củam, n Bước4. Nếu n = 0 thì gcd = m, in giá trị của gcd và kếtthúc. Ngượclại, chuyển sang bước5. Bước 5. Tính r là phầndư c ủaphépchiam chon Bước 6. Gán giá trị của n cho m và củar chon. Quay lạibước4. 8 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Sơđồkhối Đi Đi ề ề u u ki ki ệ ệ n n L L ệ ệ nh nh N N ú ú t t thao thao t t á á c c Ch Ch ỉ ỉ hư hư ớ ớ ng ng truy truy ề ề n n thông thông tin tin N N ú ú t t đi đi ề ề u u ki ki ệ ệ n n N N ú ú t t b b ắ ắ t t đ đ ấ ấ u u , , n n ú ú t t k k ế ế t t th th ú ú c c 9 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Thuật toán Euclid Sai Sai Đúng Đúng Bắt đầu Nhập m, n m, n >0 m >= n n = 0 gcd = m In gcd r = m mod n m = n n = r r = m m = n n = r Kết thúc Thông báo Dữ liệu vào không hợp lệ Sai Đúng 10 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Ngôn ngữ Tựa Pascal • Khai báo: Program < Tên chương trình> Begin ……. End. • Chú thích {….} • Phép toán số học: +, - *, /, ↑(luỹ thừa) • Phép toán so sánh: >, >=, <, <=, =, ≠ • Giá trị logic: true, false • Phép toán logic: and, or, not 11 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N Các câu lệnh • Câu lệnh gán V := E; – V: biến, E: biểuthức – Phép gán chung: V1 := V2 := E; • Câu lệnh điềukiện if B then S1 [else S2]; • Câu lệnh tuyển Case B1: S 1 ; B2: S 2 ; …. Bn: S n ; else S n+1 end case; 12 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N • Câu lệnh lặp – Số lầnlặpbiếttrước for i := m to n do …. for i := n down to m do…. – Số lầnlặp không biếttrước while B do S; repeat S until B; (B: biểuthức logic; S: dãy lệnh) • Câu lệnh chuyển go to n; (n:số hiệucủamộtbướctrongchương trình) • Câu lệnh vào ra read(<danh sách biến>); write(<danh sách biểuthức>) 13 NGÔN NG NGÔN NG Ữ Ữ THU THU Ậ Ậ T TO T TO Á Á N N • Chương trình con – Hàm function <tên hàm>(<danh sách tham số>): <kiểudữ liệu> S return <biểuthức> – Thủ tục Procedure: không có kếtquả ra – Sử dụng Var đặttrướcthamsố cầngiữ lạisự thay đổigiátrị sau khi kếtthúcthựchiện hàm/thủ tục – Lờigọi Hàm Tên_hàm(<danh sách tham số thựcsự>) – Lờigọithủ tục Call <Tên thủ tục>(<danh sách tham số thựcsự>) 14 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Giảithuật nào hiệuquả nhấtchomột bài toán? • Độ phứctạpthờigian • Độ phứctạp không gian ? Đánh giá giảithuậtkhichạychương trình ??? Các yếutốảnh hưởng đếnthờigianthựchiệnthuật toán • Môi trường phầncứng: tốc độ xử lý, bộ nhớ,… • Môi trường phầnmềm: kiểulệnh, ngôn ngữ, trình biên dịch • Kích thướcdữ liệuvào Đánh giá độ phứctạpthờigianT(n) bằng tổng số phép tính cầnphảithựchiện. 15 Độ tăng củahàm • Cho hai hàm f(x), g(x) xác định từ tậpcácsố nguyên dương hoặctập số thựcvàotậpsố thực. Ta nói f(x) là O(g(x)) nếutồntại hai hằng số C và k sao cho: |f(x)| ≤ C.|g(x)|, vớimọix > k. Ví dụ 1 • f(x) = a n x n +…. +a 0 , vớia i là các số thực. Khi đóf(x) = O(x n ). • với x > 1 ta có • ĐặtC = |a n | + |a n−1 | + … + |a 0 | và k = 1, suy ra f(x) = O(x n ). Ví dụ 2. • f(x) = 1+ 2+ 3 + … + n = n(n+1)/2 nên là O(n 2 ). Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N ) ( ( )( 01 01 0 1 1 aaax x a x a ax axaxaxf nn n n n n n n n n n +++≤ +++≤ +++≤ − − − − 16 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Các thuậtngữ thường dùng • Độ phứctạpO(1) gọilàđộ phứctạphằng số • Độ phứctạp O(log(n)) gọilàđộ phứctạp logarit • Độ phứctạpO(n) gọilàđộ phứctạptuyến tính • Độ phứctạp O(nlogn) gọilàđộ phứctạpnlogn • Độ phứctạpO(n k ) gọilàđộ phứctạp đathức • Độ phứctạpO(b n ) , b>1, gọilàđộ phứctạp hàm mũ • Độ phứctạpO(n!) gọilàđộ phứctạpgiaithừa 17 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Ví dụ 1 K:=0; For i:=1 to n do Begin K:=K+i; End; Ví dụ 2 K:=0; For i:=1 to n do For j:= 1 to n do Begin K := K + i * j ; End; 18 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Ví dụ 3 i :=1; K:=0; while i <= n do begin K:= K+ i*i; i := i * 2; end; Số phép toán cầnthựchiện: (1 so sánh + 2 nhân + 1 cộng) * (1 + |log 2 n|) = 4 + 4 |log 2 n| là O(log 2 n). 19 Ví dụ 4 Searching(A[]: array of integer, n: integer, integer K): Boolean Begin i := 1; found := false; while (i <=n and !found) do begin if A[i] = K then found:=true; else i := i+1; end; return found; end; Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N 20 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Độ phứctạpxấunhất Độ phứctạptrường hợptốtnhất Độ phứctạp trung bình 21 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Độ phứctạptrường hợpxấunhấtcủaA làsố lớnnhất các phép toán cơ bản đượcthựchiện trong A trên bất kỳ dữ liệu vào có kích cỡ xác định. Độ phứctạptrường hợptốtnhấtcủaA làsố bé nhất các phép toán cơ bản đượcthựchiện trong A trên bất kỳ dữ liệu vào có kích cỡ xác định. Độ phứctạp trung bình củaA làgiátrị trung bình của số các phép toán cơ bản đượcthựchiện trong A trên bấtkỳ dữ liệu vào có kích thướcxácđịnh. 22 Đ Đ Ộ Ộ PH PH Ứ Ứ C T C T Ạ Ạ P THU P THU Ậ Ậ T TO T TO Á Á N N Ví dụ hàm Searching ở trên: • Độ phứctạptrongtrường hợpxấunhấtlàO(n) • Độ phứctạptrongtrường hợptốtnhất là:O(1) khi K chính là phầntửđầutiêncủamảng. • Độ phứctạp trung bình là: cỡ n/2 (khoảng ½ các phầntử của mảng đượcduyệt). Việctínhtoánrấtphứctạpdựavàoxác suấtK xuấthiện trong A. Thường đánh giá thuật toán theo độ phứctạpthờigian xấunhất. Hiệuquả sử dụng củathuậttoánlạithể hiện thông qua độ phứctạp trung bình. 23 Kiểudữ liệu: • Trong ngôn ngữ bậccao • Là sự trừutượng hóa các thuộctínhbảnchấtcủacácđối tượng trong thựctế và phù hợpvớicáchtổ chức thông tin trên máy tính • Kiểusố nguyên, số thực, kí tự,… • Kiểudữ liệu T = <V, O>, V là tập các giá trị hợplệ củaT vàO là tập các phép toán trên kiểuT. KI KI Ể Ể U D U D Ữ Ữ LI LI Ệ Ệ U V U V À À C C Ấ Ấ U TR U TR Ú Ú C D C D Ữ Ữ LI LI Ệ Ệ U U 24 KI KI Ể Ể U D U D Ữ Ữ LI LI Ệ Ệ U V U V À À C C Ấ Ấ U TR U TR Ú Ú C D C D Ữ Ữ LI LI Ệ Ệ U U Cấutrúcdữ liệu: • Là các lưu trữ dữ liệu trên máy tính sao cho việc sử dụng dữ liệu đó được hiệu quả. Đó chính là tổ chức các khái niệm toán học và logic về dữ liệu. • Kiểudữ liệucócấutrúcđượckếthợpnêntừ các kiểudữ liệu cơ sở • Ví dụ: Kiểumảng, xâu kí tự, Bản ghi, File,… Mối liên hệ giữacấutrúcdữ liệuvàThuật toán Chương trình = Cấutrúcdữ liệu + Thuậttoán 25 KI KI Ể Ể U D U D Ữ Ữ LI LI Ệ Ệ U V U V À À C C Ấ Ấ U TR U TR Ú Ú C D C D Ữ Ữ LI LI Ệ Ệ U U Mô hình dữ liệu • Là mô hình toán học, có thể biểudiễn được trên máy tính, để biểudiễncácđốitượng của bài toán và mối liên hệ giữacác đốitượng • Mô hình dữ liệumuốncàiđặt được trên máy tính phảicócách tổ chứcdữ liệuphùhợp. • Ví dụ: Danh sách, Cây, Đồ thị, Quan hệ,. … Các tiêu chuẩnchọncấutrúcdữ liệu • Phản ánh đúng thựctế: quan trọng nhất, đảmbảotínhđúng đắncủaphương án giải quyết • Các thao tác phù hợp • Tiếtkiệm tài nguyên hệ thống 26 KI KI Ể Ể U D U D Ữ Ữ LI LI Ệ Ệ U TRONG C U TRONG C Kiểudữ liệucơ sở • Kí tự (char, unsigned char) • Số nguyên (int, unsigned int, long (int), unsigned long (int)) • Số thực, độ chính xác đơn (float) • Số thực, độ chính xác kép (double) – Lưuý: Kíchthướcvàphạmvi biểudiễncủacáckiểudữ liệu Kiểu con trỏ Kiểu enum Kiểumảng (array) Kiểucấu trúc (struct) 9 Kiểmtrakíchthướccủakiểudữ liệu: dùng toán tử sizeof(), ví dụ: sizeof(int),… 27 KI KI Ể Ể U CON TR U CON TR Ỏ Ỏ Biến con trỏ (Pointer) • Địachỉ bộ nhớ củabiến đượcgánchocon trỏ là giá trị của biến con trỏ. • Biến thông thường chứagiátrị mộtcụ thể (count = 7). • Các con trỏ chứa địachỉ củabiến: biến đượctrỏ chứagiátrị cụ thể (tham chiếugiántiếp) Con trỏ countPtr trỏđếnbiến count, giá trị củabiếncon trỏ countPtr là địachỉ của biến count, giá trị củ abiến count là 7. count 7 count 7 countPtr 28 Bi Bi ế ế n n con con tr tr ỏ ỏ trong trong ngôn ngôn ng ng ữ ữ C C Con trỏ - Pointer • Sứcmạnh củangônngữ lậptrìnhC • Tạorakhả năng mềmdẻokhilậptrình • Thuậnlợitruyềnthamsố cho hàm (tham biến), xử lý mảng, xâu, bộ nhớ • Con trỏ có quan hệ mậtthiếtgiữa arrays và strings • Lưuý, thậntrọng trong cách sử dụng: can thiệpvào bộ nhớ. 29 Định nghĩavàkhởitạobiến con trỏ • * đượcsử dụng định nghĩabiến pointer int *myPtr; • Định nghĩabiến con trỏ, trỏ tớivùngnhớ kiểu int • Định nghĩa nhiềucon trỏ yêu cầusử dụng * trướcmỗibiếncon trỏ int *myPtr1, *myPtr2; • Có thểđịnh nghĩacon trỏ kiểudữ liệubấtkỳ • Khởitạocon trỏ là 0, NULL (con trỏ rỗng) hoặcmột địachỉ của mộtbiếncùngkiểudữ liệu Bi Bi ế ế n n con con tr tr ỏ ỏ trong trong C C 30 &Tenbien (trả vềđịachỉ của tenbien) • Phép gán trả vềđịachỉ củabiếndữ liệu int y = 5; int *yPtr; yPtr = &y; /* yPtr lấy địachỉcủay */ yPtr “trỏ tới” y yPtr y 5 yptr 500000 600000 y 600000 5 địachỉ của y là giá trị của yptr Bi Bi ế ế n n con con tr tr ỏ ỏ trong trong ngôn ngôn ng ng ữ ữ C C 31 Sử dụng dấu* để tham chiếugiátrị trongvùngnhớ trỏ bởi con trỏ • *yptr trả về giá trị củabiếny (bởivì yptr trỏ tớiy) • Dấu* cóthể sử dụng trong lệnh gán làm thay đổigiátrị củabiếndữ liệu. *yptr = 7; /* thay đổiy bằng 7 */ * và & quan hệđốingược nhau -*p làdữ liệu đượcchứa trong vùng nhớ có địachỉ là p -&x làđịachỉ củabiếnx int x; int *xptr; xptr = &x; Khi đó, *xptr = x; &*xptr = *&xptr Bi Bi ế ế n n con con tr tr ỏ ỏ trong trong ngôn ngôn ng ng ữ ữ C C 1 /* Fig. 7.4: fig07_04.c 2 Using the & and * operators */ 3 #include <stdio.h> 4 5 int main() 6 { 7 int a; /* a is an integer */ 8 int *aPtr; /* aPtr is a pointer to an integer */ 9 10 a = 7; 11 aPtr = &a; /* aPtr set to address of a */ 12 13 printf( "The address of a is %p" 14 "\nThe value of aPtr is %p", &a, aPtr ); 15 16 printf( "\n\nThe value of a is %d" 17 "\nThe value of *aPtr is %d", a, *aPtr ); 18 19 printf( "\n\nShowing that * and & are complements of " 20 "each other\n&*aPtr = %p" 21 "\n*&aPtr = %p\n", &*aPtr, *&aPtr ); 22 23 return 0; /* indicates successful termination */ 24 25 } /* end main */ Địachỉ củabiếna làgiátrị của con trỏ aPtr * aPtr là giá trị củabiến Quan hệ giữa* và & là bổ sung The address of a is 0012FF7C The value of aPtr is 0012FF7C The value of a is 7 The value of *aPtr is 7 Showing that * and & are complements of each other. &*aPtr = 0012FF7C *&aPtr = 0012FF7C 33 Operators A ssociativity Type () [] left to right highest + - ++ ! * & (type) right to left unary * / % left to right multiplicative + - left to right additive < <= > >= left to right relational == != left to right equality && left to right logical and || left to right logical or ?: right to left conditional = += -= *= /= %= right to left assignment , left to right comma Fig. 7.5 Operator precedence. To To á á n n t t ử ử trên trên con con tr tr ỏ ỏ Bi Bi ế ế n n con con tr tr ỏ ỏ trong trong ngôn ngôn ng ng ữ ữ C C 34 S S Ử Ử D D Ụ Ụ NG KI NG KI Ể Ể U M U M Ả Ả NG TRONG C NG TRONG C Các mảng • Là cấutrúcgồm các phầntử dữ liệu có liên quan với nhau • Các thựcthể tĩnh (Static) – kích thước không thay đổitrongsuốtchương trình (Ph ân biệtvới: Cấutrúcdữ liệu động (Dynamic) 35 Khái niệmmảng • Nhóm của định vị bộ nhớ liên tiếp nhau • Cùng chung tên và kiểudữ liệu Tham chiếu đếnphầntử, cụ thể • Tên mảng • Số vị trí Định dạng: arrayname[ position number ] • phầntửđầutiêncóvị trí 0 • n phầntử mảng vớitênc: – c[ 0 ], c[ 1 ] c[ n – 1 ] Tên củamảng (tất cả các phầntử có chung tên c) Số vị trí của phầntử trong mảng c c[6] -45 6 0 72 1543 -89 0 62 -3 1 6453 78 c[0] c[1] c[2] c[3] c[11] c[10] c[9] c[8] c[7] c[5] c[4] 36 Các phầntử trong mảng giống như các biến c[ 0 ] = 3; printf( "%d", c[ 0 ] ); • Thựchiện thao tác trong ngoặc[] để xác định chỉ số. + Nếu x = 3 thì c[ 5 - 2 ] == c[ 3 ] == c[ x ] + Chỉ số củamảng có thể xác định bằng biểuthức toán học 37 Khai Khai b b á á o o m m ả ả ng ng Khi khai báo mảng • Tên mảng • Kiểumảng • Số phầntử Cúpháp: arrayType arrayName[ numberOfElements ]; • Ví dụ: int c[ 10 ]; float myArray[ 3284 ]; Khai báo nhiềumảng có cùng kiểu • Cú pháp tương tự như khai báo biến • Ví dụ: int b[ 100 ], x[ 27 ]; 38 Khai Khai b b á á o o v v à à kh kh ở ở i i t t ạ ạ o o m m ả ả ng ng Khởitạomảng: khai báo và gắngiátrị các phầntử int n[ 5 ] = { 1, 2, 3, 4, 5 }; • Nếu không đủ các biến thì các phầntử bên phảinhấtbằng 0 int n[ 5 ] = { 0 } // Tấtcả các phầntử bằng 0 • Nếuquánhiềuphầntử thì báo lỗicúpháp • C không kiểmtragiớihạncủamảng • Nếubỏ qua kích thước, sử dụng mặc định số phầntử khởitạo int n[ ] = { 1, 2, 3, 4, 5 }; . Khởitạo5 ph ầntử, do đómảng có 5 phầntử 1 /* Fig. 6.4: fig06_04.c 2 Initializing an array with an initializer list */ 3 #include <stdio.h> 4 5 /* function main begins program execution */ 6 int main() 7 { 8 /* use initializer list to initialize array n */ 9 int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 }; 10 int i; /* counter */ 11 12 printf( "%s%13s\n", "Element", "Value" ); 13 14 /* output contents of array in tabular format */ 15 for ( i = 0; i < 10; i++ ) { 16 printf( "%7d%13d\n", i, n[ i ] ); 17 } /* end for */ 18 19 return 0; /* indicates successful termination */ 20 21 } /* end main */ Element Value 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37 Program Output Program Output V V í í d d ụ ụ : : Khai Khai b b á á o o v v à à kh kh ở ở i i t t ạ ạ o o m m ả ả ng ng [...]... keyboard 51 Thư viện điều khiển string có các hàm: So sánh các string • Thao tác dữ liệu string • Máy tính so sánh mã số ASCII của ký tự trong xâu • Tìm kiếm trên string • Xem bảng mã các ký tự (sách lập trình C) • Xác định độ dài string int strcmp( const char *s1, const char *s2 ); Function prototype Function description char *strcpy( char *s1, const char *s2 ) char *strncpy( char *s1, const char *s2,... printf( "%s",sPtr->name ); myFriend.name = “Hoang Lan”; • myFriend.name tương đương với myFriend.grade = 8; ( *sPtr ).name 62 63 typedef : Định nghĩa kiểu Đọc thêm: Kiểu union, kiểu enum trong ngôn ngữ lập trình C • Tạo ra tên khác (bí danh) cho một kiểu dữ liệu đã định nghĩa • typedef không tạo ra kiểu dữ liệu mới • Ví dụ: typedef struct Student * StudentPtr; StudentPtr sPtr; > Định nghĩa tên kiểu mới . 0 K K Ỹ Ỹ THU THU Ậ Ậ T L T L Ậ Ậ P TRÌNH P TRÌNH THUẬT TOÁN VÀ CẤU TRÚC DỮ LIỆU 1 N N Ộ Ộ I DUNG I DUNG Thuật toán Kiểudữ liệuvàcấutrúcdữ liệu Mối liên hệ giữathuậttoánvàcấutrúcdữ liệu Kiểu. thay vào đólàđặctả cấutrúcdữ liệu trướckhiviếtgiảithuật Mô tả thuật toán • Thuật toán: <Tên thuật toán> • Vào (Input): <Dữ liệuvàocủathuật toán, mô tả rõ kiểudữ liệu> • Ra (Output):. TO Á Á N N Giảithuật nào hiệuquả nhấtchomột bài toán? • Độ phứctạpthờigian • Độ phứctạp không gian ? Đánh giá giảithuậtkhichạychương trình ??? Các yếutốảnh hưởng đếnthờigianthựchiệnthuật toán •