1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập cấu trúc dữ liệu

23 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

BÀI TẬP  Xây dựng cấu trúc liệu thích hợp để biểu diễn đa thức P(x) = c1xn1 + c2xn2 + + ckxnk với thao tác cần xử lý: - Thêm phần tử vào cuối đa thức - In danh sách phần tử theo thứ tự nhập theo thứ tự ngược với thứ tự nhập - Hủy phần tử danh sách - Số lượng phần tử khơng hạn chế Viết hàm tính giá trị biểu thức P(x) biết x hàm rút gọn biểu thức P(x) BÀI TẬP struct Sohang { int c, n; }; struct DNode { Sohang info; DNode *pPrev, *pNext; }; struct DList { DNode *pHead, *pTail; }; void CreateDList(DList &l) { l.pHead = NULL; l.pTail = NULL; } BÀI TẬP void AddLast(DList &l, DNode *p) { if (l.pHead == NULL) { l.pHead = p; l.pTail = p; } else { l.pTail->pNext = p; p->pPrev = l.pTail; l.pTail = p; } } BÀI TẬP DNode * Search(DList l, int n) { DNode *p = l.pHead; while (p != NULL) { if (p->info.n == n) break; p = p->pNext; } return p; } BÀI TẬP double Tinh(DList l, double x) { double r = 0; DNode *p = l.pHead; while (p != NULL) { r = r + pow(x, p->info.n) * p->info.c; p = p->pNext; } return r; } BÀI TẬP void RutGon(DList &l) { DList ltmp; DNode *p, *q; CreateDList(ltmp); p = l.pHead; l.pHead = p->pNext; p->pNext = NULL; p->pPrev = NULL; while (p != NULL) { q = Search(ltmp, p->info.n); if (q == NULL) AddLast(ltmp, p); else { q->info.c = q->info.c + p->info.c; delete p; } p = l.pHead; BÀI TẬP if (p != NULL) { l.pHead = p->pNext; p->pNext = NULL; p->pPrev = NULL; } } } l = ltmp; BÀI TẬP  Ma trận thưa ma trận chứa phần tử khác khơng 000300 100020 004000 Dùng danh sách liên kết để biểu diễn ma trận thưa viết hàm: - Nhập ma trận - Xuất ma trận - Cộng hai ma trận BÀI TẬP  Ý tưởng: dùng danh sách kề để biểu diễn ma trận 000300 100020 004000 pHead pTail 3, pHead pTail 0, pHead pTail 2, 4, BÀI TẬP struct Node { int c, v; Node *pNext; }; struct List { Node *pHead, *pTail; }; struct Matrix { List *dat; int m, n; }; void CreateList(List &l) { l.pHead = NULL; l.pTail = NULL; } 10 BÀI TẬP Node * CreateNode(int c, int v) { Node *p = new Node; if (p != NULL) { p->c = c; p->v = v; p->pNext = NULL; } return p; } void AddLast(List &l, Node *p) { if (l.pHead == NULL) { l.pHead = p; l.pTail = p; } else { l.pTail->pNext = p; l.pTail = p; } } 11 BÀI TẬP void CreateMatrix(Matrix &mt, int m, int n) { mt.dat = new List[m]; mt.m = m; mt.n = n; for (int i = 0; i < m; i++) CreateList(mt.dat[i]); } void SetValue(Matrix &mt, int r, int c, int val) { Node *p = CreateNode(c, val); if (p != NULL) AddLast(mt.dat[r], p); } 12 BÀI TẬP void Nhap(Matrix &mt) { int r, c, v, i, j, k; cout > r >> c; CreateMatrix(mt, r, c); for (i = 0; i < mt.m; i++) { cout > k; for (j = 0; j < k; j++) { cout > c >> v; SetValue(mt, i, c, v); } } } 13 BÀI TẬP void In(Matrix &mt) { int i, j; Node *p; for (i = 0; i < mt.m; i++) { j = 0; p = mt.dat[i].pHead; while (p != NULL) { for ( ; j < p->c; j++) cout c) { SetValue(c, i, q->c, q->v);q = q->pNext; } else { if (q->c == p->c) { SetValue(c, i, q->c, q->v + p->v); q = q->pNext; p = p->pNext; } else { SetValue(c, i, p->c, p->v);p = p->pNext; } } } 16 BÀI TẬP } } } } else { SetValue(c, i, p->c, p->v); p = p->pNext; } 17 BÀI TẬP  Xây dựng cấu trúc stack viết hàm: - Chuyển số nguyên từ hệ đếm thập phân sang hệ đếm nhị phân - Tính số Fibonacci thứ n không dùng đệ quy 18 BÀI TẬP struct Node { int dat; Node *pNext; }; struct Stack { Node *pHead, *pTail; }; void CreateStack(Stack &s) { s.pHead = NULL; s.pTail = NULL; } 19 BÀI TẬP Node * CreateNode(int x) { Node *p = new Node; if (p != NULL) { p->dat = x; p->pNext = NULL; } return p; } 20 10 BÀI TẬP int Push(Stack &s, int x) { Node *p = CreateNode(x); if (p == NULL) return 0; if (s.pHead == NULL) { s.pHead = p; s.pTail = p; } else { p->pNext = s.pHead; s.pHead = p; } return 1; } 21 BÀI TẬP int Pop(Stack &s, int &x) { Node *p; if (s.pHead == NULL) return 0; p = s.pHead; s.pHead = p->pNext; if (s.pHead == NULL) s.pTail = NULL; x = p->dat; delete p; return 1; } 22 11 BÀI TẬP void Chuyen(char kq[], int so) { int i = 0, x; Stack s; CreateStack(s); while (so > 0) { if (!Push(s, so % 2)) break; so = so / 2; } while (Pop(s, x)) { kq[i] = '0' + x; i++; } kq[i] = 0; } 23 BÀI TẬP int Fibo(int n) { Stack s; int f1, f2, f3, i; CreateStack(s); if (n == 0) return 0; if (n == 1) return 1; Push(s, 0); Push(s, 1); for (i = 2; i info = x; p->pNext = NULL; } return p; } void AddLast(List &l, Node *p) { if (l.pHead == NULL) { l.pHead = p; l.pTail = p; l.pTail->pNext = l.pHead; } else { l.pTail->pNext = p; l.pTail = p; l.pTail->pNext = l.pHead; } } 27 BÀI TẬP void RemoveAfter(List &l, Node *q, int &x) { Node *p; if (l.pHead == NULL) return; p = q->pNext; if (q == p) { l.pHead = NULL; l.pTail = NULL; } else { if (p == l.pTail) l.pTail = p->pNext; if (p == l.pHead) l.pHead = p->pNext; q->pNext = p->pNext; } x = p->info; delete p; } 28 14 BÀI TẬP void Josephus(List &l, int m) { Node *p = l.pTail; int x, i; p = l.pTail; while (l.pHead) { for (i = 1; i < m; i++) p = p->pNext; RemoveAfter(l, p, x); cout pRight); if (hl < hr) return hr + 1; else return hl + 1; } 32 16 BÀI TẬP void InNode(TREE root, int i) { if (i == 0) { cout key pLeft) InNode(root->pLeft, i - 1); if (root->pRight) InNode(root->pRight, i - 1); } 33 BÀI TẬP Node * Search(TREE root, int x) { Node * p; if (root == NULL) return NULL; if (root->key == x) return root; p = Search(root->pLeft, x); if (p) return p; p = Search(root->pRight, x); return p; } 34 17 BÀI TẬP  Cho chứa khóa số nguyên, xây dựng cấu trúc cấu trúc stack để viết chương trình duyệt theo thứ tự NLR (theo chiều sâu) không dùng đệ quy 35 BÀI TẬP struct Node { int key; Node * pLeft, *pRight; }; typedef Node * TREE; struct TreeNode { TREE dat; TreeNode *pNext; }; struct Stack { TreeNode *pHead, *pTail; }; 36 18 BÀI TẬP TreeNode * CreateNode(TREE node) { TreeNode *p = new TreeNode; if (p != NULL) { p->dat = node; p->pNext = NULL; } return p; } void CreateStack(Stack &s) { s.pHead = NULL; s.pTail = NULL; } 37 BÀI TẬP int Push(Stack &s, TREE node) { TreeNode *p = CreateNode(node); if (p == NULL) return 0; if (s.pHead == NULL) { s.pHead = p; s.pTail = p; } else { p->pNext = s.pHead; s.pHead = p; } return 1; } 38 19 BÀI TẬP int Pop(Stack &s, TREE &node) { TreeNode *p; if (s.pHead == NULL) return 0; p = s.pHead; s.pHead = p->pNext; if (s.pHead == NULL) s.pTail = NULL; node = p->dat; delete p; return 1; } 39 BÀI TẬP void NLR(TREE root) { Stack s; TREE p; CreateStack(s); Push(s, root); while (Pop(s, p)) { cout key pRight) Push(s, p->pRight); if (p->pLeft) Push(s, p->pLeft); } } 40 20 BÀI TẬP  Cho chứa khóa số nguyên, xây dựng cấu trúc cấu trúc queue để viết hàm duyệt theo mức (theo chiều rộng) không dùng đệ quy 41 BÀI TẬP struct Node { int key; Node * pLeft, *pRight; }; typedef Node * TREE; struct TreeNode { TREE dat; TreeNode *pNext; }; struct Queue { TreeNode *pHead, *pTail; }; 42 21 BÀI TẬP TreeNode * CreateNode(TREE node) { TreeNode *p = new TreeNode; if (p != NULL) { p->dat = node; p->pNext = NULL; } return p; } void CreateQueue(Queue &q) { q.pHead = NULL; q.pTail = NULL; } 43 BÀI TẬP int EnQueue(Queue &q, TREE node) { TreeNode *p = CreateNode(node); if (p == NULL) return 0; if (q.pHead == NULL) { q.pHead = p; q.pTail = p; } else { q.pTail->pNext = p; q.pTail = p; } return 1; } 44 22 BÀI TẬP int DeQueue(Queue &q, TREE &node) { TreeNode *p; if (q.pHead == NULL) return 0; p = q.pHead; q.pHead = p->pNext; if (q.pHead == NULL) q.pTail = NULL; node = p->dat; delete p; return 1; } 45 BÀI TẬP void DuyetMuc(TREE root) { Queue q; TREE p; CreateQueue(q); EnQueue(q, root); while (DeQueue(q, p)) { cout key pLeft) EnQueue(q, p->pLeft); if (p->pRight) EnQueue(q, p->pRight); } } 46 23 ... x); return p; } 34 17 BÀI TẬP  Cho chứa khóa số nguyên, xây dựng cấu trúc cấu trúc stack để viết chương trình duyệt theo thứ tự NLR (theo chiều sâu) không dùng đệ quy 35 BÀI TẬP struct Node { int... Push(s, p->pLeft); } } 40 20 BÀI TẬP  Cho chứa khóa số nguyên, xây dựng cấu trúc cấu trúc queue để viết hàm duyệt theo mức (theo chiều rộng) không dùng đệ quy 41 BÀI TẬP struct Node { int key;... SetValue(c, i, p->c, p->v);p = p->pNext; } } } 16 BÀI TẬP } } } } else { SetValue(c, i, p->c, p->v); p = p->pNext; } 17 BÀI TẬP  Xây dựng cấu trúc stack viết hàm: - Chuyển số nguyên từ hệ đếm

Ngày đăng: 11/08/2022, 11:07

w