💻연결리스트 기반 스택
#include<iostream>
#include<string>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int X) {
this->data = X;
this->next = NULL;
}
};
class Stack {
public:
Node* top;
int size;
Stack() {
top = NULL;
size = 0;
}
void push(int e) {
Node* v = new Node(e);
if (size == 0) {
top = v;
size++;
}
else {
v->next = top;
top = v;
size++;
}
}
int pop() {
if (size == 0) {
return -1;
}
else {
Node* temp = top;
top = temp->next;
size--;
return temp->data;
delete temp;
}
}
int Size() {
return size;
}
int empty() {
if (size == 0) {
return 1;
}
else {
return 0;
}
}
int Top() {
if (size == 0) {
return -1;
}
else {
return top->data;
}
}
};
int main() {
int N;
cin >> N;
Stack s;
for (int i = 0; i < N; i++) {
string menu;
cin >> menu;
if (menu == "push") {
int a;
cin >> a;
s.push(a);
}
else if (menu == "pop") {
cout << s.pop() << endl;
}
else if (menu == "size") {
cout << s.Size() << endl;
}
else if (menu == "empty") {
cout << s.empty() << endl;
}
else if (menu == "top") {
cout << s.Top() << endl;
}
}
}
💻연결리스트 기반 큐
#include<iostream>
#include<string>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int e) {
this->data = e;
this->next = NULL;
}
};
class Queue {
public:
int size;
Node* f;
Node* r;
Queue() {
f = r = NULL;
size = 0;
}
bool empty() {
return (size == 0);
}
void push(int X) {
Node* v = new Node(X);
if (empty()) {
f = r = v;
}
else {
r->next = v;
r = v;
}
size++;
}
void pop() {
if (empty()) {
cout << "-1" << endl;
}
else {
Node* temp = f;
f = temp->next;
size--;
int x = temp->data;
delete temp;
cout << x << endl;
}
}
int Size() {
return size;
}
int front() {
if (empty()) {
return -1;
}
else {
return f->data;
}
}
int back() {
if (empty()) {
return -1;
}
else {
return r->data;
}
}
};
int main() {
int N;
cin >> N;
Queue q;
for (int i = 0; i < N; i++) {
string m;
cin >> m;
if (m == "push") {
int a;
cin >> a;
q.push(a);
}
else if (m == "pop") {
q.pop();
}
else if (m == "size") {
cout << q.Size() << endl;
}
else if (m == "empty") {
cout << q.empty() << endl;
}
else if (m == "front") {
cout << q.front() << endl;
}
else if (m == "back") {
cout << q.back() << endl;
}
}
}