Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 68 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
68
Dung lượng
759 KB
Nội dung
ĐỀ CƯƠNG ÔN TẬP HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT A Đề: Câu a) Ngăn xếp gì? Trình bày cách tổ chức ngăn xếp mảng, danh sách liên kết đơn? b) Viết phép toán đẩy phần tử vào ngăn xếp (Push), lấy (Pop) cho ngăn xếp tổ chức dạng mảng, danh sách liên kết đơn, cho ví dụ minh họa? Câu Cho xâu ký tự có dạng w $ w’, w’ đảo ngược xâu w, chẳng hạn w = a c d b w’ = b d c a Hãy thiết kế thuật toán để đoán nhậncác xâu ký tự cho ví dụ mơ phỏng? Câu Trình bày ý tưởng cho thuật toán xếp chọn trực tiếp (selection sort) Theo thuật toán này, anh/chị viết hàm xếp n số nguyên theo chiều tăng dần, cho ví dụ minh họa bước thực Câu a) Danh sách liên kết đơn gì? Trình bày cách tổ chức b) Viết phép toán bổ sung phần tử lấy phần tử danh sách liên kết đơn, cho ví dụ minh họa Câu Cho dãy A gồm n phần tử nguyên a 1, a2, , an (các phần tử khác nhau) Hãy xây dựng thuật tốn tìm phần tử lớn thứ k dãy A theo bước sau đây: Biểu diễn cấu trúc liệu; Mô tả thuật tốn; Ví dụ mơ Câu a) Trình bày cấu trúc liệu danh sách tổ chức dạng mảng b) Viết phép toán bổ sung phần tử danh sách tổ chức dạng mảng, cho ví dụ minh họa Câu Cho file văn Hãy xây dựng thuật toán tìm từ file xuất nhiều theo bước sau: Biểu diễn cấu trúc liệu; Mơ tả thuật tốn; Ví dụ mơ Câu a) Trình bày cấu trúc liệu danh sách liên kết đơi b) Viết phép tốn lấy phần tử danh sách liên kết đôi, cho ví dụ minh họa Câu Cho hai danh sách móc nối L1 L2, phần tử thuộc kiểu số nguyên theo thứ tự tăng dần Hãy thiết kế thuật toán xây dựng danh sách L từ hai danh sách cho danh sách L có thứ tự tăng dần Câu 10 a) Trình bày cấu trúc liệu danh sách liên kết vòng chiều? b) Viết phép toán bổ sung phần tử danh sách liên kết vòng chiều, cho ví dụ minh họa? Câu 11 Hai từ gọi Anagram từ nhận từ từ cách thay đổi trật tự chữ cái, ví dụ Read, dare hai từ Anagarm Hãy xây dựng thuật toán kiểm tra xem hai từ có phải Anagram hay không theo bước sau: Biểu diễn cấu trúc liệu; Mơ tả thuật tốn; Ví dụ mơ Câu 12 a) Trình bày cấu trúc liệu danh sách liên kết vòng hai chiều b) Viết phép toán bổ sung phần tử danh sách liên kết vịng hai chiều, cho ví dụ minh họa Câu13 Xâu kí tự gọi xâu chuẩn thứ tự xuất dấu đóng/mở ngoặc tuân thủ theo nguyên tắc đóng mở biểu thức tốn học Ví dụ: (()()); ()((()())()) : xâu chuẩn ()); (()()))(() : xâu khơng chuẩn Hãy thiết kế thuật tốn viết hàm kiểm tra xem xâu có phải dạng xâu chuẩn hay khơng, cho ví dụ minh họa bước thực Câu 14 a) Trình bày cấu cấu trúc liệu hàng đợi (Queue) tổ chức dạng mảng, mảng vòng tròn, danh sách liên kết b) Hãy viết hàm bổ sung/loại bỏ phần tử hàng đợi theo cách tổ chức câu a, cho ví dụ minh họa Câu 15 Thiết kế thuật tốn đổi số hệ đếm 10 hệ đếm số q (2,8,16) cách sử dụng Stack theo bước sau đây: Biểu diễn cấu trúc liệu; Mơ tả thuật tốn; Ví dụ mơ Câu 16 Cho stack s, giả sử có phép tốn push(s,x) (đẩy phần tử x vào stack s), pop(s,x) (lấy phần tử x từ đỉnh stack s) Hãy xây dựng thuật toán viết hàm lấy phần tử thứ k kể từ đỉnh stack (được phép sử dụng stack trung gian) cho phần tử khác bảo tồn thứ tự Cho ví dụ mô Câu 18 Cho file văn chứa số nguyên, giả sử có phép tốn bổ sung phần tử vào tìm kiếm nhị phân Hãy thiết kế thuật toán thuật toán xây dựng tìm kiếm nhị phân có khố số nguyên file văn cho theo bước sau đây: a) Biểu diễn liệu; b) Biểu diễn thuật tốn; c) Ví dụ mơ Câu 19 a) Trình bày cấu trúc liệu tìm kiếm nhị phân (định nghĩa, cách tổ chức) b) Viết phép tốn tìm kiếm nhị phân, cho ví dụ minh họa Câu 20 Cho văn P mẫu Q, xây dựng thuật toán viết hàm tìm xuất Q P theo cấc bước: a) Biểu diễn liệu; b) Hàm tìm kiếm (ngơn ngữ tuỳ chọn, Q xuất P trả vị trí xuất đầu tiên, ngược lại trả khơng); c) Ví dụ mô Câu 21 Cho hai mảng nguyên X,Y phần tử theo thứ tự tăng dần Hãy lập thuật toán xây dựng dãy Z từ hai dãy cho cho Z có thứ tự tăng dần theo bước sau: a) Biểu diễn cấu trúc liệu; b) Mơ tả thuật tốn; c) Ví dụ mô Câu 22 a) Các phương pháp duyệt theo thứ tự preorder, inorder, posorder b) Viết hàm duyệt theo thứ tự tương ứng, cho ví dụ mơ Câu 23 Cho danh sách liên kết (DSLK) đơn với trỏ head trỏ tới đầu DSLK, P trỏ trỏ tới thành phần DSLK Hãy viết mẫu hàm (thuật tốn) thực nhiệm vụ sau: Xen thành phần chứa liệu d vào trước P; Loại thành phần P; Cho ví dụ minh họa Câu 24 Cho hai danh sách móc nối (danh sách liên kết đơn) L1 L2, phần tử thuộc kiểu số nguyên theo thứ tự tăng dần Hãy thiết kế thuật toán viết hàm để xây dựng danh sách L từ hai danh sách L1 L2 cho danh sách L có thứ tự tăng dần Cho ví dụ mơ Câu 25: Cho khai báo sau: struct Stack { int data; node *next; }; struct Stack *top; Hãy sử dụng Stack để xây dựng hàm Daoso có chức đảo ngược số N Cho ví dụ minh họa Câu 26: Cho ngăn xếp khai báo sau: struct Stack { int data; node *next; }; struct Stack *s; Viết hàm đẩy phần tử x vào ngăn xếp s (PUSH(s,x)) lấy phần tử POP(s) cho ngăn xếp khai báo Câu 27: Với khai báo câu 26 Hãy sử dụng Stack S để xây dựng hàm Daoxau có chức đảo ngược xâu ký tự St Cho ví dụ minh họa Ví dụ: St = “abcde” xâu đảo ngược “edcba” Câu 28 a) Hãy đưa cấu trúc liệu biểu cách biểu diễn Mô tả CTDL biểu diễn theo cách bằngcác khai báo C, C + + Java b) Cho cây: A B a c D E F I G J H K Hãy viết danh sách đỉnh duyệt theo thứ tự preorder, inorder postorder Câu 29 a) Trình bày ý tưởng cho ví dụ minh họa thuật toán xếp nhanh Quicksort b) Cài đặt thuật toán xếp nhanh Quicksort Câu 30 : Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE struct List // kiểu danh sách liên kết }; typedef { NODE* first; NODE* last; } LIST; Viết hàm chèn nút có giá trị x vào đầu, cuối danh sách liên kết đơn L Cho ví dụ minh họa Câu 31 Các chiến lược thiết kế thuật toán Áp dụng cho toán thực tế Câu 32 Các phương pháp đánh giá độ phức tạp thuật toán Bài tập áp dụng Câu 33 Các thuật tốn tìm kiếm tìm kiếm nhị phân (ý tưởng, thuật tốn, ví dụ mơ phỏng) Câu 34 a) Trình bày phương pháp biểu diễn đồ thị (ma trận kề, danh sách, ma trận trọng số), cho ví dụ minh họa b) Trình bày thuật tốn tìm kiếm đồ thị theo chiều sâu, cho ví dụ mơ bước thực thuật tốn Câu 35: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE struct List // kiểu danh sách liên kết }; typedef { NODE* first; NODE* last; } LIST; Viết hàm thay nút có giá trị x cho nút trỏ trỏ P danh sách liên kết đơn Câu 36: Cho khái báo sau: struct Node{ int data; struct Node *Left, *Right; }; struct Node *T; Anh chị viết hàm: a) Đếm số node T; b) Tạo mảng A (các phần tử số nguyên) có số phần tử số node T, phần tử mang giá trị giá trị node Câu 37: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE struct List // kiểu danh sách liên kết }; typedef { NODE* first; NODE* last; } LIST; Trình bày hàm cắt nút cuối danh sách, chuyển nút đầu danh sách L Câu 38: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE }; typedef { struct List // kiểu danh sách liên kết NODE* first; NODE* last; } LIST; Viết hàm tạo nút có giá trị x Cho ví dụ mơ Câu 39: Với cấu trúc danh sách khai báo câu Hãy xây dựng hàm xóa nút sau trỏ P danh sách liên kết đơn L Câu 40: a) Áp dụng thủ tục xen vào cây rỗng, xây dựng tìm kiếm nhị phân, cách xem vào đỉnh có khóa 5, 1, 6, 8, 4, 9, b) Từ xây dựng, dưa dãy khóa theo thứ tự: preoder, inorder postorder Câu 41: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE struct List // kiểu danh sách liên kết }; typedef { NODE* first; NODE* last; } LIST; Trình bày hàm tạo danh sách liên kết L có n phần tử nhập từ bàn phím theo nguyên tắc FIFO (First In First Out) Câu 42: Cho danh sách sinh viên Mỗi sinh viên mô tả thuộc tính họ tên, mã sinh viên, điểm a) Hãy cài đặt danh sách sinh viên mảng b) Viết hàm tìm kiếm sinh viên theo mã Câu 43: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE struct List // kiểu danh sách liên kết }; typedef { NODE* first; NODE* last; } LIST; Trình bày hàm tạo danh sách liên kết L có n phần tử nhập từ bàn phím theo nguyên tắc LIFO (Last In First Out) Câu 44 : Cho danh sách số nguyên cài đặt mảng, phần tử xếp theo thứ tự tăng dần a) Hãy khai báo CTDL biểu diễn dánh sách b) Hãy viết thủ tục xen vào sanh sách số nguyên n cho danh sách nhận theo thứ tự tăng dần Câu 45: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE }; typedef { struct List // kiểu danh sách liên kết NODE* first; NODE* last; } LIST; Viết hàm xóa nút đầu danh sách liên kết đơn Câu 46:Cho danh sách tên lớp Mỗi sinh viên biểu diễn trường: ten, diem Danh sách cài đặt danh sách liên kết a) Hãy khai báo CTDL cài đặt danh sách b) Viết thủ tục tính điểm trung bình lớp Câu 47: Cho danh sách số nguyên xếp theo thứ tự giảm dần với danh sách cài đặt mảng a) Hãy khai báo CTDL biểu diễn dánh sách b) Hãy viết thủ tục xem vào sanh sách số nguyên n cho danh sách nhận theo thứ tự giảm dần Câu 48: Cho dãy số sau: 25,35, 20, 14, 27, 42, 10, 40, 23 a) Hãy xây dựng nhị phân tìm kiếm từ dãy khóa b) Giải thích vẽ kết sau tiến hành thực liên tiếp thao tác: xóa nút có giá trị 10, bổ sung nút có khóa 33 xóa nút có khóa 35 Câu 49: Định nghĩa thuật tốn đệ quy tuyến tính, cho ví dụ minh họa Câu 50: Viết thuật toán đệ quy tìm ước số lẻ lớn số nguyên dương n Cho ví dụ mơ bước thực thuật tốn Câu 51:Thuật tốn đệ quy sau có dừng hay khơng sao? function S(n) begin If (n=0 or n =1) the S= else if (n mod =0) S= S(n/2) else S = S(3*n+1) endif endif end Câu 52 Viết thuật tốn đệ quy tính tổng chữ số số nguyên dương n Cho ví dụ mơ bước thực thuật tốn Câu 53:Viết thuật tốn đệ quy tính tổng chữ số số nguyên dương n Chuyển thuật toán đệ quy sang dạng lặp tương ứng 10 #Code: int BinarySearch(int a[ ],int l, int r,int x){ int m while (l top; s-> top = s-> top-> next; return p->item; } } Câu 36:Cho khái báo sau: struct Node{ int data; struct Node *Left, *Right; }; struct Node *T; Anh chị viết hàm: a) Đếm số node T; struct node { int item; struct node *next; }; typedef struct node *stacknode; typedef struct { stacknode top; }stack; 56 b) Tạo mảng A (các phần tử số nguyên) có số phần tử số node T, phần tử mảng giá trị giá trị node Void Nhapmang (int A[], int &n) ý: (for (int t=0;i next; } q-> next = NULL; free(r); } void Insert_Begin(listnode *p, int x){ listnode q; q= (listnode)malloc(sizeof(struct node)); q-> item = x; q-> next = *p; *p = q; } Câu 38: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE }; typedef { struct List // kiểu danh sách liên kết NODE* first; NODE* last; } LIST; Viết hàm tạo nút có giá trị x Cho ví dụ mô void Put(queue *q, int x){ queuenode p; p = (queuenode) malloc (sizeof(struct node)); p-> item = x; 58 p-> next = NULL; q-> tail-> next = p; q-> tail = q-> tail-> next; if (q-> head == NULL) q-> head = q-> tail; return; } Câu 39: Với cấu trúc danh sách khai báo câu Hãy xây dựng hàm xóa nút sau trỏ P danh sách liên kết đơn int removeAfter (List &l, Node *q ) { if (q !=NULL && q->pNext !=NULL) { Node* p = q->pNext; q->pNext = p->pNext; if (p==l.pTail) l.pTail = q; delete p; return 1; } else return 0; } Câu 40: c) Áp dụng thủ tục xen vào cây rỗng, xây dựng tìm kiếm nhị phân, cách xem vào đỉnh có khóa 5, 1, 6, 8, 4, 9, d) Từ xây dựng, dưa dãy khóa theo thứ tự: preoder, inorder postorder #Code (KLQ: tìm nút có khóa X) BSTNode Find( int X, BSTNode root) { if( root == NULL ) return NULL; if ( X < root.data) 59 return Find( X, root.pLeft ); else if ( X > root.data) return Find( X, root.pRight ); else return root; } Câu 41: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE }; typedef { struct List // kiểu danh sách liên kết NODE* first; NODE* last; } LIST; Trình bày hàm tạo danh sách liên kết L có n phần tử nhập từ bàn phím theo nguyên tắc FIFO (First In First Out) struct node { int item; struct node *next; }; Typedef struct node *queuenode; typedef struct { queuenode head; queuenode tail; }queue; Câu 42: Cho danh sách sinh viên Mỗi sinh viên mơ tả thuộc tính họ tên, mã sinh viên, điểm a) Hãy cài đặt danh sách sinh viên mảng struct student 60 { char maSV[10]; char Ten[30]; int Tuoi; float DTB; } struct node { student infor; node *next; } struct node *s; b) Viết hàm tìm kiếm sinh viên theo mã C2: NODE *tim(list l, x) // nhap x la ma sv { NODE *p; for (p=l.head;p!=NULL;p=p->next) if (p->info.mssv==x) break; return p; } Câu 43: Có khai báo sau: Typedef { struct Node int data; // Data kiểu định nghĩa trước Node * link; //con trỏ đến cấu trúc NODE }; typedef { struct List // kiểu danh sách liên kết NODE* first; NODE* last; } LIST; Trình bày hàm tạo danh sách liên kết L có n phần tử nhập từ bàn phím theo nguyên tắc LIFO (Last In First Out) void QueueInitialize(queue *q){ n-> head = n-> tail = NULL; return; 61 } Câu 44 : Cho danh sách số nguyên cài đặt mảng, phần tử xếp theo thứ tự tăng dần a) Hãy khai báo CTDL biểu diễn danh sách void PhatSinhMangTang(int a[], int N) #Code: void tangdan() { for (i=1;i=1) longint Fact(int n) { if (n==0) return 1; else return n*Fact(n-1); } Câu 50: Viết thuật tốn đệ quy tìm ước số lẻ lớn số ngun dương n Cho ví dụ mơ bước thực thuật toán Ý tưởng : Nếu N số lẻ kết N ko ? N có chẵn : ước lớn có m= N / Nếu m số lẻ m kết Nếu m chẵn N=m lập lại kiểm tra #Code: void test(int n,int *tmp){ if( (n%2)==1) *tmp=n; else test(n/2,tmp); } int main(){ int N,tmp; test(N,&tmp); printf(" Số lẽ lớn %d %d\n",N,tmp); 66 return 0; } Câu 52 Viết thuật tốn đệ quy tính tổng chữ số số nguyên dương n Cho ví dụ mơ bước thực thuật tốn Chỉ cần vòng while chia cho 10 lấy số dư cộng lại #Code: int tong(int n) { return n?n%10+tong(n/10):0; } Câu 53:Viết thuật tốn đệ quy tính tổng chữ số số nguyên dương n Chuyển thuật toán đệ quy sang dạng lặp tương ứng s=0; while(n) { s+=n%10; n/=10; } printf("%d ",s) Câu 54:Viết thuật toán đệ quy tính Tính S(n) = + + + + n - + n Chuyển thuật toán đệ quy sang dạng lặp tương ứng Cho ví dụ mơ #Code: int Tinh(int n) { if (n==1) return 1; return Tinh(n-1) + n; } Lặp: s=1; for (i=1;i