Bài giảng cấu trúc dữ liệu và giải thuật stack queue

34 538 2
Bài giảng cấu trúc dữ liệu và giải thuật  stack   queue

Đ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

Cấu trúc liệu thuật giải CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NỘIMaster DUNGTitle Style Click To Edit STACK - QUEUE STACK Click To Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Stack (ngăn xếp): Là vật chứa đối tượng làm việc theo chế LIFO (Last In First Out), từc việc thêm đối tượng vào Stack lấy đối tượng khỏi Stack thực theo chế “vào sau trước” CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải CácClick thao tác To EditStack Master Title Style • Push(o): Thêm đối tượng o vào Stack • Pop(): Lấy đối tượng từ Stack • isEmpty(): Kiểm tra Stack có rỗng hay không • Top(): Trả giá trị phần tử nằm đầu Stack mà không hủy khỏi Stack CàiClick đặt Stack To Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Dùng mảng chiều Data S [N]; int t;  Dùng danh sách liên kết đơn S List S  Thêm hủy phía CàiClick Stack To mảng chiềuTitle Edit Master CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải  Style Cấu trúc liệu Stack typedef struct tagStack { int a[max]; int t; }Stack;  Khởi tạo Stack: void CreateStack(Stack &s) { s.t=-1; } CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Kiểm tra tính đầy củaTitle Stack Click To rỗng Editvà Master Style int IsEmpty(Stack s)//Stack có rỗng hay không { if(s.t==-1) return 1; else return 0; } int IsFull(Stack s) //Kiểm tra Stack có đầy hay không { if(s.t>=max) return 1; else return 0; } Thêm phần tử vàoMaster Stack Click To Edit Title Style int Push(Stack &s, int x) { if(IsFull(s)==0) { s.t++; s.a[s.t]=x; return 1; } CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải else return 0; } LấyClick phầnTo tửEdit từ Stack Master Title Style int Pop(Stack &s, int &x) { if(IsEmpty(s)==0) { x=s.a[s.t]; s.t ; return 1; } CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải else return 0; } CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải XÉT Title Style Click To NHẬN Edit Master • Các thao tác làm việc với chi phí O(1) • Việc cài đặt stack thông qua mảng chiều đơn giản hiệu • Tuy nhiên, hạn chế lớn phương án cài đặt giới hạn kích thước stack N Giá trị N nhỏ so với nhu cầu thực tế lớn làm lãng phí nhớ CàiClick Stack To danh sách liên kết Style Edit Master Title • Kiểm tra tính rỗng Stack int IsEmpty(List &s) { if(s.pHead==NULL)//Stack rong return 1; else return 0; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải } 10 giá biểu thức số Title học Style ClickĐịnh To Edit Master • Nếu x toán tử : CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải – Xét phần tử đỉnh ngăn xếp giả sử y – Nếu pri(y)>=pri(x) loại y khỏi ngăn xếp, viết y vào bên phải biểu thức hậu tố lại xét phần tử đỉnh ngăn xếp – Nếu pri(y)q.Rear)//truong hop co mot phan tu { q.Front=-1; q.Rear=-1; } return 1; } else //queue { printf("Queue rong"); return 0; } } 29 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải Thêm phần tử vàoMaster Queue Click To Edit Title Style void EnQueue(Queue &q,int x) { int i; int f,r; if(q.Rear-q.Front+1==N)//queue bi day khong the them vao duoc nua printf("queue day roi khong the them vao duoc nua"); else { if(q.Front==-1) { q.Front=0; q.Rear=-1; } if(q.Rear==N-1)//Queue đầy ảo { f=q.Front; r=q.Rear; for(i=f;iNext=tam; Q.pTail=tam; } } 32 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải LấyClick phầnTo tửEdit từ Queue Master int DeQueue(List &Q,int &trave) { Node *p; if(IsEmpty(Q)!=1) { if(Q.pHead!=NULL) { p=Q.pHead; trave=p->Info; Q.pHead=Q.pHead->Next; if(Q.pHead==NULL) Q.pTail=NULL; return 1; delete p; } } return 0; } Title Style 33 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc liệu thuật giải dụng Queue Click Ứng To Edit Master Title Style  Tổ chức lưu vết trình tìm kiếm theo chiều rộng, quay lui vét cạn,  Tổ chức quản lý phân phối tiến trình hệ điều hành,  Tổ chức đệm bàn phím, v í dụ : Nhấn phím => Bộ đệm => CPU xử lý 34 [...]... thực hiện các thủ tục thì stack được dùng để lưu môi trường của các thủ tục • Khử đệ qui • Lưu vết các quá trình quay lui, vét cạn Lưu dữ liệu khi giải một số bài toán về lý thuyết đồ thị, ví dụ như bài toán tìm đường đi 14 Cấu trúc dữ liệu và thuật giải CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT VD Click To Edit Master Title Style 15 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải dụngMaster của ngăn... q.a[q.Rear]=x; } } 30 CàiClick đặt Queue bằngMaster List To Edit • Title Style Kiểm tra Queue có rỗng? int IsEmpty(List &Q) { if(Q.pHead==NULL)/ /Queue rỗng return 1; else return 0; CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải } 31 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Thêm 1 phần tử vàoMaster Queue Click To Edit Title Style void EnQueue(List &Q, Node *Tam) { if(Q.pHead==NULL)...CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Thêm 1 phần tử vàoMaster Stack Click To Edit Title Style void Push(List &s,Node *Tam) { if(s.pHead==NULL) { s.pHead=Tam; s.pTail=Tam; } else { Tam->pNext=s.pHead; s.pHead=Tam; } } 11 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải LấyClick 1 phầnTo tửEdit từ Stack Master int Pop(List &s,int... TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải LấyClick 1 phầnTo tửEdit từ Queue Master Title Style int DeQueue (Queue &q,int &x) { if(q.Front!=-1) / /queue khong rong { x=q.a[q.Front]; q.Front++; if(q.Front>q.Rear)//truong hop co mot phan tu { q.Front=-1; q.Rear=-1; } return 1; } else / /queue trong { printf( "Queue rong"); return 0; } } 29 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật. .. return 1; delete p; } } return 0; } Title Style 12 STACK Click To Edit Master Title Style Mảng 1 chiều CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Kích thước stack khi quá thiếu, lúc quá thừa Push / Pop hơi phức tạp Danh sách LK Cấp phát động! Push/Pop khá dễ dàng 13 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Ứng dụng StackTitle Style Click To Edit Master • Trình biên... Q.pTail=tam; } } 32 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải LấyClick 1 phầnTo tửEdit từ Queue Master int DeQueue(List &Q,int &trave) { Node *p; if(IsEmpty(Q)!=1) { if(Q.pHead!=NULL) { p=Q.pHead; trave=p->Info; Q.pHead=Q.pHead->Next; if(Q.pHead==NULL) Q.pTail=NULL; return 1; delete p; } } return 0; } Title Style 33 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải dụng Queue Click... tố và định giá biểu thức dạng hậu tố 24 QUEUE Click To Edit Master Title Style CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải • Queue (hàng đợi): Là 1 vật chứa các đối tượng làm việc theo cơ chế FIFO (First In First Out), tức việc thêm 1 đối tượng vào hàng đợi hay lấy 1 đối tượng ra khỏi hàng đợi thực hiện theo cơ chế “vào trước ra trước” 25 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu. .. phần của biểu thức trung tố CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải Bước 3 – Loại hết các phần tử còn trong ngăn xếp viết vào bên phải của biểu thức hậu tố 22 giá biểu thức số Title học Style ClickĐịnh To Edit Master Thuật toán 2 : Định giá biểu thức dạng hậu tố • Khởi tạo : sử dụng ngăn xếp rỗng CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải • Bước 1 : Đọc lần lượt... Thêm và hủy Khác phía 8 2 Tail 27 CàiClick đặt Queue bằngMaster mảng 1 Title chiềuStyle To Edit CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải • Cấu trúc dữ liệu: typedef struct tagQueue { int a[100]; int Front; //chỉ số của phần tử đầu trong Queue int Rear; //chỉ số của phầ tử cuối trong Queue }Queue; • Khởi tạo Queue rỗng void CreateQueue (Queue &q) { q.Front=-1; q.Rear=-1; } 28 CẤU TRÚC... To Edit Master Title Thuật toán 1 : Chuyển biểu thức dạng trung tố có CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Cấu trúc dữ liệu và thuật giải dấu ngoặc sang dạng hậu tố • Sử dụng ngăn xếp rỗng có đáy là $ • Sử dụng hàm pri với pri($)

Ngày đăng: 03/05/2016, 21:35

Từ khóa liên quan

Mục lục

  • NỘI DUNG

  • STACK

  • Các thao tác trên Stack

  • Cài đặt Stack

  • Cài Stack bằng mảng 1 chiều

  • Kiểm tra tính rỗng và đầy của Stack

  • Thêm 1 phần tử vào Stack

  • Lấy 1 phần tử từ Stack

  • NHẬN XÉT

  • Cài Stack bằng danh sách liên kết

  • Slide 11

  • Slide 12

  • Slide 13

  • Ứng dụng Stack

  • VD

  • Ứng dụng của ngăn xếp

  • Định giá biểu thức số học

  • Slide 18

  • Slide 19

  • Slide 20

Tài liệu cùng người dùng

Tài liệu liên quan