intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chapter 4: Cấu trúc dữ liệu động

Chia sẻ: Thanh Tran | Ngày: | Loại File: PDF | Số trang:12

87
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Cấu trúc dữ liệu động.Biến dữ liệu (Variant) Biế dữ liệ Khai báo tường minh và được cấp phát vùng nhớ ngay khi khai báo, vùng nhớ được cấp cho biến tĩnh sẽ không thể thu hồi được nếu biến còn trong phạm vi hoạt động Ví dụ: int X; float Y; Nhược điểm Ngăn xếp - Stack Hàng đợi - Queue

Chủ đề:
Lưu

Nội dung Text: Chapter 4: Cấu trúc dữ liệu động

  1. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Biến dữ liệu (Variant) Biế dữ liệ ấ ữ ệ ộ Khai báo tường minh và được cấp phát vùng nhớ ngay Nội dung Nội khi khai báo, vùng nhớ được cấp cho biến tĩnh sẽ không thể thu hồi được nếu biến còn trong phạm vi hoạt động 1 Biến và biến động Ví dụ: int X; X (2 bytes) 2 Danh sách liên kết float Y; Y (4 bytes) Nhược điểm 3 Ngăn xếp - Stack Chúng có thể chiếm dụng bộ nhớ. Một số thao tác tiến hành thiếu tự nhiên trên các đối tượng tĩnh: 4 Hàng đợi - Queue Chèn và xóa trong mảng. 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Biến động (Dynamic Variant) Biế độ Ví dụ: int X=10, *P; // khai báo 2 biến tĩnh X, P (con trỏ) Tính chất của biến động: P=&X; // Cho P trỏ đến X Thuộc một kiểu dữ liệu nào đó, không được khai báo printf(“\nĐịa chỉ của biến X là %x”,P); tường minh không có tên printf(“\nX=%d”,*P); // hoặc printf(“X=%d”,X); in giá trị của X Được cấp phát vùng nhớ và truy xuất thông qua một biến con trỏ P=(int*)malloc(sizeof(int)); // tạo biến động cho P trỏ đến Có thể thay đổi kích thước hoặc thu hồi (hủy bỏ) vùng *P=X; //gán giá trị cho biến động bằng giá trị của X nhớ được cấp phát khi chương trình đang hoạt động printf(“\nĐịa chỉ của biến động là %x”,P); Việc tạo ra biến động (cấp phát vùng nhớ cho nó ) và xóa bỏ nó được thực hiện bởi các thủ tục đã có sẵn printf(“\nGiá trị của Biến động=%d”,*P); free(P); //hủy (thu hồi vùng nhớ) biến động do P trỏ đến 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  2. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Tạo một biến động mộ biế độ Tạo một biến động mộ biế độ Dùng hàm có sẵn trong thư viện hay Dùng toán tử new (trong C++) = new [(Số_phần_tử)]; void *malloc ( size ); Cấp phát vùng nhớ có kích Công dụng như hàm malloc nhưng tự động thực hiện thước size bytes và trả về địa chỉ của vùng nhớ đó. hàm sizeof(tênkiểu). void *calloc ( n, size ); Cấp phát vùng nhớ cho n Ví dụ: phần tử, mỗi phần tử có kích thước size bytes và trả int *p1, *p2, *p3; // khai báo 3 biến con trỏ về địa chỉ của vùng nhớ đó. p1 = (int *) malloc( sizeof(int) ); //tạo biến động void * realloc (void *ptr, size_t nbyte): Thay đổi kích thước vùng nhớ đã cấp phát trước đó cho biến p1 = (int*) realloc (p1, 4); //thay đổi kích thước biến con trỏ ptr là n byte, đồng thời chép dữ liệu vào vùng p2 = (int*) calloc(10, 2);//tạo 10 biến động nhớ mới. p2 = new int; 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Hủy một biến động mộ biế độ Truy xuất biến động xuấ biế độ Dùng hàm free(Tên_con_trỏ); Tên_con_trỏ ~ Địa chỉ của biến động Dùng toán tử delete (trong C++) *Tên_con_trỏ ~ Giá trị của biến động delete Tên_con_trỏ ; Ví dụ Lưu ý: không thể dùng hàm free để hủy một biến được int *P; cấp phát bằng toán tử new P=(int*) malloc(sizeof(int));// tạo biến động Ví dụ: *P=100; //gán giá trị cho biến động int *p1, *p2; // khai báo 2 biến con trỏ p1 = (int *) malloc( sizeof(int) ); //tạo biến động kiểu int print(“\nĐịa chỉ của biến động là %x”,P); p2 = new float; // tạo biến động kiểu float print(“\nGiá trị của biến động là %d”,*P); free(p1); //hủy biến động do p1 trỏ tới delete p2; //hủy biến động do p2 trỏ tới 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  3. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Danh sách liên kết sá kế Hình ảnh một danh sách liên kết mộ sá kế Danh sách liên kết là 1 tập hợp các phần tử cùng kiểu, giữa 2 phần tử trong danh sách có một mối liên kết Cho trước kiểu dữ liệu T, Kiểu xâu liên kết Cấu trúc một node trong danh sách gồm Tx = < Vx, Ox> trong đó: Thành phần DATA: chứa dữ liệu kiểu T nào đó Vx = { Tập hợp có thứ tự gồm các biến động kiểu T } Thành phần NEXT: là một con trỏ tới node kế tiếp Ox = {Tạo danh sách; Liệt kê các phần tử trong danh sách; Thêm; Hủy; Tìm; Sắp xếp } DATA NEXT 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Danh sách liên kết đơn (xâu đơn) (Simple List) sá kế đơn) Ví dụ Khai báo kiểu 1 nút trong xâu liên kết đơn: Khai báo xâu liên kết lưu trữ các hệ số của một đa thức typedef struct typedef struct Node typedef struct Node NodeType; { float Heso; { KiểuT Data; struct Node struct Node *Next; { KiểuT Data; int Bac; } NodeType; NodeType *Next; } Hangtu; } ; typedef struct Node { Khai báo con trỏ đầu xâu: NodeType *Head; Hangtu Data; NodeType *Next ; /* Con trỏ liên kết */ Có thể khai báo kiểu con trỏ đến kiểu nút : } NodeType; typedef NodeType *NodePtr; typedef NodeType *NodePtr; NodePtr Head; NodePtr Head; /* Con trỏ đầu xâu */ 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  4. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn tá Các thao tác trên xâu đơn tá Khởi tạo xâu rỗng Khởi tạo 1 xâu mới rỗng: Head = Tail =NULL; Kiểm tra xâu rỗng Kiểm tra xâu rỗng: if (Head == NULL)... Tạo Nút chứa giá trị kiểu T: Tạo nút mới Thuật toán: Trả về địa chỉ biến động chứa giá trị X Chèn nút vào xâu b1: Tạo biến động kiểu T và lưu địa chỉ vào biến con Tạo xâu trỏ P Hủy nút trên xâu b2: Nếu không tạo được thì báo lỗi và kết thúc ngược lại chuyển sang b3 Tìm kiếm giá trị b3: Lưu giá trị X vào phần dữ liệu của nút Duyệt xâu b4: Gán phần Liên kết của Nút giá trị NULL Sắp xếp dữ liệu b5: return P; 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Tạo nút chứa giá trị X tá Tạ nú chứ giá Các thao tác trên xâu đơn _ Chèn nút vào xâu tá Chèn nú và Cài đặt Chèn nút mới vào đầu xâu: NodePtr CreateNode( KiểuT x) { NodePtr P; P = (NodePtr) malloc(sizeof(NodeType)); if (p == NULL) {printf(“Khong du bo nho”); exit(1);} void InsertFirst(NodePtr P, NodePtr &Head, NodePtr &Tail) P->Data = x; { P->Next = Head; P->Next = NULL; if (Head == NULL) Tail = P; return P; Head = P; } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  5. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Chèn nút vào xâu tá Chèn nú và Các thao tác trên xâu đơn _ Chèn nút vào xâu tá Chèn nú và Chèn nút mới vào cuối xâu: Chèn nút mới vào sau nút trỏ bởi Q: void InsertLast(NodePtr P, NodePtr &Head, NodePtr &Tail) void InsertAfter(NodePtr P, NodePtr Q, NodePtr &Tail) { NodePtr Last ; { If (Q != NULL) If (Head == NULL) { P->Next = Q->Next; { Head = P; Tail = Head; } Q->Next = P; else if (Q==Tail) Tail = P; { Tail->Next = P; Tail = P; } } } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Chèn nút vào xâu tá Chèn nú và Các thao tác trên xâu đơn _ Chèn nút vào xâu tá Chèn nú và void InsertListOrder(NodePtr G,NodePtr &Head,NodePtr &Tail) Chèn nút vào xâu theo thứ tự tăng của node { NodePtr P, Q; Thuật toán: P = Head; while (P != NULL) Bước 1: Tìm vị trí cần chèn (Ghi nhận nút đứng { if (P->Data >= G->Data) break; Q = P; P = Q->Next; trước vị trí cần chèn) } if (P == Head) /*InsertFirst(G, Head, Tail)*/ Bước 2: Nếu vị trí cần chèn ở đầu xâu thì chèn { G->Next = Head; vào đầu danh sách Head = G; } Bước 3: Ngược lại thì chèn vào sau nút tìm được else /*InsertAfter(G,Q, Tail);*/ { G->Next = Q->Next; Q->Next = G; } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  6. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Tạo xâu tá Tạ Các thao tác trên xâu đơn _ Tìm phần tử trong xâu tá Tì phầ tử Tạo một Danh sách liên kết: Thuật toán: Áp dụng thuật toán tìm kiếm tuyến void CreateList (NodePtr &Head, NodePtr &Tail) tính. Sử dụng 1 con trỏ phụ P để lần lượt trỏ { Head = NULL; đến các phần tử trong xâu. do { b1: Cho P trỏ phần tử đầu xâu: P = Head; Nhập gía trị mới X b2: Trong khi chưa hết danh sách (P != NULL) Nếu (không nhập X) thì break; Nếu P->Data == X thì báo tìm thấy và Tạo Nút chứa X kết thúc ngược lại thì chuyển sang Chèn Nút vào xâu phần tử kế tiếp (P = P->Next) } while (1); } b3: Báo không tìm thấy 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Tìm phần tử trong xâu tá Tì phầ tử Các thao tác trên xâu đơn _ Hủy nút trong xâu tá Hủ nú NodePtr Search(KiểuT X, NodePtr Head) Hủy nút đầu xâu { NodePtr P; P = Head; while (P != NULL) void DeleteFirst(NodePtr &Head, NodePtr &Tail) if (P->Data == X) return P; { NodePtr P ; if (Head != NULL) else P = P->Next ; { P = Head; Head = P->Next; return NULL;// Không tìm thấy if (Head == NULL) Tail = NULL; } free(P); } 3/11/2010 www.lhu.edu.vn 3/11/2010} www.lhu.edu.vn
  7. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Hủy nút trong xâu tá Hủ nú Các thao tác trên xâu đơn _ Hủy xâu tá Hủ Hủy nút sau nút trỏ bởi Q Thuật toán : Bước 1: Trong khi (Danh sách chưa hết) thực hiện B11: p = Head; void DeleteAfter( NodePtr Q, NodePtr &Tail) { NodePtr P; Head:=Head->pNext; // p trỏ tới phần tử kế if ( Q != NULL) B12: { P = Q->Next; Hủy p; if (P != NULL) { Q->Next = P->Next; if (P == Tail) Tail = Q; Bước 2: free(P); //delete P; Tail = NULL; //Bảo đảm tính nhất quán khi xâu rỗng } } 3/11/2010} www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Tìm phần tử trong xâu tá Tì phầ tử Các thao tác trên xâu đơn _ Duyệt xâu tá Duyệ void RemoveList(NodePtr &Head, NodePtr &Tail) void TraverseList(NodePtr Head) { NodePtr p; { NodePtr P, Q; while (Head!= NULL) { P = Head; p = Head; while (P != NULL) Head = p->Next; { Q = P; delete p; P = Q->Next; } Xu_Ly_Nut(Q); Tail = NULL; } } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  8. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên xâu đơn _ Sắp xếp xâu tá xế Các thao tác trên xâu đơn _ Sắp xếp xâu tá xế Ý tưởng: Tạo xâu mới có thứ tự từ xâu cũ (đồng thời hủy xâu cũ) Void SapXep(NodePtr &Head, NodePtr & Tail) { NodePtr H,T, P; Thuật toán: H = T = NULL; B1: Khởi tạo xâu mới Result rỗng; while (Head != NULL) B2: Tách phần tử đầu xâu cũ ra khỏi danh sách { P = Head; Head = P->Next; P->Next = NULL; B3: Chèn phần tử đó vào xâu Result theo đúng thứ tự sắp xếp. InsertListOrder(P,H,T); B5: Lặp lại bước 2 trong khi xâu cũ chưa rỗng. } Head = H; Tail = T; } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Ngăn xếp _ Stack xế Các thao tác trên Stack (dùng xâu đơn) tá (dùng đơn) Ngăn xếp thường được sử dụng để lưu trữ dữ liệu tạm Tạo Stack Rỗng: Stack = NULL; thời trong quá trình chờ xử lý theo nguyên tắc: vào sau ra trước (Last In First Out - LIFO) Kiểm tra Ngăn xếp Rỗng: if (Stack == NULL).. Khai báo Cấu trúc dữ liệu (dùng xâu đơn) Thêm 1 phần tử X vào đầu Stack: typedef ; void Push(DataType X , StackPtr &Stack ) typedef struct Node { { T Data; NodePtr P; struct Node *Next; //Con trỏ tới nút kế P = CreateNode(x); } NodeType; typedef NodeType *StackPtr; P->Next = Stack; /*InsertFirst(P, Stack);*/ Khai báo con trỏ đầu Stack Stack = P; StackPtr Stack; } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  9. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên Stack (dùng xâu đơn) tá (dùng đơn) Ngăn xếp _ Stack xế Lấy phần tử ở đỉnh Stack Khai báo Cấu trúc dữ liệu (dùng mảng) KieuT Pop(StackPtr &Stack) #define MaxSize 100 /*Kích thước Stack*/ { DataType x; typedef if (Stack!=NULL) Khai báo kiểu mảng: { x = (Stack)->Data; /*Xoa nut dau*/ typedef KiểuT StackArray[MaxSize]; P = Stack; Stack = P->Next; Khai báo một Stack: free(P); StackArray Stack; int top; //chỉ mục phần tử đầu Stack return x; } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên Stack (dùng mảng) tá (dùng mả Các thao tác trên Stack (dùng mảng) tá (dùng mả Khởi tạo 1 Stack rỗng: top = -1 Lấy phần tử ở đỉnh Stack Kiểm tra ngăn xếp rỗng: if (top == -1)... KieuT Pop(StackArray Stack, int &top) Kiểm tra ngăn xếp đầy: if(top == MaxSize-1)... { Thêm 1 phần tử có nội dung x vào đầu Stack: KieuT Item; void Push(KieuT x, StackArray Stack, int &top) if (top != -1) { { Item = Stack[top]; top--; if (top < MaxSize-1) return Item; { top++; Stack[top]= x; } } } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  10. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Ứng dụng của Stack dụ củ Hàng đợi _ Queue Hàng đợ Loại danh sách này có hành vi giống như việc Chuyển đổi các hệ thống số xếp hàng chờ mua vé, với qui tắc Đến trước - Thập phân nhị phân Mua trước. (First in First Out - FIFO) Nhị phân thập phân .... Ví dụ: Bộ đệm bàn phím, tổ chức công việc Xử lý biểu thức hậu tố chờ in trong Print Manager của Windows Chuyển đổi biểu thức ngoặc toàn phần sang biểu Hàng đợi là một kiểu danh sách đặc biệt có thức tiền tố, trung tố, hậu tố Các thao tác chèn thêm dữ liệu đều thực hiện ở cuối Ước lượng giá trị các biểu thức danh sách ... Các thao tác lấy dữ liệu được thực hiện ở đầu danh ... sách. 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Hàng đợi _ Queue Hàng đợ Các thao tác trên Queue (dùng xâu đơn) tá (dùng đơn) Khai báo Cấu trúc dữ liệu (dùng xâu đơn) Khởi tạo hàng đợi rỗng: Head = NULL; Tail = NULL; typedef ; Kiểm tra hàng đợi rỗng: if (Head == NULL)... typedef struct Node Chèn dữ liệu X vào cuối hàng đợi: { T Data; void Push( KieuT x, QueuePtr &Head, QueuePtr &Tail ) struct Node *Next; //Con trỏ tới nút kế { QueuePtr P; } NodeType; P = CreateNode(x); typedef NodeType *QueuePtr; if (Head == NULL){ Head = P; Tail = Head; } Khai báo con trỏ else { Tail->Next = P; Tail = P; } QueuePtr Head, Tail; } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  11. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên Queue (dùng xâu đơn) tá (dùng đơn) Cài đặt Queue dùng mảng Cài đặ dù mả Lấy dữ liệu từ đầu hàng đợi Sử dụng kỹ thuật xác định chỉ số vòng tròn để định vị KieuT Pop( QueuePtr &Head, QueuePtr &Tail) trí đầu và cuối hàng đợi. { QueuePtr P; KieuT x; Head Tail if (Head != NULL) { x = Head->Data; A B C D E P = Head; /* DeleteFirst(Head);*/ Head = P->Next; Head là vị trí phần tử đầu hàng đợi. Tail là vị trí phần tử free(P); cuối hàng đợi If (Head == NULL) Tail = NULL; Hàng đợi rỗng: Head = Tail } Vị trí đầu mới = (Head + 1) mod Maxsize return x; Vị trí cuối mới = (Tail + 1) mod Maxsize } Hàng đợi đầy: Vị trí cuối mới = Head 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Cài đặt Queue dùng mảng Cài đặ dù mả Các thao tác trên Queue (dùng mảng) tá (dùng mả Khởi Tạo Queue rỗng: Khai báo kích thước Queue void CreateQ(QueueType &queue) #define MaxSize 100 { queue.Head = 0; typedef /* khai báo kiểu T*/ queue.Tail = 0; Khai báo cấu trúc Queue } typedef struct Kiểm tra hàng đợi rỗng: Head == Tail { int Head, Tail; int EmptyQ(QueueType queue ) KiểuT Node[MaxSize] ; { } QueueType; return (queue.Head == queue.Tail ? 1 : 0)); QueueType Queue ; } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
  12. Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Chương 4 Cấu trúc dữ liệu động Cấ trú dữ liệ độ Các thao tác trên Queue (dùng mảng) tá (dùng mả Các thao tác trên Queue (dùng mảng) tá (dùng mả Thêm phần tử vào cuối hàng đợi: Lấy ra 1 phần tử ở đầu hàng đợi: void AddQ(KieuT item, Queuetype &q) KieuT GetQ(QueueType &q) { int Vitri; { KieuT Item; Vitri = (q.Tail + 1)% maxsize; int Vitri; if (Vitri == q.Head) if ( ! EmptyQ(q)) printf(“\nHang đoi da day”); /*Day hang doi*/ { Vitri = (q.Head + 1) % MaxSize; else Item = q.Node[q.Head]; { q.Node[Tail]=Item; q.Head = Vitri; q.Tail = Vitri; return Item; } } } } 3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2