Cấu trúc dữ liệu Stack
Số trang: 45
Loại file: ppt
Dung lượng: 261.00 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Stack là 1 cấu trúc dữ liệu tuyến tính màchỉ có thể truy nhập tới phần tử cuối cùngcủa nó để nhập và xuất dữ liệu.Cấu trúc LIFO(Last in first out – vào sau ratrước).Xem hình minh hoạ ở slide tiếng anh
Nội dung trích xuất từ tài liệu:
Cấu trúc dữ liệu Stack Chủ đề week 4 Ch Cấu trúc dữ liệu Stack (ngăn xếp).- Triển khai ngăn xếp dùng mảng- Triển khai ngăn xếp dùng danh sách liên kết Cấu trúc dữ liệu Queue (hàng đợi).- Triển khai queue vòng sử dụng mảng- Triển khai queue sử dụng danh sách liên kết Bài tập với Stack và Queue. Stack là 1 cấu trúc dữ liệu tuyến tính mà Stack chỉ có thể truy nhập tới phần tử cuối cùng của nó để nhập và xuất dữ liệu. Cấu trúc LIFO(Last in first out – vào sau ra trước). Xem hình minh hoạ ở slide tiếng anhCác phép toán trên Stack Initialize(stack) - khởi tạo•• Empty(stack) - kiểm tra stack có rỗng không.• Full(stack) - kiểm tra stack có đầy không• Push(el,stack) – thêm fần tử el vào đỉnh của stack.• Pop(stack) - lấy ra phần tử trên đỉnh stackVậy làm thế nào để triển khai 1 stack?Phân tách khai triển từ đặc tả Interface (giao diện): đặc tả các phép toán• được cho phép. Implementation (triển khai): cung cấp• code cho các phép toán. Client: các code mà ta sử dụng.• Có thể sử dụng mảng hoặc linked list để• triển khai stack. Khách có thể làm việc ở mức trừu tượng• cao.Khai triển sử dụng mảng Mỗi phần tử của stack được lưu trữ như là• 1 phần tử của mảng.• Stack rỗng: top=0;// top là chỉ số của phần tử đỉnh stack• Stack đầy: top=max_element(chỉ số phần tử cuối của mảng).Đặc tả Stach (stack.h) #define Max 50//số fần tử tối đa• typedef int Eltype;//kiểu phần tử mảng là int• typedef Eltype StackType[Max];//định nghĩa kiểu• StackType là mảng Max phần tử có kiểu Eltype. int top;• void Initialize(StackType stack);• int empty(StackType stack);• int full(StackType stack);• void push(Eltype el, StackType stack);• Eltype pop(StackType stack);•Khai triển mảng của Stack (stack.c) Initialize(StackType stack) push(Eltype el, StackType stack) { { top=0; if (full(stack))} printf(“stack tràn”); empty(StackType stack) else stack[top++] = el;{ } return top == 0; Eltype pop(StackType stack) } { full(StackType stack) if (empty(stack)) printf(“stack không còn để lấy{ ra”); return top == Max; else return stack[--top];} }Khai triển stack sử dụng cấu trúc Khai triển: stack được thể hiện là 1 cấu trúc có 2 trường 1 để lưu trữ, 1 để theo dõi vị trí của phần tử trên cùng.#define Max 50typedef int Eltype;typedef struct StackRec { Eltype storage[Max]; int top;};typedef struct StackRec StackType; Khai triển stack sử dụng cấu trúc Initialize(StackType *stack) push(Eltype el, StackType *stack) { { (*stack).top=0; if (full(*stack))} printf(“stack tràn”); empty(StackType stack) else (*stack).storage[{ (*stack).top++]=el; return stack.top == 1; }} Eltype pop(StackType *stack) full(StackType stack) {{ if (empty(stack)) printf(“stack không còn để lấy return stack.top == Max; ra”);} else return (*stack).storage[--(*stack).top]; }Khai triển sử dụng linked list triển stack sử dụng linked list rất đơn giản. Khai Sự khác nhau giữa 1 linked list bình thường và 1 stack sử dụng linked list là 1 và phép toán của linked list không sử dụng được cho stack. Là stack thì ta chỉ có 1 phép toán chèn(insert) duy nhất là push().- Trong nhiều trường hợp thì push giống như là phép chèn vào trước. Ta cũng chỉ có 1 phép xoá (delete) là pop().- Phép toán này giống như là phép xoá từ phía trước.Diễn tả bằng hình ảnh của stack trong slide tiếng anh Xem struct node { int data; struct node *link;};Push struct node *push(struct node *p, int value){ struct node *temp; temp= (struct node *)malloc(sizeof(struct node)); if(temp==NULL) { printf(“không còn bộ nhớ, Error! ); exit(0); } temp->data = value; temp->link = p; p = temp; return(p);}- Xem minh hoạ trong slide tiếng anhPop (linked list) ...
Nội dung trích xuất từ tài liệu:
Cấu trúc dữ liệu Stack Chủ đề week 4 Ch Cấu trúc dữ liệu Stack (ngăn xếp).- Triển khai ngăn xếp dùng mảng- Triển khai ngăn xếp dùng danh sách liên kết Cấu trúc dữ liệu Queue (hàng đợi).- Triển khai queue vòng sử dụng mảng- Triển khai queue sử dụng danh sách liên kết Bài tập với Stack và Queue. Stack là 1 cấu trúc dữ liệu tuyến tính mà Stack chỉ có thể truy nhập tới phần tử cuối cùng của nó để nhập và xuất dữ liệu. Cấu trúc LIFO(Last in first out – vào sau ra trước). Xem hình minh hoạ ở slide tiếng anhCác phép toán trên Stack Initialize(stack) - khởi tạo•• Empty(stack) - kiểm tra stack có rỗng không.• Full(stack) - kiểm tra stack có đầy không• Push(el,stack) – thêm fần tử el vào đỉnh của stack.• Pop(stack) - lấy ra phần tử trên đỉnh stackVậy làm thế nào để triển khai 1 stack?Phân tách khai triển từ đặc tả Interface (giao diện): đặc tả các phép toán• được cho phép. Implementation (triển khai): cung cấp• code cho các phép toán. Client: các code mà ta sử dụng.• Có thể sử dụng mảng hoặc linked list để• triển khai stack. Khách có thể làm việc ở mức trừu tượng• cao.Khai triển sử dụng mảng Mỗi phần tử của stack được lưu trữ như là• 1 phần tử của mảng.• Stack rỗng: top=0;// top là chỉ số của phần tử đỉnh stack• Stack đầy: top=max_element(chỉ số phần tử cuối của mảng).Đặc tả Stach (stack.h) #define Max 50//số fần tử tối đa• typedef int Eltype;//kiểu phần tử mảng là int• typedef Eltype StackType[Max];//định nghĩa kiểu• StackType là mảng Max phần tử có kiểu Eltype. int top;• void Initialize(StackType stack);• int empty(StackType stack);• int full(StackType stack);• void push(Eltype el, StackType stack);• Eltype pop(StackType stack);•Khai triển mảng của Stack (stack.c) Initialize(StackType stack) push(Eltype el, StackType stack) { { top=0; if (full(stack))} printf(“stack tràn”); empty(StackType stack) else stack[top++] = el;{ } return top == 0; Eltype pop(StackType stack) } { full(StackType stack) if (empty(stack)) printf(“stack không còn để lấy{ ra”); return top == Max; else return stack[--top];} }Khai triển stack sử dụng cấu trúc Khai triển: stack được thể hiện là 1 cấu trúc có 2 trường 1 để lưu trữ, 1 để theo dõi vị trí của phần tử trên cùng.#define Max 50typedef int Eltype;typedef struct StackRec { Eltype storage[Max]; int top;};typedef struct StackRec StackType; Khai triển stack sử dụng cấu trúc Initialize(StackType *stack) push(Eltype el, StackType *stack) { { (*stack).top=0; if (full(*stack))} printf(“stack tràn”); empty(StackType stack) else (*stack).storage[{ (*stack).top++]=el; return stack.top == 1; }} Eltype pop(StackType *stack) full(StackType stack) {{ if (empty(stack)) printf(“stack không còn để lấy return stack.top == Max; ra”);} else return (*stack).storage[--(*stack).top]; }Khai triển sử dụng linked list triển stack sử dụng linked list rất đơn giản. Khai Sự khác nhau giữa 1 linked list bình thường và 1 stack sử dụng linked list là 1 và phép toán của linked list không sử dụng được cho stack. Là stack thì ta chỉ có 1 phép toán chèn(insert) duy nhất là push().- Trong nhiều trường hợp thì push giống như là phép chèn vào trước. Ta cũng chỉ có 1 phép xoá (delete) là pop().- Phép toán này giống như là phép xoá từ phía trước.Diễn tả bằng hình ảnh của stack trong slide tiếng anh Xem struct node { int data; struct node *link;};Push struct node *push(struct node *p, int value){ struct node *temp; temp= (struct node *)malloc(sizeof(struct node)); if(temp==NULL) { printf(“không còn bộ nhớ, Error! ); exit(0); } temp->data = value; temp->link = p; p = temp; return(p);}- Xem minh hoạ trong slide tiếng anhPop (linked list) ...
Tìm kiếm theo từ khóa liên quan:
cấu trúc dữ liệu thuật toán bài giảng cấu trúc dữ liệu tài liệu cấu trúc dữ liệu giáo trình cấu trúc dữ liệu thuật toán trong cấu trúc dữ liệuTài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 318 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 163 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 151 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
57 trang 134 1 0
-
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 125 0 0 -
150 trang 104 0 0
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Một số mô hình thuật toán
42 trang 74 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0