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

Lab Stack-Queue

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

Lab Stack-Queue

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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