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

44 10 0
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

Đ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

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!

TS Lê Minh Trung ThS Lương Trần Ngọc Khiết Khoa Công nghệ Thông tin- Đại học Sư phạm TP HCM Ngăn Xếp (Stack)  Sử dụng mảng  Sử dụng trỏ  Ứng dụng ngăn xếp Mô tả stack  Một stack cấu trúc liệu mà việc thêm vào loại bỏ thực đầu (gọi đỉnh – top stack)  Là cấu trúc vào sau trước – LIFO (Last In First Out) Hoạt động Stack  Stack rỗng:  Đẩy (push) Q vào: Q A  Đẩy A vào: Q A  Lấy (pop) => A:  Lấy => Q stack rỗng: Q Q Hoạt động Stack Thiết kế Stack template //NodeType kiểu 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ử khỏi đỉnh stack NodeType &Peek() const; //xem phần tử đỉnh stack void Clear(); //xóa liệu stack void operator=(const Stack &source); }; Cài đặt Stack sử dụng mảng http://www.cs.usfca.edu/~galles/visualization/StackArray.html Thiết kế Stack dùng mảng const int MAX=20; //stack có tối đa MAX phần tử template class Stack { public: Stack(void); ~Stack(void); bool IsEmpty() const;//kiểm tra stack rỗng bool IsFull() const; //kiểm tra stack đầy void Push(const NodeType &item); NodeType &Peek() const; void Pop(); void Clear(); private: NodeType data[MAX]; //mảng chứa liệu int top; //đỉnh stack }; Các phương thức template Stack::Stack(void) { top =-1; } template void Stack::Clear() { top =-1; } template bool Stack::IsEmpty() const { return top==-1; //stack rỗng } template bool Stack::IsFull() const { return top== MAX-1; //stack đầy } Sao chép vùng liệu – Ví dụ copy.top_node copy_node a b c a b c new_copy new_top Sao chép vùng liệu  Giải thuật: Tạo đỉnh danh sách với liệu đỉnh nguồn Giữ trỏ đuôi vào cuối danh sách Duyệt qua danh sách nguồn 2.1 Tạo node với liệu từ node nguồn 2.2 Nối vào cuối danh sách 2.3 Con trỏ đuôi node Sao chép vùng liệu template Node *Stack::Copy(const Stack &source) { Node *sTop, *sCur, *newTop, *newCur; sTop = sCur = source.top; if(sTop==nullptr)return nullptr; newTop = newCur = new Node(sTop->item); while (sCur->next !=nullptr) { sCur = sCur ->next; newCur->next = new Node(sCur->item); newCur = newCur ->next; } return newTop; } Copy constructor toán tử gán template Stack::Stack(const Stack &source) { top = Copy(source); } template void Stack::operator=(const Stack &source) { Clear(); //xóa liệu cũ stack top = Copy(source); //trỏ tới liệu } Phương thức khác template bool Stack::IsEmpty() const { return (top==nullptr); } template NodeType &Stack::Peek() const { return top ->item; } Thử nghiệm #include #include #include #include "Stack.cpp" #include "Node.cpp" using namespace std; void main(){ Stack sString, sStr; sString.Push("you !"); sString.Push("love"); sString.Push("I"); sStr = sString; while (!sStr.IsEmpty()) { cout

Ngày đăng: 09/08/2021, 17:43

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

  • Đang cập nhật ...

Tài liệu liên quan