Bài giảng Cấu trúc dữ liệu: Ngăn xếp - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết
Số trang: 44
Loại file: pdf
Dung lượng: 11.68 MB
Lượt xem: 8
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:
Bài giảng Cấu trúc dữ liệu: Ngăn xếp cung cấp cho người học những kiến thức như: Sử dụng mảng; Sử dụng con trỏ; Ứng dụng của ngăn xếp. Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu: Ngăn xếp - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết TS. Lê Minh Trung ThS. Lương Trần Ngọc KhiếtKhoa Công nghệ Thông tin- Đại học Sư phạm TP. HCMNgăn Xếp (Stack) Sử dụng mảng Sử dụng con trỏ Ứng dụng của ngăn xếpMô tả stack Một stack là một cấu trúc dữ liệu mà việc thêm vào và loại bỏ được thực hiện tại một đầu (gọi là đỉnh – top của stack). Là một cấu trúc vào sau ra trước – LIFO (Last In First Out)Hoạt động của Stack Stack rỗng: Đẩy (push) Q vào: Q A Q Đẩy A vào: A Lấy (pop) ra một => được A: Q Lấy ra một => được Q và stack rỗng: QHoạt động của Stack Thiết kế của Stacktemplate //NodeType là kiểu dữ liệu tùy ýclass Stack{ public: Stack(void); //phương thức khởi tạo Stack(const Stack &source); //phương thức khởi tạo ~Stack(void); //phương thức hủy bool IsEmpty() const; void Push(const NodeType &item); //thêm phần tử vào đỉnh stack void Pop(); //gỡ phần tử ra khỏi đỉnh stack NodeType &Peek() const; //xem phần tử trên đỉnh stack void Clear(); //xóa dữ liệu của stack void operator=(const Stack &source);}; Cài đặt Stack sử dụng mảnghttp://www.cs.usfca.edu/~galles/visualization/StackArray.html Thiết kế Stack dùng mảngconst int MAX=20; //stack có tối đa MAX phần tửtemplateclass Stack{public:Stack(void);~Stack(void);bool IsEmpty() const;//kiểm tra stack rỗngbool IsFull() const; //kiểm tra stack đầyvoid Push(const NodeType &item);NodeType &Peek() const;void Pop();void Clear();private:NodeType data[MAX]; //mảng chứa dữ liệuint top; //đỉnh của stack}; Các phương thứctemplate templateStack::Stack(void) bool Stack::IsEmpty() const{ { top =-1; return top==-1; //stack rỗng} }template templatevoid Stack::Clear() bool Stack::IsFull() const{ { top =-1; return top== MAX-1; //stack đầy} }Các phương thứctemplatevoid Stack::Push(const NodeType &item){ if(!IsFull()){ top++; data[top]= item; }else { throw exception(Stack is full); }}Các phương thứctemplatevoid Stack::Push(const NodeType &item){ if(!IsFull()){ top++; data[top]= item; }else { throw exception(Stack is full); }}templatevoid Stack::Pop(){ if(!IsEmpty()){ top--; }else { throw exception(Stack is empty); }}Thử nghiệm#include Stack.cpp#include #includeusing namespace std;void main(){ Stack s; for(int i=1;iThử nghiệm#include Stack.cpp#include #includeusing namespace std;void main(){ Stack s; try{ for(int i=1;iCài đặt Stack sử dụng con trỏhttp://www.cs.usfca.edu/~galles/visualization/StackLL.htmlThiết kế Node Node Cần: Dữ liệu Con trỏ để trỏ đến node sau ConstructorThiết kế Nodetemplatestruct Node{ NodeType item; // dữ liệu của Node Node *next; // con trỏ tới Node kế tiếp Node(); //phương thức khởi tạo Node(NodeType item, Node *ptr=NULL); //phương thức khởi tạo};Thiết kế Node#include Node.htemplateNode::Node(){}templateNode::Node(NodeType item,Node *ptr=nullptr){ this->item= item; this->next = ptr;}Ví dụ với Node liên kếtNode first_node(‘a’);Node *p0 = &first_node;Node *p1 = new Node(‘b’);p0->next = p1;Node *p2 = new Node(‘c’, p0);p1->next = p2; p1 p2 first_nodep0 a b c
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu: Ngăn xếp - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết TS. Lê Minh Trung ThS. Lương Trần Ngọc KhiếtKhoa Công nghệ Thông tin- Đại học Sư phạm TP. HCMNgăn Xếp (Stack) Sử dụng mảng Sử dụng con trỏ Ứng dụng của ngăn xếpMô tả stack Một stack là một cấu trúc dữ liệu mà việc thêm vào và loại bỏ được thực hiện tại một đầu (gọi là đỉnh – top của stack). Là một cấu trúc vào sau ra trước – LIFO (Last In First Out)Hoạt động của Stack Stack rỗng: Đẩy (push) Q vào: Q A Q Đẩy A vào: A Lấy (pop) ra một => được A: Q Lấy ra một => được Q và stack rỗng: QHoạt động của Stack Thiết kế của Stacktemplate //NodeType là kiểu dữ liệu tùy ýclass Stack{ public: Stack(void); //phương thức khởi tạo Stack(const Stack &source); //phương thức khởi tạo ~Stack(void); //phương thức hủy bool IsEmpty() const; void Push(const NodeType &item); //thêm phần tử vào đỉnh stack void Pop(); //gỡ phần tử ra khỏi đỉnh stack NodeType &Peek() const; //xem phần tử trên đỉnh stack void Clear(); //xóa dữ liệu của stack void operator=(const Stack &source);}; Cài đặt Stack sử dụng mảnghttp://www.cs.usfca.edu/~galles/visualization/StackArray.html Thiết kế Stack dùng mảngconst int MAX=20; //stack có tối đa MAX phần tửtemplateclass Stack{public:Stack(void);~Stack(void);bool IsEmpty() const;//kiểm tra stack rỗngbool IsFull() const; //kiểm tra stack đầyvoid Push(const NodeType &item);NodeType &Peek() const;void Pop();void Clear();private:NodeType data[MAX]; //mảng chứa dữ liệuint top; //đỉnh của stack}; Các phương thứctemplate templateStack::Stack(void) bool Stack::IsEmpty() const{ { top =-1; return top==-1; //stack rỗng} }template templatevoid Stack::Clear() bool Stack::IsFull() const{ { top =-1; return top== MAX-1; //stack đầy} }Các phương thứctemplatevoid Stack::Push(const NodeType &item){ if(!IsFull()){ top++; data[top]= item; }else { throw exception(Stack is full); }}Các phương thứctemplatevoid Stack::Push(const NodeType &item){ if(!IsFull()){ top++; data[top]= item; }else { throw exception(Stack is full); }}templatevoid Stack::Pop(){ if(!IsEmpty()){ top--; }else { throw exception(Stack is empty); }}Thử nghiệm#include Stack.cpp#include #includeusing namespace std;void main(){ Stack s; for(int i=1;iThử nghiệm#include Stack.cpp#include #includeusing namespace std;void main(){ Stack s; try{ for(int i=1;iCài đặt Stack sử dụng con trỏhttp://www.cs.usfca.edu/~galles/visualization/StackLL.htmlThiết kế Node Node Cần: Dữ liệu Con trỏ để trỏ đến node sau ConstructorThiết kế Nodetemplatestruct Node{ NodeType item; // dữ liệu của Node Node *next; // con trỏ tới Node kế tiếp Node(); //phương thức khởi tạo Node(NodeType item, Node *ptr=NULL); //phương thức khởi tạo};Thiết kế Node#include Node.htemplateNode::Node(){}templateNode::Node(NodeType item,Node *ptr=nullptr){ this->item= item; this->next = ptr;}Ví dụ với Node liên kếtNode first_node(‘a’);Node *p0 = &first_node;Node *p1 = new Node(‘b’);p0->next = p1;Node *p2 = new Node(‘c’, p0);p1->next = p2; p1 p2 first_nodep0 a b c
Tìm kiếm theo từ khóa liên quan:
Bài giảng Cấu trúc dữ liệu Cấu trúc dữ liệu Data Structures Ngăn xếp Hoạt động của Stack Thiết kế Stack dùng mảngGợi ý tà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 301 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 146 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 139 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 136 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 136 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 100 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 71 0 0 -
49 trang 67 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 64 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng
8 trang 63 0 0