25a9dd19b78269f23ee787e147827064234617665b4811022ec6111aa9fd5ffe6628db4e77f7e38f3b



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



2cbfd368f5dc3f8650bbd58b36867c6464a5

잘돌아간다.... 헤헤헤...