#include <string.h>
#include <iostream>
class lnode{
public:
char *data;
lnode *next;
lnode() : data(nullptr), next(nullptr) {}
lnode(const char *str) : data(nullptr), next(nullptr) {
data = new char[strlen(str) + 1];
strcpy(data, str);
}
~lnode() {
delete[] data;
}
};
class Quene {
private:
int siz;
lnode *head;
lnode *tail;
auto __deqc() {
if (head == nullptr)
return -1;
lnode *newh = head->next;
delete head;
head = newh;
if (siz == 1)
tail = nullptr;
return --siz;
}
public:
Quene() : siz(0), head(nullptr), tail(nullptr) {}
auto enq(const char *str) {
if (head == nullptr) {
tail = head = new lnode(str);
return siz = 1;
}
lnode *newt = new lnode(str);
tail->next = newt;
tail = newt;
return ++siz;
}
auto deq() {
return __deqc();
}
auto deq(char *dest) {
if (head == nullptr)
return -1;
if (head->data != nullptr && dest != nullptr)
strcpy(dest, head->data);
return __deqc();
}
void revq() {
lnode *p, *next, *prev;
for (p = head, prev = nullptr; p != NULL; prev = p, p = next) {
next = p->next;
p->next = prev;
}
tail = head;
head = prev;
}
auto const size() {
return siz;
}
void const prtq() {
if (head != NULL) {
lnode *p;
std::cout << "(pop) << ";
for (p = head; p != nullptr; p = p->next)
std::cout << p->data << ' ';
std::cout << "<< (push)";
} else {
std::cout << "(empty)";
}
}
void clear() {
lnode *p, *next;
for (p = head; p != nullptr; p = next) {
next = p->next;
delete p;
}
head = tail = nullptr;
siz = 0;
}
~Quene() {
clear();
}
};
int main() {
Quene myqq;
char buf[256];
int tmp;
for (;;) {
std::cout << ">> ";
std::cin >> buf;
if (!strcmp(buf, "pop") && myqq.deq(buf) != -1) {
std::cout << "[pop] \"" << buf << "\"\n";
} else if (!strcmp(buf, "quit")) {
break;
} else if (!strcmp(buf, "clear")) {
myqq.clear();
} else if (!strcmp(buf, "reverse")) {
myqq.revq();
} else {
myqq.enq(buf);
}
if ((tmp = myqq.size()) == 0)
std::cout << "empty queue: ";
else
std::cout << tmp << " element(s) queued: ";
myqq.prtq();
std::cout << '\n';
}
}
잘돌아간다.... 헤헤헤...
좆고수 - dc App
Quene
미추따리;