Список head, tail, size
#include <iostream>
using namespace std;
class Node
{
int _data;
Node* next;
public:
Node(){ }
Node(int d) {
_data = d;
next = nullptr;
}
void setNext(Node* n) {
next = n;
}
void setData(int val) {
_data = val;
}
int getData() {
return _data;
}
Node* getNext()
{
return next;
}
~Node(){ }
};
class List
{
Node* head;
Node* tail;
int size;
public:
List()
{
head = tail = nullptr;
size = 0;
}
void PushBack(int val) {
Node* tmp = new Node(val);
if (size == 0)
{
head = tail = tmp;
size = 1;
}
else {
tail->setNext(tmp);
tail = tmp;
size++;
}
}
int PopStart() {
int d = 0;
if (size>0)
{
if (size == 1) {
d = head->getData();
delete head;
head = nullptr;
tail = nullptr;
size = 0;
}
else
{
d = head->getData();
Node* tmp = head;
head = head->getNext();
delete tmp;
size--;
}
}
return d;
}
int PopBack() {
int d = 0;
if (size>0)
{
if (size == 1) {
d = head->getData();
delete head;
head = nullptr;
tail = nullptr;
size = 0;
}
else
{
d = tail->getData();
Node* prev = head;
Node* tmp = head;
Node* next = head;
while (next != nullptr) {
prev = tmp;
tmp = next;
next = next->getNext();
}
delete tmp;
tail = prev;
tail->setNext(nullptr);
size--;
}
}
return d;
}
void Show() {
Node*cur = head;
while (cur) {
cout << cur->getData() << " ";
cur = cur->getNext();
}
}
~List(){ }
};
int main() {
List A;
A.PushBack(3);
A.PushBack(4);
A.PushBack(5);
cout << "Queque (real):" << endl;
cout << A.PopStart() << endl;
cout << A.PopStart() << endl;
cout << A.PopStart() << endl;
// Знов, закидуємо значення у список
A.PushBack(3);
A.PushBack(4);
A.PushBack(5);
// Стек видаляє останнє значення що прийшло і виводить його на екран
cout << endl << "Stack (simulation):" << endl;
cout << A.PopBack() << endl;
cout << A.PopBack() << endl;
cout << A.PopBack() << endl;
system("pause");
return 0;
}
Queque (real):
3
4
5
Stack (simulation):
5
4
3