Bài Lab Stack-Queue
#ifndef ELEMENT_H
#define ELEMENT_H
class Element
private:
int data;
Element* pointer;
public:
Element();
Element(int);
virtual ~Element();
void Setdata(int val) { data = val; }
int getdata() { return data; }
void Setpointer(Element* val) { pointer = val; }
Element* Getpointer() { return pointer; }
};
#endif // ELEMENT_H
File [Link]:
#include "Element.h"
Element::Element() : data(0), pointer(nullptr) {}
Element::Element(int data) : data(data), pointer(nullptr) {}
Element::~Element() {}
File LinkedList.h:
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include "Element.h"
class LinkedList
private:
Element* tail;
Element* head;
int nNum;
public:
LinkedList();
virtual ~LinkedList();
void InsertTail(Element*);
void DeleteTail();
void DeleteFirst();
bool IsEmpty() { return head == nullptr; }
Element* GetTail() { return tail; }
Element* GetHead() { return head; }
};
#endif // LINKEDLIST_H
File [Link]:
#include "LinkedList.h"
LinkedList::LinkedList() : tail(nullptr), head(nullptr), nNum(0) {}
LinkedList::~LinkedList()
Element* ptr;
while (head)
ptr = head;
head = head->Getpointer();
delete ptr;
void LinkedList::InsertTail(Element* e)
if (head == nullptr)
head = tail = e;
else
tail->Setpointer(e);
tail = e;
nNum++;
void LinkedList::DeleteTail()
if (head == nullptr)
return;
if (head->Getpointer() == nullptr)
delete head;
head = tail = nullptr;
}
else
Element* p = head;
while (p->Getpointer()->Getpointer() != nullptr)
p = p->Getpointer();
delete tail;
tail = p;
tail->Setpointer(nullptr);
nNum--;
void LinkedList::DeleteFirst()
if (head == nullptr)
return;
Element* p = head;
head = head->Getpointer();
delete p;
if (head == nullptr)
tail = nullptr;
nNum--;
File Stack.h:
#ifndef STACK_H
#define STACK_H
#include "LinkedList.h"
class Stack
private:
LinkedList linkedlist;
public:
Stack();
void PushStack(int);
int PopStack();
};
#endif // STACK_H
File [Link]:
#include "Stack.h"
#include <iostream>
Stack::Stack() {}
void Stack::PushStack(int x)
Element* e = new Element(x);
[Link](e);
int Stack::PopStack()
if ([Link]())
std::cout << "STACK RONG, KHONG LAY DUOC PHAN TU" << std::endl;
return -1; // Giá trị trả về khi stack rỗng
}
int value = [Link]()->getdata();
[Link]();
return value;
File Queue.h:
#ifndef QUEUE_H
#define QUEUE_H
#include "LinkedList.h"
class Queue
private:
LinkedList linkedlist;
public:
Queue();
void EnQueue(int);
int DeQueue();
};
#endif // QUEUE_H
File [Link]:
#include "Queue.h"
#include <iostream>
Queue::Queue() {}
void Queue::EnQueue(int x)
Element* e = new Element(x);
[Link](e);
}
int Queue::DeQueue()
if ([Link]())
std::cout << "QUEUE RONG, KHONG LAY DUOC PHAN TU" << std::endl;
return -1; // Giá trị trả về khi queue rỗng
int value = [Link]()->getdata();
[Link]();
return value;
File [Link]:
#include <iostream>
#include "Stack.h"
#include "Queue.h"
using namespace std;
int main()
Stack stack;
Queue queue;
int value;
// Thêm phần tử vào stack
for (int i = 0; i < 3; ++i)
cout << "Nhap gia tri cho stack: ";
cin >> value;
[Link](value);
}
// Lấy phần tử ra khỏi stack
for (int i = 0; i < 4; ++i)
int poppedValue = [Link]();
if (poppedValue != -1)
cout << "Gia tri lay ra khoi stack: " << poppedValue << endl;
// Thêm phần tử vào queue
for (int i = 0; i < 3; ++i)
cout << "Nhap gia tri cho queue: ";
cin >> value;
[Link](value);
// Lấy phần tử ra khỏi queue
for (int i = 0; i < 4; ++i)
int dequeuedValue = [Link]();
if (dequeuedValue != -1)
cout << "Gia tri lay ra khoi queue: " << dequeuedValue << endl;
// Chuyển số từ hệ cơ số 10 sang hệ cơ số 2 sử dụng Stack
cout << "Nhap mot so nguyen duong de chuyen doi sang he co so 2: ";
cin >> value;
Stack binaryStack;
while (value > 0)
{
int remainder = value % 2;
[Link](remainder);
value /= 2;
cout << "Gia tri trong he co so 2: ";
while (true)
int bit = [Link]();
if (bit == -1) // Stack rỗng
break;
cout << bit;
cout << endl;
return 0;