0% found this document useful (0 votes)
4 views

Lab Stack-Queue

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Lab Stack-Queue

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

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 Element.cpp:

#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 LinkedList.cpp:

#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 Stack.cpp:

#include "Stack.h"

#include <iostream>

Stack::Stack() {}

void Stack::PushStack(int x)

Element* e = new Element(x);

linkedlist.InsertTail(e);

int Stack::PopStack()

if (linkedlist.IsEmpty())

std::cout << "STACK RONG, KHONG LAY DUOC PHAN TU" << std::endl;

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

}
int value = linkedlist.GetTail()->getdata();

linkedlist.DeleteTail();

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 Queue.cpp:

#include "Queue.h"

#include <iostream>

Queue::Queue() {}

void Queue::EnQueue(int x)

Element* e = new Element(x);

linkedlist.InsertTail(e);

}
int Queue::DeQueue()

if (linkedlist.IsEmpty())

std::cout << "QUEUE RONG, KHONG LAY DUOC PHAN TU" << std::endl;

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

int value = linkedlist.GetHead()->getdata();

linkedlist.DeleteFirst();

return value;

File main.cpp:

#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;

stack.PushStack(value);
}

// Lấy phần tử ra khỏi stack

for (int i = 0; i < 4; ++i)

int poppedValue = stack.PopStack();

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;

queue.EnQueue(value);

// Lấy phần tử ra khỏi queue

for (int i = 0; i < 4; ++i)

int dequeuedValue = queue.DeQueue();

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;

binaryStack.PushStack(remainder);

value /= 2;

cout << "Gia tri trong he co so 2: ";

while (true)

int bit = binaryStack.PopStack();

if (bit == -1) // Stack rỗng

break;

cout << bit;

cout << endl;

return 0;

You might also like