From 06731225c032185dfdea8c14de324addafa76a5e Mon Sep 17 00:00:00 2001 From: iridiumR Date: Sat, 23 Oct 2021 10:54:30 +0800 Subject: [PATCH] =?UTF-8?q?5=E5=A5=BD=E7=94=A8=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ex5/list.cpp | 41 +++++++++++++++++++++-------------------- ex5/list.h | 15 ++++++++++----- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/ex5/list.cpp b/ex5/list.cpp index 9faf6d6..5aaea57 100644 --- a/ex5/list.cpp +++ b/ex5/list.cpp @@ -43,7 +43,7 @@ Node List::succInsert(Node Old, int New) T->pred = Old; T->succ = Old->succ; Old->succ = T; - T->pred->succ = T; + T->succ->pred = T; _size++; return T; } @@ -85,7 +85,7 @@ Node List::succInsertN(Node Old, Node New) T->pred = Old; T->succ = Old->succ; Old->succ = T; - T->pred->succ = T; + T->succ->pred = T; _size++; return T; } @@ -144,25 +144,26 @@ void List::removeN(Node i) _size--; } +Node List::searchN(int value, int n, Node p) +{ + while (0 <= n--) + if (((p = p->pred)->data) <= value) + break; + return p; +} + void List::sort() { - int sorted = 0; - Node p; - for (int i = 0; i <= _size - 1 - sorted; i++) - for (int j = i; j <= _size - 1 - sorted; j++) - { - int max = 0; - Node maxN; + Node p=first(); + for (int r = 0; r < _size; r++) + { + succInsert(searchN(p->data,r,p),p->data); + p=p->succ; + removeN(p->pred); + } +} - p = find(j); - if (max < p->data) - { - max = p->data; - maxN = p; - } - - maxN->data = p->data; - p->data = max; - sorted++; - } +int List::valid(Node p) +{ + return p && (trailer != p) && (header != p); } \ No newline at end of file diff --git a/ex5/list.h b/ex5/list.h index 513bb3c..5db5ba1 100644 --- a/ex5/list.h +++ b/ex5/list.h @@ -17,6 +17,12 @@ private: int _size; protected: + Node firstInsertN(Node New); + Node lastInsertN(Node New); + Node succInsertN(Node old, Node ne); + Node predInsertN(Node old, Node ne); + void removeN(Node i); + Node searchN(int value,int n,Node p); public: int getSize() @@ -32,14 +38,13 @@ public: void lastInsert(int New); Node succInsert(Node Old, int New); Node predInsert(Node Old, int New); - Node firstInsertN(Node New); - Node lastInsertN(Node New); - Node succInsertN(Node old, Node ne); - Node predInsertN(Node old, Node ne); + int get(int i); Node find(int i); int remove(int i); - void removeN(Node i); + Node searchN(int value,int n); + int valid(Node p); + void sort();