You are on page 1of 6

stack

#include <iostream>

using namespace std;

struct Node {

int data;

Node* next;

};

class Stack {

private:

Node* top;

public:

Stack() : top(nullptr) {}

// Hàm kiểm tra stack có rỗng không

bool isEmpty() {

return top == nullptr;

// Hàm thêm một phần tử vào đỉnh stack

void push(int value) {

Node* newNode = new Node{value, top};

top = newNode;

// Hàm lấy và xóa phần tử ở đỉnh stack

int pop() {

if (isEmpty()) {

cout << "Error: Stack is empty\n";

return -1; // Giả sử giá trị trả về khi stack rỗng


}

int value = top->data;

Node* temp = top;

top = top->next;

delete temp;

return value;

// Hàm lấy giá trị ở đỉnh stack mà không xóa nó

int peek() {

if (isEmpty()) {

cout << "Error: Stack is empty\n";

return -1; // Giả sử giá trị trả về khi stack rỗng

return top->data;

// Hàm hiển thị toàn bộ stack

void display() {

Node* current = top;

while (current != nullptr) {

cout << current->data << " ";

current = current->next;

cout << "\n";

};

int main() {
Stack myStack;

myStack.push(5);

myStack.push(10);

myStack.push(15);

std::cout << "Top of the stack: " << myStack.peek() << "\n";

std::cout << "Stack elements: ";

myStack.display();

myStack.pop();

std::cout << "Top of the stack after pop: " << myStack.peek() << "\n";

std::cout << "Stack elements after pop: ";

myStack.display();

return 0;

Queue
#include <iostream>

struct Node {

int data;

Node* next;

};

class Queue {

private:

Node* front;

Node* rear;
public:

Queue() : front(nullptr), rear(nullptr) {}

// Hàm kiểm tra queue có rỗng không

bool isEmpty() {

return front == nullptr;

// Hàm thêm một phần tử vào cuối queue

void enqueue(int value) {

Node* newNode = new Node{value, nullptr};

if (isEmpty()) {

front = rear = newNode;

} else {

rear->next = newNode;

rear = newNode;

// Hàm lấy và xóa phần tử ở đầu queue

int dequeue() {

if (isEmpty()) {

std::cerr << "Error: Queue is empty\n";

return -1; // Giả sử giá trị trả về khi queue rỗng

int value = front->data;

Node* temp = front;

front = front->next;

delete temp;

if (front == nullptr) {
rear = nullptr;

return value;

// Hàm lấy giá trị ở đầu queue mà không xóa nó

int peek() {

if (isEmpty()) {

std::cerr << "Error: Queue is empty\n";

return -1; // Giả sử giá trị trả về khi queue rỗng

return front->data;

// Hàm hiển thị toàn bộ queue

void display() {

Node* current = front;

while (current != nullptr) {

std::cout << current->data << " ";

current = current->next;

std::cout << "\n";

};

int main() {

Queue myQueue;

myQueue.enqueue(5);

myQueue.enqueue(10);
myQueue.enqueue(15);

std::cout << "Front of the queue: " << myQueue.peek() << "\n";

std::cout << "Queue elements: ";

myQueue.display();

myQueue.dequeue();

std::cout << "Front of the queue after dequeue: " << myQueue.peek() << "\n";

std::cout << "Queue elements after dequeue: ";

myQueue.display();

return 0;

You might also like