From d332a8b67552adc92c5e429d83367895056bfb05 Mon Sep 17 00:00:00 2001 From: Mhrooz Date: Mon, 27 Nov 2023 21:28:16 +0100 Subject: [PATCH] simple list application --- 1670-231128-pass/main.cpp | 143 +++++++++++++++++++++++ {907-231127 => 907-231127-pass}/main.cpp | 0 2 files changed, 143 insertions(+) create mode 100644 1670-231128-pass/main.cpp rename {907-231127 => 907-231127-pass}/main.cpp (100%) diff --git a/1670-231128-pass/main.cpp b/1670-231128-pass/main.cpp new file mode 100644 index 0000000..fc52f88 --- /dev/null +++ b/1670-231128-pass/main.cpp @@ -0,0 +1,143 @@ +#include +using namespace std; + +class FrontMiddleBackQueue { +public: + struct node{ + node* pre; + node* nxt; + int val; + }; + + class li{ + public: + node * header; + node * tail; + int sum; + li(){ + header = new node(); + tail = new node(); + header -> nxt = tail; + tail->pre = header; + header -> val = -1; + tail -> val = -1; + sum = 0; + } + void add_node(node * previous, node * nxt, node * wait_insert){ + wait_insert -> pre = previous; + wait_insert -> nxt = nxt; + previous->nxt = wait_insert; + nxt->pre = wait_insert; + sum++; + } + void add_front(node * x){ + // x -> pre = header; + // x -> nxt = header->nxt; + // header->nxt->pre = x; + // header->nxt = x; + add_node(header,header->nxt,x); + } + + void add_back(node * x){ + // x -> nxt = tail; + // x -> pre = tail -> pre; + // tail -> pre -> nxt = x; + // tail -> pre = x; + add_node(tail->pre,tail,x); + } + + void add_middle(node *x){ + int cnt = sum / 2; + node * cur = header; + while(cnt){ + cur = cur->nxt; + cnt--; + } + add_node(cur,cur->nxt,x); + } + void traverse(){ + node * cur = header; + while(cur != tail){ + cur = cur->nxt; + cout<val<pre; + cout<val< sum || idx == 0) return -1; + int cnt = idx; + node * cur = header; + // cout<nxt; + cnt--; + } + cur -> pre -> nxt = cur -> nxt; + cur -> nxt -> pre = cur -> pre; + int val = cur->val; + delete(cur); + sum--; + return val; + } + }; + li *que; + FrontMiddleBackQueue() { + que = new li(); + } + + void pushFront(int val) { + node *tmp = new node(); + tmp->val = val; + que->add_front(tmp); + } + + void pushMiddle(int val) { + node * tmp = new node(); + tmp -> val = val; + que->add_middle(tmp); + } + + void pushBack(int val) { + node *tmp = new node(); + tmp -> val = val; + que -> add_back(tmp); + } + + int popFront() { + return que->del_node(1); + } + + int popMiddle() { + if(que->sum % 2 == 1) + return que->del_node((que->sum) / 2 + 1); + else + return que->del_node((que->sum) / 2); + } + + int popBack() { + return que->del_node(que->sum); + } +}; + +int main(){ + FrontMiddleBackQueue * q = new FrontMiddleBackQueue(); + q->pushFront(1); + q->pushBack(2); + q->pushMiddle(3); + q->pushMiddle(4); + // q->que->traverse(); + // q->que->retranverse(); + cout<popFront()<popMiddle()<popMiddle()<popBack()<popFront()<