From a75ab3c5a927354ea026e0d5f92394b76c999afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=B7=E5=BB=BA=E4=BC=9F?= Date: Tue, 22 Oct 2019 18:16:48 +0800 Subject: [PATCH] =?UTF-8?q?:bulb:=20=E6=A0=88=E5=92=8C=E9=98=9F=E5=88=97?= =?UTF-8?q?=E6=BA=90=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLion/CourseBook/0301_SqStack/CMakeLists.txt | 7 + CLion/CourseBook/0301_SqStack/SqStack-main.c | 94 +++++ CLion/CourseBook/0301_SqStack/SqStack.c | 174 +++++++++ CLion/CourseBook/0301_SqStack/SqStack.h | 94 +++++ .../CourseBook/0302_Conversion/CMakeLists.txt | 7 + .../0302_Conversion/Conversion-main.c | 11 + CLion/CourseBook/0302_Conversion/Conversion.c | 37 ++ CLion/CourseBook/0302_Conversion/Conversion.h | 20 ++ CLion/CourseBook/0302_Conversion/SqStack.c | 90 +++++ CLion/CourseBook/0302_Conversion/SqStack.h | 59 +++ CLion/CourseBook/0303_LineEdit/CMakeLists.txt | 7 + .../CourseBook/0303_LineEdit/LineEdit-main.c | 18 + CLion/CourseBook/0303_LineEdit/LineEdit.c | 71 ++++ CLion/CourseBook/0303_LineEdit/LineEdit.h | 33 ++ CLion/CourseBook/0303_LineEdit/SqStack.c | 128 +++++++ CLion/CourseBook/0303_LineEdit/SqStack.h | 69 ++++ CLion/CourseBook/0304_Maze/CMakeLists.txt | 7 + CLion/CourseBook/0304_Maze/Maze-main.c | 21 ++ CLion/CourseBook/0304_Maze/Maze.c | 298 +++++++++++++++ CLion/CourseBook/0304_Maze/Maze.h | 112 ++++++ CLion/CourseBook/0304_Maze/SqStack.c | 90 +++++ CLion/CourseBook/0304_Maze/SqStack.h | 69 ++++ .../CourseBook/0305_Expression/CMakeLists.txt | 7 + .../0305_Expression/Expression-main.c | 12 + CLion/CourseBook/0305_Expression/Expression.c | 139 +++++++ CLion/CourseBook/0305_Expression/Expression.h | 70 ++++ CLion/CourseBook/0305_Expression/SqStack.c | 111 ++++++ CLion/CourseBook/0305_Expression/SqStack.h | 69 ++++ CLion/CourseBook/0306_Hanoi/CMakeLists.txt | 7 + CLion/CourseBook/0306_Hanoi/Hanoi-main.c | 15 + CLion/CourseBook/0306_Hanoi/Hanoi.c | 133 +++++++ CLion/CourseBook/0306_Hanoi/Hanoi.h | 59 +++ .../CourseBook/0307_LinkQueue/CMakeLists.txt | 7 + .../0307_LinkQueue/LinkQueue-main.c | 94 +++++ CLion/CourseBook/0307_LinkQueue/LinkQueue.c | 204 +++++++++++ CLion/CourseBook/0307_LinkQueue/LinkQueue.h | 100 ++++++ CLion/CourseBook/0308_SqQueue/CMakeLists.txt | 7 + CLion/CourseBook/0308_SqQueue/SqQueue-main.c | 94 +++++ CLion/CourseBook/0308_SqQueue/SqQueue.c | 182 ++++++++++ CLion/CourseBook/0308_SqQueue/SqQueue.h | 98 +++++ .../0309_BankQueuing/BankQueuing-main.c | 10 + .../CourseBook/0309_BankQueuing/BankQueuing.c | 338 ++++++++++++++++++ .../CourseBook/0309_BankQueuing/BankQueuing.h | 121 +++++++ .../0309_BankQueuing/CMakeLists.txt | 7 + CLion/CourseBook/0309_BankQueuing/LinkList.c | 130 +++++++ CLion/CourseBook/0309_BankQueuing/LinkList.h | 83 +++++ CLion/CourseBook/0309_BankQueuing/LinkQueue.c | 138 +++++++ CLion/CourseBook/0309_BankQueuing/LinkQueue.h | 83 +++++ CLion/CourseBook/CMakeLists.txt | 10 + .../CourseBook/0301_SqStack/SqStack-main.cpp | 94 +++++ Dev-C++/CourseBook/0301_SqStack/SqStack.cpp | 174 +++++++++ Dev-C++/CourseBook/0301_SqStack/SqStack.dev | 82 +++++ Dev-C++/CourseBook/0301_SqStack/SqStack.h | 94 +++++ .../0302_Conversion/Conversion-main.cpp | 11 + .../CourseBook/0302_Conversion/Conversion.cpp | 37 ++ .../CourseBook/0302_Conversion/Conversion.dev | 102 ++++++ .../CourseBook/0302_Conversion/Conversion.h | 20 ++ .../CourseBook/0302_Conversion/SqStack.cpp | 90 +++++ Dev-C++/CourseBook/0302_Conversion/SqStack.h | 59 +++ .../0303_LineEdit/LineEdit-main.cpp | 18 + Dev-C++/CourseBook/0303_LineEdit/LineEdit.cpp | 71 ++++ Dev-C++/CourseBook/0303_LineEdit/LineEdit.dev | 102 ++++++ Dev-C++/CourseBook/0303_LineEdit/LineEdit.h | 33 ++ Dev-C++/CourseBook/0303_LineEdit/SqStack.cpp | 128 +++++++ Dev-C++/CourseBook/0303_LineEdit/SqStack.h | 69 ++++ Dev-C++/CourseBook/0304_Maze/Maze-main.cpp | 20 ++ Dev-C++/CourseBook/0304_Maze/Maze.cpp | 294 +++++++++++++++ Dev-C++/CourseBook/0304_Maze/Maze.dev | 102 ++++++ Dev-C++/CourseBook/0304_Maze/Maze.h | 112 ++++++ Dev-C++/CourseBook/0304_Maze/SqStack.cpp | 90 +++++ Dev-C++/CourseBook/0304_Maze/SqStack.h | 69 ++++ .../0305_Expression/Expression-main.cpp | 12 + .../CourseBook/0305_Expression/Expression.cpp | 139 +++++++ .../CourseBook/0305_Expression/Expression.dev | 102 ++++++ .../CourseBook/0305_Expression/Expression.h | 70 ++++ .../CourseBook/0305_Expression/SqStack.cpp | 111 ++++++ Dev-C++/CourseBook/0305_Expression/SqStack.h | 69 ++++ Dev-C++/CourseBook/0306_Hanoi/Hanoi-main.cpp | 15 + Dev-C++/CourseBook/0306_Hanoi/Hanoi.cpp | 133 +++++++ Dev-C++/CourseBook/0306_Hanoi/Hanoi.dev | 82 +++++ Dev-C++/CourseBook/0306_Hanoi/Hanoi.h | 59 +++ .../0307_LinkQueue/LinkQueue-main.cpp | 94 +++++ .../CourseBook/0307_LinkQueue/LinkQueue.cpp | 204 +++++++++++ .../CourseBook/0307_LinkQueue/LinkQueue.dev | 82 +++++ Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.h | 100 ++++++ .../CourseBook/0308_SqQueue/SqQueue-main.cpp | 94 +++++ Dev-C++/CourseBook/0308_SqQueue/SqQueue.cpp | 182 ++++++++++ Dev-C++/CourseBook/0308_SqQueue/SqQueue.dev | 82 +++++ Dev-C++/CourseBook/0308_SqQueue/SqQueue.h | 98 +++++ .../0309_BankQueuing/BankQueuing-main.cpp | 10 + .../0309_BankQueuing/BankQueuing.cpp | 338 ++++++++++++++++++ .../0309_BankQueuing/BankQueuing.dev | 122 +++++++ .../CourseBook/0309_BankQueuing/BankQueuing.h | 121 +++++++ .../CourseBook/0309_BankQueuing/LinkList.cpp | 130 +++++++ .../CourseBook/0309_BankQueuing/LinkList.h | 83 +++++ .../CourseBook/0309_BankQueuing/LinkQueue.cpp | 138 +++++++ .../CourseBook/0309_BankQueuing/LinkQueue.h | 83 +++++ README.md | 101 +++--- .../0301_SqStack/0301_SqStack.vcxproj | 76 ++++ .../0301_SqStack/0301_SqStack.vcxproj.filters | 30 ++ .../0301_SqStack/0301_SqStack.vcxproj.user | 3 + .../CourseBook/0301_SqStack/SqStack-main.c | 94 +++++ VisualC++/CourseBook/0301_SqStack/SqStack.c | 174 +++++++++ VisualC++/CourseBook/0301_SqStack/SqStack.h | 94 +++++ .../0302_Conversion/0302_Conversion.vcxproj | 78 ++++ .../0302_Conversion.vcxproj.filters | 36 ++ .../0302_Conversion.vcxproj.user | 3 + .../0302_Conversion/Conversion-main.c | 11 + .../CourseBook/0302_Conversion/Conversion.c | 37 ++ .../CourseBook/0302_Conversion/Conversion.h | 20 ++ .../CourseBook/0302_Conversion/SqStack.c | 90 +++++ .../CourseBook/0302_Conversion/SqStack.h | 59 +++ .../0303_LineEdit/0303_LineEdit.vcxproj | 78 ++++ .../0303_LineEdit.vcxproj.filters | 36 ++ .../0303_LineEdit/0303_LineEdit.vcxproj.user | 3 + .../CourseBook/0303_LineEdit/LineEdit-main.c | 18 + VisualC++/CourseBook/0303_LineEdit/LineEdit.c | 71 ++++ VisualC++/CourseBook/0303_LineEdit/LineEdit.h | 33 ++ VisualC++/CourseBook/0303_LineEdit/SqStack.c | 128 +++++++ VisualC++/CourseBook/0303_LineEdit/SqStack.h | 69 ++++ .../CourseBook/0304_Maze/0304_Maze.vcxproj | 78 ++++ .../0304_Maze/0304_Maze.vcxproj.filters | 36 ++ .../0304_Maze/0304_Maze.vcxproj.user | 3 + VisualC++/CourseBook/0304_Maze/Maze-main.c | 20 ++ VisualC++/CourseBook/0304_Maze/Maze.c | 294 +++++++++++++++ VisualC++/CourseBook/0304_Maze/Maze.h | 112 ++++++ VisualC++/CourseBook/0304_Maze/SqStack.c | 90 +++++ VisualC++/CourseBook/0304_Maze/SqStack.h | 69 ++++ .../0305_Expression/0305_Expression.vcxproj | 78 ++++ .../0305_Expression.vcxproj.filters | 36 ++ .../0305_Expression.vcxproj.user | 3 + .../0305_Expression/Expression-main.c | 12 + .../CourseBook/0305_Expression/Expression.c | 139 +++++++ .../CourseBook/0305_Expression/Expression.h | 70 ++++ .../CourseBook/0305_Expression/SqStack.c | 111 ++++++ .../CourseBook/0305_Expression/SqStack.h | 69 ++++ .../CourseBook/0306_Hanoi/0306_Hanoi.vcxproj | 76 ++++ .../0306_Hanoi/0306_Hanoi.vcxproj.filters | 30 ++ .../0306_Hanoi/0306_Hanoi.vcxproj.user | 3 + VisualC++/CourseBook/0306_Hanoi/Hanoi-main.c | 15 + VisualC++/CourseBook/0306_Hanoi/Hanoi.c | 133 +++++++ VisualC++/CourseBook/0306_Hanoi/Hanoi.h | 59 +++ .../0307_LinkQueue/0307_LinkQueue.vcxproj | 76 ++++ .../0307_LinkQueue.vcxproj.filters | 30 ++ .../0307_LinkQueue.vcxproj.user | 3 + .../0307_LinkQueue/LinkQueue-main.c | 94 +++++ .../CourseBook/0307_LinkQueue/LinkQueue.c | 204 +++++++++++ .../CourseBook/0307_LinkQueue/LinkQueue.h | 100 ++++++ .../0308_SqQueue/0308_SqQueue.vcxproj | 76 ++++ .../0308_SqQueue/0308_SqQueue.vcxproj.filters | 30 ++ .../0308_SqQueue/0308_SqQueue.vcxproj.user | 3 + .../CourseBook/0308_SqQueue/SqQueue-main.c | 94 +++++ VisualC++/CourseBook/0308_SqQueue/SqQueue.c | 182 ++++++++++ VisualC++/CourseBook/0308_SqQueue/SqQueue.h | 98 +++++ .../0309_BankQueuing/0309_BankQueuing.vcxproj | 80 +++++ .../0309_BankQueuing.vcxproj.filters | 42 +++ .../0309_BankQueuing.vcxproj.user | 3 + .../0309_BankQueuing/BankQueuing-main.c | 10 + .../CourseBook/0309_BankQueuing/BankQueuing.c | 338 ++++++++++++++++++ .../CourseBook/0309_BankQueuing/BankQueuing.h | 121 +++++++ .../CourseBook/0309_BankQueuing/LinkList.c | 130 +++++++ .../CourseBook/0309_BankQueuing/LinkList.h | 83 +++++ .../CourseBook/0309_BankQueuing/LinkQueue.c | 138 +++++++ .../CourseBook/0309_BankQueuing/LinkQueue.h | 83 +++++ VisualC++/CourseBook/CourseBook.sdf | Bin 2969600 -> 3493888 bytes VisualC++/CourseBook/CourseBook.sln | 54 +++ VisualC++/CourseBook/CourseBook.suo | Bin 50176 -> 74752 bytes VisualC++/README.md | 2 + VisualC++/image/VC06.png | Bin 0 -> 48953 bytes 169 files changed, 13373 insertions(+), 47 deletions(-) create mode 100644 CLion/CourseBook/0301_SqStack/CMakeLists.txt create mode 100644 CLion/CourseBook/0301_SqStack/SqStack-main.c create mode 100644 CLion/CourseBook/0301_SqStack/SqStack.c create mode 100644 CLion/CourseBook/0301_SqStack/SqStack.h create mode 100644 CLion/CourseBook/0302_Conversion/CMakeLists.txt create mode 100644 CLion/CourseBook/0302_Conversion/Conversion-main.c create mode 100644 CLion/CourseBook/0302_Conversion/Conversion.c create mode 100644 CLion/CourseBook/0302_Conversion/Conversion.h create mode 100644 CLion/CourseBook/0302_Conversion/SqStack.c create mode 100644 CLion/CourseBook/0302_Conversion/SqStack.h create mode 100644 CLion/CourseBook/0303_LineEdit/CMakeLists.txt create mode 100644 CLion/CourseBook/0303_LineEdit/LineEdit-main.c create mode 100644 CLion/CourseBook/0303_LineEdit/LineEdit.c create mode 100644 CLion/CourseBook/0303_LineEdit/LineEdit.h create mode 100644 CLion/CourseBook/0303_LineEdit/SqStack.c create mode 100644 CLion/CourseBook/0303_LineEdit/SqStack.h create mode 100644 CLion/CourseBook/0304_Maze/CMakeLists.txt create mode 100644 CLion/CourseBook/0304_Maze/Maze-main.c create mode 100644 CLion/CourseBook/0304_Maze/Maze.c create mode 100644 CLion/CourseBook/0304_Maze/Maze.h create mode 100644 CLion/CourseBook/0304_Maze/SqStack.c create mode 100644 CLion/CourseBook/0304_Maze/SqStack.h create mode 100644 CLion/CourseBook/0305_Expression/CMakeLists.txt create mode 100644 CLion/CourseBook/0305_Expression/Expression-main.c create mode 100644 CLion/CourseBook/0305_Expression/Expression.c create mode 100644 CLion/CourseBook/0305_Expression/Expression.h create mode 100644 CLion/CourseBook/0305_Expression/SqStack.c create mode 100644 CLion/CourseBook/0305_Expression/SqStack.h create mode 100644 CLion/CourseBook/0306_Hanoi/CMakeLists.txt create mode 100644 CLion/CourseBook/0306_Hanoi/Hanoi-main.c create mode 100644 CLion/CourseBook/0306_Hanoi/Hanoi.c create mode 100644 CLion/CourseBook/0306_Hanoi/Hanoi.h create mode 100644 CLion/CourseBook/0307_LinkQueue/CMakeLists.txt create mode 100644 CLion/CourseBook/0307_LinkQueue/LinkQueue-main.c create mode 100644 CLion/CourseBook/0307_LinkQueue/LinkQueue.c create mode 100644 CLion/CourseBook/0307_LinkQueue/LinkQueue.h create mode 100644 CLion/CourseBook/0308_SqQueue/CMakeLists.txt create mode 100644 CLion/CourseBook/0308_SqQueue/SqQueue-main.c create mode 100644 CLion/CourseBook/0308_SqQueue/SqQueue.c create mode 100644 CLion/CourseBook/0308_SqQueue/SqQueue.h create mode 100644 CLion/CourseBook/0309_BankQueuing/BankQueuing-main.c create mode 100644 CLion/CourseBook/0309_BankQueuing/BankQueuing.c create mode 100644 CLion/CourseBook/0309_BankQueuing/BankQueuing.h create mode 100644 CLion/CourseBook/0309_BankQueuing/CMakeLists.txt create mode 100644 CLion/CourseBook/0309_BankQueuing/LinkList.c create mode 100644 CLion/CourseBook/0309_BankQueuing/LinkList.h create mode 100644 CLion/CourseBook/0309_BankQueuing/LinkQueue.c create mode 100644 CLion/CourseBook/0309_BankQueuing/LinkQueue.h create mode 100644 Dev-C++/CourseBook/0301_SqStack/SqStack-main.cpp create mode 100644 Dev-C++/CourseBook/0301_SqStack/SqStack.cpp create mode 100644 Dev-C++/CourseBook/0301_SqStack/SqStack.dev create mode 100644 Dev-C++/CourseBook/0301_SqStack/SqStack.h create mode 100644 Dev-C++/CourseBook/0302_Conversion/Conversion-main.cpp create mode 100644 Dev-C++/CourseBook/0302_Conversion/Conversion.cpp create mode 100644 Dev-C++/CourseBook/0302_Conversion/Conversion.dev create mode 100644 Dev-C++/CourseBook/0302_Conversion/Conversion.h create mode 100644 Dev-C++/CourseBook/0302_Conversion/SqStack.cpp create mode 100644 Dev-C++/CourseBook/0302_Conversion/SqStack.h create mode 100644 Dev-C++/CourseBook/0303_LineEdit/LineEdit-main.cpp create mode 100644 Dev-C++/CourseBook/0303_LineEdit/LineEdit.cpp create mode 100644 Dev-C++/CourseBook/0303_LineEdit/LineEdit.dev create mode 100644 Dev-C++/CourseBook/0303_LineEdit/LineEdit.h create mode 100644 Dev-C++/CourseBook/0303_LineEdit/SqStack.cpp create mode 100644 Dev-C++/CourseBook/0303_LineEdit/SqStack.h create mode 100644 Dev-C++/CourseBook/0304_Maze/Maze-main.cpp create mode 100644 Dev-C++/CourseBook/0304_Maze/Maze.cpp create mode 100644 Dev-C++/CourseBook/0304_Maze/Maze.dev create mode 100644 Dev-C++/CourseBook/0304_Maze/Maze.h create mode 100644 Dev-C++/CourseBook/0304_Maze/SqStack.cpp create mode 100644 Dev-C++/CourseBook/0304_Maze/SqStack.h create mode 100644 Dev-C++/CourseBook/0305_Expression/Expression-main.cpp create mode 100644 Dev-C++/CourseBook/0305_Expression/Expression.cpp create mode 100644 Dev-C++/CourseBook/0305_Expression/Expression.dev create mode 100644 Dev-C++/CourseBook/0305_Expression/Expression.h create mode 100644 Dev-C++/CourseBook/0305_Expression/SqStack.cpp create mode 100644 Dev-C++/CourseBook/0305_Expression/SqStack.h create mode 100644 Dev-C++/CourseBook/0306_Hanoi/Hanoi-main.cpp create mode 100644 Dev-C++/CourseBook/0306_Hanoi/Hanoi.cpp create mode 100644 Dev-C++/CourseBook/0306_Hanoi/Hanoi.dev create mode 100644 Dev-C++/CourseBook/0306_Hanoi/Hanoi.h create mode 100644 Dev-C++/CourseBook/0307_LinkQueue/LinkQueue-main.cpp create mode 100644 Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.cpp create mode 100644 Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.dev create mode 100644 Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.h create mode 100644 Dev-C++/CourseBook/0308_SqQueue/SqQueue-main.cpp create mode 100644 Dev-C++/CourseBook/0308_SqQueue/SqQueue.cpp create mode 100644 Dev-C++/CourseBook/0308_SqQueue/SqQueue.dev create mode 100644 Dev-C++/CourseBook/0308_SqQueue/SqQueue.h create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/BankQueuing-main.cpp create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.cpp create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.dev create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.h create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/LinkList.cpp create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/LinkList.h create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.cpp create mode 100644 Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.h create mode 100644 VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj create mode 100644 VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.filters create mode 100644 VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.user create mode 100644 VisualC++/CourseBook/0301_SqStack/SqStack-main.c create mode 100644 VisualC++/CourseBook/0301_SqStack/SqStack.c create mode 100644 VisualC++/CourseBook/0301_SqStack/SqStack.h create mode 100644 VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj create mode 100644 VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.filters create mode 100644 VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.user create mode 100644 VisualC++/CourseBook/0302_Conversion/Conversion-main.c create mode 100644 VisualC++/CourseBook/0302_Conversion/Conversion.c create mode 100644 VisualC++/CourseBook/0302_Conversion/Conversion.h create mode 100644 VisualC++/CourseBook/0302_Conversion/SqStack.c create mode 100644 VisualC++/CourseBook/0302_Conversion/SqStack.h create mode 100644 VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj create mode 100644 VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.filters create mode 100644 VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.user create mode 100644 VisualC++/CourseBook/0303_LineEdit/LineEdit-main.c create mode 100644 VisualC++/CourseBook/0303_LineEdit/LineEdit.c create mode 100644 VisualC++/CourseBook/0303_LineEdit/LineEdit.h create mode 100644 VisualC++/CourseBook/0303_LineEdit/SqStack.c create mode 100644 VisualC++/CourseBook/0303_LineEdit/SqStack.h create mode 100644 VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj create mode 100644 VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.filters create mode 100644 VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.user create mode 100644 VisualC++/CourseBook/0304_Maze/Maze-main.c create mode 100644 VisualC++/CourseBook/0304_Maze/Maze.c create mode 100644 VisualC++/CourseBook/0304_Maze/Maze.h create mode 100644 VisualC++/CourseBook/0304_Maze/SqStack.c create mode 100644 VisualC++/CourseBook/0304_Maze/SqStack.h create mode 100644 VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj create mode 100644 VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.filters create mode 100644 VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.user create mode 100644 VisualC++/CourseBook/0305_Expression/Expression-main.c create mode 100644 VisualC++/CourseBook/0305_Expression/Expression.c create mode 100644 VisualC++/CourseBook/0305_Expression/Expression.h create mode 100644 VisualC++/CourseBook/0305_Expression/SqStack.c create mode 100644 VisualC++/CourseBook/0305_Expression/SqStack.h create mode 100644 VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj create mode 100644 VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.filters create mode 100644 VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.user create mode 100644 VisualC++/CourseBook/0306_Hanoi/Hanoi-main.c create mode 100644 VisualC++/CourseBook/0306_Hanoi/Hanoi.c create mode 100644 VisualC++/CourseBook/0306_Hanoi/Hanoi.h create mode 100644 VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj create mode 100644 VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.filters create mode 100644 VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.user create mode 100644 VisualC++/CourseBook/0307_LinkQueue/LinkQueue-main.c create mode 100644 VisualC++/CourseBook/0307_LinkQueue/LinkQueue.c create mode 100644 VisualC++/CourseBook/0307_LinkQueue/LinkQueue.h create mode 100644 VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj create mode 100644 VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.filters create mode 100644 VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.user create mode 100644 VisualC++/CourseBook/0308_SqQueue/SqQueue-main.c create mode 100644 VisualC++/CourseBook/0308_SqQueue/SqQueue.c create mode 100644 VisualC++/CourseBook/0308_SqQueue/SqQueue.h create mode 100644 VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj create mode 100644 VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.filters create mode 100644 VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.user create mode 100644 VisualC++/CourseBook/0309_BankQueuing/BankQueuing-main.c create mode 100644 VisualC++/CourseBook/0309_BankQueuing/BankQueuing.c create mode 100644 VisualC++/CourseBook/0309_BankQueuing/BankQueuing.h create mode 100644 VisualC++/CourseBook/0309_BankQueuing/LinkList.c create mode 100644 VisualC++/CourseBook/0309_BankQueuing/LinkList.h create mode 100644 VisualC++/CourseBook/0309_BankQueuing/LinkQueue.c create mode 100644 VisualC++/CourseBook/0309_BankQueuing/LinkQueue.h create mode 100644 VisualC++/image/VC06.png diff --git a/CLion/CourseBook/0301_SqStack/CMakeLists.txt b/CLion/CourseBook/0301_SqStack/CMakeLists.txt new file mode 100644 index 0000000..deb74df --- /dev/null +++ b/CLion/CourseBook/0301_SqStack/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(SqStack SqStack.h SqStack.c SqStack-main.c) +# 链接公共库 +target_link_libraries(SqStack Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0301_SqStack/SqStack-main.c b/CLion/CourseBook/0301_SqStack/SqStack-main.c new file mode 100644 index 0000000..5ce58a5 --- /dev/null +++ b/CLion/CourseBook/0301_SqStack/SqStack-main.c @@ -0,0 +1,94 @@ +#include +#include "SqStack.h" //**▲03 栈和队列**// + +// 测试函数,打印元素 +void PrintElem(SElemType e); + +int main(int argc, char** argv) { + SqStack S; + int i; + SElemType e; + + printf("████████ 函数 InitStack \n"); + { + printf("█ 初始化顺序栈 S ...\n"); + InitStack(&S); + } + PressEnterToContinue(); + + printf("████████ 函数 StackEmpty \n"); + { + StackEmpty(S) ? printf("█ S 为空!!\n") : printf("█ S 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 Push \n"); + { + for(i = 1; i <= 6; i++) { + Push(&S, 2 * i); + printf("█ 将 \"%2d\" 压入栈 S ...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf("████████ 函数 StackTraverse \n"); + { + printf("█ S 中的元素为:S = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 StackLength \n"); + { + i = StackLength(S); + printf("█ S 的长度为 %d \n", i); + } + PressEnterToContinue(); + + printf("████████ 函数 Pop \n"); + { + Pop(&S, &e); + printf("█ 栈顶元素 \"%d\" 出栈...\n", e); + printf("█ S 中的元素为:S = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 GetTop \n"); + { + GetTop(S, &e); + printf("█ 栈顶元素的值为 \"%d\" \n", e); + } + PressEnterToContinue(); + + printf("████████ 函数 ClearStack \n"); + { + printf("█ 清空 S 前:"); + StackEmpty(S) ? printf(" S 为空!!\n") : printf(" S 不为空!\n"); + + ClearStack(&S); + + printf("█ 清空 S 后:"); + StackEmpty(S) ? printf(" S 为空!!\n") : printf(" S 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 DestroyStack \n"); + { + printf("█ 销毁 S 前:"); + S.base != NULL && S.top != NULL ? printf(" S 存在!\n") : printf(" S 不存在!!\n"); + + DestroyStack(&S); + + printf("█ 销毁 S 后:"); + S.base != NULL && S.top != NULL ? printf(" S 存在!\n") : printf(" S 不存在!!\n"); + } + PressEnterToContinue(); + + return 0; +} + +// 测试函数,打印元素 +void PrintElem(SElemType e) { + printf("%d ", e); +} diff --git a/CLion/CourseBook/0301_SqStack/SqStack.c b/CLion/CourseBook/0301_SqStack/SqStack.c new file mode 100644 index 0000000..626ffae --- /dev/null +++ b/CLion/CourseBook/0301_SqStack/SqStack.c @@ -0,0 +1,174 @@ +/*========================= + * 栈的顺序存储结构(顺序栈) + ==========================*/ + +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * 销毁(结构) + * + * 释放顺序栈所占内存。 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * 置空(内容) + * + * 只是清理顺序栈中存储的数据,不释放顺序栈所占内存。 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 计数 + * + * 返回顺序栈包含的有效元素的数量。 + */ +int StackLength(SqStack S) { + if(S.base == NULL) { + return 0; + } + + return (int) (S.top - S.base); +} + +/* + * 取值 + * + * 返回栈顶元素,并用e接收。 + */ +Status GetTop(SqStack S, SElemType* e) { + if(S.base == NULL || S.top == S.base) { + return 0; + } + + // 不会改变栈中元素 + *e = *(S.top - 1); + + return OK; +} + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // 栈满时,追加存储空间 + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 存储分配失败 + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // 进栈先赋值,栈顶指针再自增 + *(S->top++) = e; + + return OK; +} + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // 出栈栈顶指针先递减,再赋值 + *e = *(--(*S).top); + + return OK; +} + +/* + * 遍历 + * + * 用visit函数访问顺序栈S + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/CLion/CourseBook/0301_SqStack/SqStack.h b/CLion/CourseBook/0301_SqStack/SqStack.h new file mode 100644 index 0000000..bb5aaa4 --- /dev/null +++ b/CLion/CourseBook/0301_SqStack/SqStack.h @@ -0,0 +1,94 @@ +/*========================= + * 栈的顺序存储结构(顺序栈) + ==========================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define STACK_INIT_SIZE 100 // 顺序栈存储空间的初始分配量 +#define STACKINCREMENT 10 // 顺序栈存储空间的分配增量 + +/* 顺序栈元素类型定义 */ +typedef int SElemType; + +// 顺序栈元素结构 +typedef struct { + SElemType* base; // 栈底指针 + SElemType* top; // 栈顶指针 + int stacksize; // 当前已分配的存储空间,以元素为单位 +} SqStack; + + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S); + +/* + * 销毁(结构) + * + * 释放顺序栈所占内存。 + */ +Status DestroyStack(SqStack* S); + +/* + * 置空(内容) + * + * 只是清理顺序栈中存储的数据,不释放顺序栈所占内存。 + */ +Status ClearStack(SqStack* S); + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S); + +/* + * 计数 + * + * 返回顺序栈包含的有效元素的数量。 + */ +int StackLength(SqStack S); + +/* + * 取值 + * + * 返回栈顶元素,并用e接收。 + */ +Status GetTop(SqStack S, SElemType* e); + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e); + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * 遍历 + * + * 用visit函数访问顺序栈S + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/CLion/CourseBook/0302_Conversion/CMakeLists.txt b/CLion/CourseBook/0302_Conversion/CMakeLists.txt new file mode 100644 index 0000000..5b8be02 --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(Conversion SqStack.h SqStack.c Conversion.h Conversion.c Conversion-main.c) +# 链接公共库 +target_link_libraries(Conversion Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0302_Conversion/Conversion-main.c b/CLion/CourseBook/0302_Conversion/Conversion-main.c new file mode 100644 index 0000000..a198e3d --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/Conversion-main.c @@ -0,0 +1,11 @@ +#include "Conversion.h" //**▲03 栈和队列**// + +int main(int argc, char** argv) { + int i = 342391; + + printf("将十进制数转换为八进制数...\n"); + + conversion(i); + + return 0; +} diff --git a/CLion/CourseBook/0302_Conversion/Conversion.c b/CLion/CourseBook/0302_Conversion/Conversion.c new file mode 100644 index 0000000..a3239f4 --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/Conversion.c @@ -0,0 +1,37 @@ +/*============== + * 进制转换 + * + * 包含算法: 3.1 + ===============*/ + +#include "Conversion.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.1 ████████ + * + * 进制转换:将指定的非负十进制整数,转换为八进制后输出。 + * + *【注】 + * 教材使用的是控制台输入,这里为了便于测试,直接改为从形参接收参数 + */ +void conversion(int i) { + SqStack S; + SElemType e; + + InitStack(&S); + + // 八进制数前面加0 + printf("十进制数 %d 转换为八进制数后为:0", i); + + while(i!=0) { + Push(&S, i % 8); // 进栈时从低位到高位 + i = i / 8; + } + + while(StackEmpty(S)==FALSE) { + Pop(&S, &e); // 出栈时从高位到低位 + printf("%d", e); + } + + printf("\n"); +} diff --git a/CLion/CourseBook/0302_Conversion/Conversion.h b/CLion/CourseBook/0302_Conversion/Conversion.h new file mode 100644 index 0000000..24e4abb --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/Conversion.h @@ -0,0 +1,20 @@ +/*============== + * 进制转换 + * + * 包含算法: 3.1 + ===============*/ + +#ifndef CONVERSION_H +#define CONVERSION_H + +#include +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.1 ████████ + * + * 进制转换:将指定的非负十进制整数,转换为八进制后输出。 + */ +void conversion(int i); + +#endif diff --git a/CLion/CourseBook/0302_Conversion/SqStack.c b/CLion/CourseBook/0302_Conversion/SqStack.c new file mode 100644 index 0000000..300e20e --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/SqStack.c @@ -0,0 +1,90 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // 栈满时,追加存储空间 + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 存储分配失败 + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // 进栈先赋值,栈顶指针再自增 + *(S->top++) = e; + + return OK; +} + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // 出栈栈顶指针先递减,再赋值 + *e = *(--(*S).top); + + return OK; +} diff --git a/CLion/CourseBook/0302_Conversion/SqStack.h b/CLion/CourseBook/0302_Conversion/SqStack.h new file mode 100644 index 0000000..e697e51 --- /dev/null +++ b/CLion/CourseBook/0302_Conversion/SqStack.h @@ -0,0 +1,59 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define STACK_INIT_SIZE 100 // 顺序栈存储空间的初始分配量 +#define STACKINCREMENT 10 // 顺序栈存储空间的分配增量 + +/* 顺序栈元素类型定义 */ +typedef int SElemType; + +// 顺序栈元素结构 +typedef struct { + SElemType* base; // 栈底指针 + SElemType* top; // 栈顶指针 + int stacksize; // 当前已分配的存储空间,以元素为单位 +} SqStack; + + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S); + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S); + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e); + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/CLion/CourseBook/0303_LineEdit/CMakeLists.txt b/CLion/CourseBook/0303_LineEdit/CMakeLists.txt new file mode 100644 index 0000000..5e058d8 --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(LineEdit SqStack.h SqStack.c LineEdit.h LineEdit.c LineEdit-main.c) +# 链接公共库 +target_link_libraries(LineEdit Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0303_LineEdit/LineEdit-main.c b/CLion/CourseBook/0303_LineEdit/LineEdit-main.c new file mode 100644 index 0000000..c2926b0 --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/LineEdit-main.c @@ -0,0 +1,18 @@ +#include +#include "LineEdit.h" //**▲03 栈和队列**// + +int main(int argc, char* argv[]) { + char* buf = "whli##ilr#e(s#*s)\noutcha@ putchar(*s=#++);"; //需要录入的内容 + + printf("作为示范,用户输入的文本内容为:\n"); + printf("%s\n\n", buf); + + printf("进入行编辑程序...\n\n"); + + printf("特殊符号:'#' 代表删除上一元素 '@' 代表删除当前输入行\n"); + printf(" '\\n'代表此行输入无误 '\\0'代表输入结束\n"); + printf("最终存储的内容为:\n"); + LineEdit(buf); + + return 0; +} diff --git a/CLion/CourseBook/0303_LineEdit/LineEdit.c b/CLion/CourseBook/0303_LineEdit/LineEdit.c new file mode 100644 index 0000000..69443e7 --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/LineEdit.c @@ -0,0 +1,71 @@ +/*============== + * 行编辑程序 + * + * 包含算法: 3.2 + ===============*/ + +#include "LineEdit.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.2 ████████ + * + * 行编辑程序,模拟编辑文本时的退格与清空行的操作。 + * + *【注】 + * 教材使用的是控制台输入,这里为了便于测试,直接改为从形参接收参数 + */ +void LineEdit(const char buffer[]) { + SqStack S; //接收输入的字符 + SElemType e; + int i; + char ch; + + // 初始化栈 + InitStack(&S); + + i = 0; + ch = buffer[i++]; + + // 如果未达文本末尾 + while(ch != EOF) { + // 如果未达文本末尾,且本行未结束(未遇到换行) + while(ch != EOF && ch != '\n') { + switch(ch) { + case '#': + Pop(&S, &e); // 遇到'#'表示删除一个字符 + break; + case '@': + ClearStack(&S); // 遇到'@'表示清空当前行 + break; + default : + Push(&S, ch); // 有效字符入栈 + } + + // 识别下一个字符 + ch = buffer[i++]; + } + + // 清空之前输出当前栈的内容,此处教材上没有 + StackTraverse(S, Print); + + // 清空改行的缓冲区 + ClearStack(&S); + + // 如果未到文本末尾,说明遇到了'\n',即该行结束了 + if(ch != EOF) { + // 进入下一行 + ch = buffer[i++]; + } + } + + // 已经到了文本末尾,输出目前栈中的元素,此处教材上没有 + StackTraverse(S, Print); + + // 销毁栈 + DestroyStack(&S); +} + +// 测试函数,打印元素 +void Print(SElemType e) { + printf("%c", e); +} diff --git a/CLion/CourseBook/0303_LineEdit/LineEdit.h b/CLion/CourseBook/0303_LineEdit/LineEdit.h new file mode 100644 index 0000000..1b9a0ae --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/LineEdit.h @@ -0,0 +1,33 @@ +/*============== + * 行编辑程序 + * + * 包含算法: 3.2 + ===============*/ + +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include +#include "SqStack.h" //**▲03 栈和队列**// +#include "LineEdit.h" + +// 模拟文件中的文本结束标记,需要覆盖已有的定义 +#ifdef EOF +#undef EOF +#define EOF '\0' +#endif + +/* + * ████████ 算法3.2 ████████ + * + * 行编辑程序,模拟编辑文本时的退格与清空行的操作。 + * + *【注】 + * 教材使用的是控制台输入,这里为了便于测试,直接改为从形参接收参数 + */ +void LineEdit(const char buffer[]); + +// 测试函数,打印元素 +void Print(SElemType e); + +#endif diff --git a/CLion/CourseBook/0303_LineEdit/SqStack.c b/CLion/CourseBook/0303_LineEdit/SqStack.c new file mode 100644 index 0000000..691e49c --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/SqStack.c @@ -0,0 +1,128 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * 销毁(结构) + * + * 释放顺序栈所占内存。 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * 置空(内容) + * + * 只是清理顺序栈中存储的数据,不释放顺序栈所占内存。 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // 栈满时,追加存储空间 + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 存储分配失败 + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // 进栈先赋值,栈顶指针再自增 + *(S->top++) = e; + + return OK; +} + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // 出栈栈顶指针先递减,再赋值 + *e = *(--(*S).top); + + return OK; +} + +/* + * 遍历 + * + * 用visit函数访问顺序栈S + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/CLion/CourseBook/0303_LineEdit/SqStack.h b/CLion/CourseBook/0303_LineEdit/SqStack.h new file mode 100644 index 0000000..3f00fc1 --- /dev/null +++ b/CLion/CourseBook/0303_LineEdit/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define STACK_INIT_SIZE 100 // 顺序栈存储空间的初始分配量 +#define STACKINCREMENT 10 // 顺序栈存储空间的分配增量 + +/* 顺序栈元素类型定义 */ +typedef int SElemType; + +// 顺序栈元素结构 +typedef struct { + SElemType* base; // 栈底指针 + SElemType* top; // 栈顶指针 + int stacksize; // 当前已分配的存储空间,以元素为单位 +} SqStack; + + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S); + +/* + * 销毁(结构) + * + * 释放顺序栈所占内存。 + */ +Status DestroyStack(SqStack* S); + +/* + * 置空(内容) + * + * 只是清理顺序栈中存储的数据,不释放顺序栈所占内存。 + */ +Status ClearStack(SqStack* S); + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e); + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * 遍历 + * + * 用visit函数访问顺序栈S + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/CLion/CourseBook/0304_Maze/CMakeLists.txt b/CLion/CourseBook/0304_Maze/CMakeLists.txt new file mode 100644 index 0000000..c21061f --- /dev/null +++ b/CLion/CourseBook/0304_Maze/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(Maze SqStack.h SqStack.c Maze.h Maze.c Maze-main.c) +# 链接公共库 +target_link_libraries(Maze Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0304_Maze/Maze-main.c b/CLion/CourseBook/0304_Maze/Maze-main.c new file mode 100644 index 0000000..d77c7fc --- /dev/null +++ b/CLion/CourseBook/0304_Maze/Maze-main.c @@ -0,0 +1,21 @@ +#include "Maze.h" //**▲03 栈和队列**// + +int main(int argc, char* argv[]) { + MazeType maze; + PosType start, end; + char n, Re = 'Y'; + + while(Re == 'Y' || Re == 'y') { + InitMaze(maze, &start, &end); // 初始化迷宫,包括出入口 + + MazePath(maze, start, end); // 迷宫寻路 + + printf("重置?(Y/N):"); + scanf("%c%c", &Re, &n); + + printf("\n"); + } + + return 0; +} + diff --git a/CLion/CourseBook/0304_Maze/Maze.c b/CLion/CourseBook/0304_Maze/Maze.c new file mode 100644 index 0000000..90b89a6 --- /dev/null +++ b/CLion/CourseBook/0304_Maze/Maze.c @@ -0,0 +1,298 @@ +/*============== + * 迷宫寻路程序 + * + * 包含算法: 3.3 + ===============*/ + +#ifndef MAZE_C +#define MAZE_C + +#include "Maze.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.3 ████████ + * + * 迷宫寻路 + * + * 使用穷举法,找到一条可行通路即返回 + */ +Status MazePath(MazeType maze, PosType start, PosType end) { + SqStack S; // 存储探索过的通道块 + SElemType e; // e存储当前通道块信息 + PosType curPos; // 当前位置 + int curStep; // 当前通道块序号 + + // 初始化轨迹栈 + InitStack(&S); + + curPos = start; // 设定当前位置为"出口位置" + curStep = 1; // 探索第一步 + + do { + // 如果当前位置可通过(要求改位置是从未曾探索的通道块) + if(Pass(maze, curPos)) { + // 留下初始足迹,即留下向东访问的标记 + FootPrint(maze, curPos); + + // 构造一个通道块信息并返回 + e = Construct(curStep, curPos, East); + + // 加入路径 + Push(&S, e); + + // 如果到达终点 + if(Equals(curPos, end) == TRUE) { + printf("\n寻路成功!!\n\n"); + return TRUE; + } + + // 获取下一个应当探索的位置,即当前位置的东邻 + curPos = NextPos(curPos, East); + + // 探索下一步 + curStep++; + + // 如果当前位置已经探索过了,则考虑修改探索方向 + } else { + // 如果栈不为空(存在探索的必要) + if(!StackEmpty(S)) { + // 回退到上一个位置 + Pop(&S, &e); + + // 如果待探索位置的4个方向都探索过,则需要做标记 + while(e.di == North && !StackEmpty(S)) { + // 留下"死胡同"标记,即从该位置出发的路径都没有通路 + MarkPrint(maze, e.seat, Impasse); + + // 继续回退 + Pop(&S, &e); + } + + // 如果待探索位置还有剩余可探索的方向 + if(e.di < North) { + // 改变探索方向,按东南西北的方向轮询 + ++e.di; + + // 在迷宫中留下访问标记,用来观察迷宫状态(教材中没有该步骤) + MarkPrint(maze, e.seat, e.di); + + // 重新将该位置加入到路径中 + Push(&S, e); + + // 获取下一个应当探索的位置 + curPos = NextPos(e.seat, e.di); + } + } + } + + // 栈不为空,意味着还有探索的必要 + } while(!StackEmpty(S)); + + printf("\n寻路失败!!\n\n"); + + return FALSE; +} + +/* + * 初始化一个规模为N×N迷宫 + * start和end分别为迷宫的入口坐标和出口坐标 + * + *【注】 + * 教材中无此操作,但该操作是必须存在的 + */ +void InitMaze(MazeType maze, PosType* start, PosType* end) { + int i, j, tmp; + + srand((unsigned) time(NULL)); // 用系统时间做随机数种子 + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + + // 在迷宫最外层生成外墙 + if(i == 0 || j == 0 || i == M - 1 || j == N - 1) { + maze[i][j] = Wall; + + // 迷宫内部的物件 + } else { + tmp = rand() % X; // 生成随机数[0, X-1]填充迷宫 + + if(tmp == 0) { + // 1/X的概率生成障碍 + maze[i][j] = Obstacle; + } else { + // 其它地方作为可遍历的通路 + maze[i][j] = Way; + } + } + } + } + + // 迷宫入口坐标 + (*start).x = 1; + (*start).y = 0; + + // 迷宫出口坐标 + (*end).x = M - 2; + (*end).y = N - 1; + + // 开放入口和出口 + maze[1][0] = maze[M - 2][N - 1] = Way; + + // 为了提高寻路成功率,将入口处和出口处临近的结点设为通路(非必须操作) + maze[1][1] = maze[M - 2][N - 2] = Way; + + // 显示迷宫的初始状态 + PaintMaze(maze); +} + +/* + * 判断当前位置是否可通过:要求该位置是从未曾探索的通道块 + * + *【注】 + * 可理解为判断当前位置是否为首次探索 + */ +Status Pass(MazeType maze, PosType seat) { + int x = seat.x; + int y = seat.y; + + // 首先检查是否越界,如果是越界了,当前位置肯定无法通过 + if(x < 0 || y < 0 || x > M - 1 || y > N - 1) { + return FALSE; //越界 + } + + // 要求该位置必须是从未曾探索的通道块 + if(maze[x][y] != Way) { + return FALSE; + } + + return TRUE; +} + +/* + * 获取下一个应当探索的位置 + * di指示当前所处位置的探索方向,包括East, South, West, North + */ +PosType NextPos(PosType seat, int di) { + PosType tmp = seat; + + switch(di) { + case East: + tmp.y++; //向东 + break; + case South: + tmp.x++; //向南 + break; + case West: + tmp.y--; //向西 + break; + case North: + tmp.x--; //向北 + break; + } + + return tmp; +} + +/* + * 留下初始访问足迹 + * + * 初始访问足迹即向东访问 + */ +void FootPrint(MazeType maze, PosType seat) { + //初始设置向东探索 + MarkPrint(maze, seat, East); +} + +/* + * 在迷宫的seat处留下mark标记 + * + *【注】 + * 该函数与教材上的函数有区别 + * 教材上只是用此函数留下"不可探索"的标记 + * 而此处的函数改进为可以留下任意标记,包括探索方向的标记 + */ +void MarkPrint(MazeType maze, PosType seat, int mark) { + int x = seat.x; + int y = seat.y; + + maze[x][y] = mark; //留下不能通过的标记 + + // 绘制迷宫 + PaintMaze(maze); +} + +/* + * 构造一个通道块信息并返回 + * + *【注】 + * 教材中有此操作,但无此函数 + */ +SElemType Construct(int ord, PosType seat, int di) { + SElemType e; + + e.ord = ord; + e.seat = seat; + e.di = di; + + return e; +} + +/* + * 判断两个坐标是否相等 + * + *【注】 + * 教材中有此操作,但无此函数 + * 因为这里需要比较两个结构体,所以不能直接用"=="符号 + */ +Status Equals(PosType seat1, PosType seat2) { + if(seat1.x == seat2.x && seat1.y == seat2.y) { + return TRUE; + } else { + return ERROR; + } +} + +/* + * 绘制迷宫 + * 以图形的方式呈现迷宫当前的状态 + * + *【注】 + * 1.教材中无此操作,此处增加该操作的目的是观察寻路过程的每一步 + * 2.该实现适用于CLion的控制台 + */ +void PaintMaze(MazeType maze) { + int i, j; + + Wait(SleepTime); // 暂停一下 + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + if(maze[i][j] == Wall) { // 外墙 + printf("*"); + } else if(maze[i][j] == Obstacle) { // 迷宫内部的障碍 + printf("●"); + } else if(maze[i][j] == East) { // 正在朝东探索 + printf("▷"); + } else if(maze[i][j] == South) { // 正在朝南探索 + printf("▽"); + } else if(maze[i][j] == West) { // 正在朝西探索 + printf("◁"); + } else if(maze[i][j] == North) { // 正在朝北探索 + printf("△"); + } else if(maze[i][j] == Impasse) { // 死胡同,即四个方向都探索过,但无法通过的位置 + printf("x"); + } else { // 还未探索过的路径结点 + printf(" "); + } + + if(j != 0 && j % (N - 1) == 0) { // 每隔N个结点换行 + printf("\n"); + } + } + } + + printf("\n"); +} + +#endif + diff --git a/CLion/CourseBook/0304_Maze/Maze.h b/CLion/CourseBook/0304_Maze/Maze.h new file mode 100644 index 0000000..00cf757 --- /dev/null +++ b/CLion/CourseBook/0304_Maze/Maze.h @@ -0,0 +1,112 @@ +/*============== + * 迷宫寻路程序 + * + * 包含算法: 3.3 + ===============*/ + +#ifndef MAZE_H +#define MAZE_H + +#include +#include // 提供system、rand、srand原型 +#include // 提供time原型 +#include "Status.h" //**▲01 绪论**// +#include "SqStack.h" //**▲03 栈和队列**// + +/* 宏定义 */ +#define M 15 // 迷宫的行数 +#define N 30 // 迷宫的列数 + +#define X 4 // X指示迷宫障碍出现的概率。例如,X=4,意味着遍历迷宫时遇到障碍的概率是1/4=25% + +#define SleepTime 3 //SleepTime代表打印地图时的时间间隔 + +/* 迷宫类型定义 */ +typedef enum { + Wall, // 外墙 + Obstacle, // 迷宫内部的障碍 + Way, // 通路 + Impasse, // “死胡同” + East, South, West, North // 当前探索方向:东南西北 +} MazeNode; + +typedef int MazeType[M][N]; // 迷宫类型 + + +/* + * ████████ 算法3.3 ████████ + * + * 迷宫寻路 + * + * 使用穷举法,找到一条可行通路即返回 + */ +Status MazePath(MazeType maze, PosType start, PosType end); + +/* + * 初始化一个规模为N×N迷宫 + * start和end分别为迷宫的入口坐标和出口坐标 + * + *【注】 + * 教材中无此操作,但该操作是必须存在的 + */ +void InitMaze(MazeType maze, PosType* start, PosType* end); + +/* + * 判断当前位置是否可通过:要求该位置是从未曾探索的通道块 + * + *【注】 + * 可理解为判断当前位置是否为首次探索 + */ +Status Pass(MazeType maze, PosType seat); + +/* + * 获取下一个应当探索的位置 + * di指示当前所处位置的探索方向,包括East, South, West, North + */ +PosType NextPos(PosType seat, int di); + +/* + * 留下初始访问足迹 + * + * 初始访问足迹即向东访问 + */ +void FootPrint(MazeType maze, PosType seat); + +/* + * 在迷宫的seat处留下mark标记 + * + *【注】 + * 该函数与教材上的函数有区别 + * 教材上只是用此函数留下"不可探索"的标记 + * 而此处的函数改进为可以留下任意标记,包括探索方向的标记 + */ +void MarkPrint(MazeType maze, PosType seat, int mark); + +/* + * 构造一个通道块信息并返回 + * + *【注】 + * 教材中有此操作,但无此函数 + */ +SElemType Construct(int ord, PosType seat, int di); + +/* + * 判断两个坐标是否相等 + * + *【注】 + * 教材中有此操作,但无此函数 + * 因为这里需要比较两个结构体,所以不能直接用"=="符号 + */ +Status Equals(PosType a, PosType b); + +/* + * 绘制迷宫 + * 以图形的方式呈现迷宫当前的状态 + * + *【注】 + * 教材中无此操作 + * 此处增加该操作的目的是观察寻路过程的每一步 + */ +void PaintMaze(MazeType maze); + +#endif diff --git a/CLion/CourseBook/0304_Maze/SqStack.c b/CLion/CourseBook/0304_Maze/SqStack.c new file mode 100644 index 0000000..300e20e --- /dev/null +++ b/CLion/CourseBook/0304_Maze/SqStack.c @@ -0,0 +1,90 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // 栈满时,追加存储空间 + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 存储分配失败 + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // 进栈先赋值,栈顶指针再自增 + *(S->top++) = e; + + return OK; +} + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // 出栈栈顶指针先递减,再赋值 + *e = *(--(*S).top); + + return OK; +} diff --git a/CLion/CourseBook/0304_Maze/SqStack.h b/CLion/CourseBook/0304_Maze/SqStack.h new file mode 100644 index 0000000..43ec0a9 --- /dev/null +++ b/CLion/CourseBook/0304_Maze/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define STACK_INIT_SIZE 100 // 顺序栈存储空间的初始分配量 +#define STACKINCREMENT 10 // 顺序栈存储空间的分配增量 + +// 迷宫通道块的坐标 +typedef struct { + int x; // 通道块的横、纵坐标定义 + int y; +} PosType; + +/* 通道块信息,用于迷宫算法 */ +typedef struct { + int ord; // 通道块的“序号” + PosType seat; // 通道块的“坐标位置” + int di; // 下一个应当访问的“方向” +} SElemType; + +// 顺序栈元素结构 +typedef struct { + SElemType* base; // 栈底指针 + SElemType* top; // 栈顶指针 + int stacksize; // 当前已分配的存储空间,以元素为单位 +} SqStack; + + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S); + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S); + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e); + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/CLion/CourseBook/0305_Expression/CMakeLists.txt b/CLion/CourseBook/0305_Expression/CMakeLists.txt new file mode 100644 index 0000000..bdfb2f4 --- /dev/null +++ b/CLion/CourseBook/0305_Expression/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(Expression SqStack.h SqStack.c Expression.h Expression.c Expression-main.c) +# 链接公共库 +target_link_libraries(Expression Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0305_Expression/Expression-main.c b/CLion/CourseBook/0305_Expression/Expression-main.c new file mode 100644 index 0000000..acaf3f6 --- /dev/null +++ b/CLion/CourseBook/0305_Expression/Expression-main.c @@ -0,0 +1,12 @@ +#include "Expression.h" //**▲03 栈和队列**// + +int main(int argc, char** argv) { + char opnd; + char* exp = "(1+3)*2/4#"; + + opnd = EvaluateExpression(exp); + + printf("作为示例, %s 的计算结果为:%d\n", exp, opnd - '0'); + + return 0; +} diff --git a/CLion/CourseBook/0305_Expression/Expression.c b/CLion/CourseBook/0305_Expression/Expression.c new file mode 100644 index 0000000..dd4e025 --- /dev/null +++ b/CLion/CourseBook/0305_Expression/Expression.c @@ -0,0 +1,139 @@ +/*============== + * 表达式计算 + * + * 包含算法: 3.4 + ===============*/ + +#include "Expression.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.4 ████████ + * + * 从exp读入表达式,并计算表达式的运算结果 + * + *【注】 + * 1.教材使用的是控制台输入,这里为了便于测试,直接改为从形参接收参数 + * 2.该计算功能有限,理论上仅支持对个位数运算,且要求每一步的运算结果也是个位数。 + * 教材提供此算法的目的是验证栈的使用,如果想扩展对运算符的支持,并扩大对操作数的支持, + * 则可以顺着此思路进行改版 + */ +OperandType EvaluateExpression(const char exp[]) { + SElemType c; // 输入序列 + + SqStack OPTR; // 运算符栈 + SqStack OPND; // 操作数栈 + + OperatorType theta, x; // 运算符 + OperandType a, b; // 操作数 + + int i = 0; + + // 初始化运算符栈,并将一个界限符'#'入栈 + InitStack(&OPTR); + Push(&OPTR, '#'); + + // 初始化操作数栈,并开始读取输入 + InitStack(&OPND); + c = exp[i++]; + + // 当输入中遇到界限符'#',且运算符栈的栈顶元素也是界限符'#'时,则表示读取结束,且运算结束 + while(c != '#' || GetTop(OPTR) != '#') { + // 如果ch不是运算符,则视其为操作数,将其入栈 + if(!In(c, OP)) { + Push(&OPND, c); // 将操作数入栈 + c = exp[i++]; // 获取下一个输入字符 + } else { + switch(Precede(GetTop(OPTR), c)) { + // 栈中运算符优先级低,继续进栈 + case '<': + Push(&OPTR, c); + c = exp[i++]; + break; + + // 优先级相等时,说明这里遇到括号,需要脱括号 + case '=': + Pop(&OPTR, &x); + c = exp[i++]; + break; + + /* + * 栈中运算符优先级高时,先计算,再将计算结果压入栈 + * + * 注:这儿没有读字符,c保留的还是刚才读到的字符 + */ + case '>': + Pop(&OPTR, &theta); // 弹出运算符 + Pop(&OPND, &b); // 弹出右边的操作数 + Pop(&OPND, &a); // 弹出左边的操作数 + Push(&OPND, Operate(a, theta, b)); + break; + } + } + } + + return GetTop(OPND); +} + +// 判断指定的运算符是否合规 +Status In(SElemType c, const char OP[]) { + + SElemType* e = strchr(OP, c); + + // 如果运算符c不在合规范围内,说明指定的运算符不合规 + if(e == NULL) { + return FALSE; + } else { + return TRUE; + } +} + +/* + * 判断运算符栈中操作符o1与表达式中的操作符o2的优先级。 + * + * 返回'>'、'<'、'=',以指示o1和o2的优先级 + */ +OperatorType Precede(OperatorType o1, OperatorType o2) { + int x, y; + + // 获取指定的运算符在运算符表中的位置 + char* p1 = strchr(OP, o1); + char* p2 = strchr(OP, o2); + + // 计算出一个运算符优先级表坐标 + x = p1 - OP; + y = p2 - OP; + + return PrecedeTable[x][y]; +} + +/* + * 对操作数进行运算 + * + * a、b是操作数,theta是运算符。 + * 对于操作数和运算结果,仅保证对个位数的支持 + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b) { + int x, y, z = CHAR_MAX - 48; + + // 先从字符型转为整型 + x = a - '0'; + y = b - '0'; + + switch(theta) { + case '+': + z = x + y; + break; + case '-': + z = x - y; + break; + case '*': + z = x * y; + break; + case '/': + z = x / y; + break; + } + + // 计算完成后,将整型转换为字符型返回 + return z + 48; +} diff --git a/CLion/CourseBook/0305_Expression/Expression.h b/CLion/CourseBook/0305_Expression/Expression.h new file mode 100644 index 0000000..b374fcb --- /dev/null +++ b/CLion/CourseBook/0305_Expression/Expression.h @@ -0,0 +1,70 @@ +/*============== + * 表达式计算 + * + * 包含算法: 3.4 + ===============*/ + +#ifndef EXPRESSION_H +#define EXPRESSION_H + +#include +#include +#include +#include "SqStack.h" //**▲03 栈和队列**// + +typedef SElemType OperatorType; // 运算符类型 +typedef SElemType OperandType; // 操作数类型 + +// 运算符表,即表达式中允许出现的符号(包括界限符'#') +static const char OP[] = {'+', '-', '*', '/', '(', ')', '#'}; + +/* + * 运算符优先级表(包括界限符'#'),与上面的OP表是呼应的。 + * 可参见教材中的"算符间的优先关系"表 + */ +static const char PrecedeTable[7][7] = {{'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'<', '<', '<', '<', '<', '=', ' '}, + {'>', '>', '>', '>', ' ', '>', '>'}, + {'<', '<', '<', '<', '<', ' ', '='}}; + + +/* + * ████████ 算法3.4 ████████ + * + * 从exp读入表达式,并计算表达式的运算结果 + * + *【注】 + * 1.教材使用的是控制台输入,这里为了便于测试,直接改为从形参接收参数 + * 2.该计算功能有限,理论上仅支持对个位数运算,且要求每一步的运算结果也是个位数。 + * 教材提供此算法的目的是验证栈的使用,如果想扩展对运算符的支持,并扩大对操作数的支持, + * 则可以顺着此思路进行改版 + */ +OperandType EvaluateExpression(const char exp[]); + +/* + * 判断指定的运算符是否合规 + * + * OP中存储了合规的运算符,包括界限符'#' + */ +Status In(SElemType c, const char OP[]); + +/* + * 判断运算符栈中操作符o1与表达式中的操作符o2的优先级。 + * + * 返回'>'、'<'、'=',以指示o1和o2的优先级 + */ +OperatorType Precede(OperatorType o1, OperatorType o2); + +/* + * 对操作数进行运算 + * + * a、b是操作数,theta是运算符。 + * 对于操作数和运算结果,仅保持对个位数的支持 + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b); + + +#endif diff --git a/CLion/CourseBook/0305_Expression/SqStack.c b/CLion/CourseBook/0305_Expression/SqStack.c new file mode 100644 index 0000000..d758426 --- /dev/null +++ b/CLion/CourseBook/0305_Expression/SqStack.c @@ -0,0 +1,111 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#include "SqStack.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 取值 + * + * 获取操作符栈的栈顶元素。 + * + *【注】 + * 该操作的实现与传统的顺序栈的取值操作有些不同,但核心作用一致 + */ +SElemType GetTop(SqStack S) { + SElemType e; + + if(S.base == NULL || S.top == S.base) { + return '\0'; + } + + // 不会改变栈中元素 + e = *(S.top - 1); + + return e; +} + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // 栈满时,追加存储空间 + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 存储分配失败 + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // 进栈先赋值,栈顶指针再自增 + *(S->top++) = e; + + return OK; +} + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // 出栈栈顶指针先递减,再赋值 + *e = *(--(*S).top); + + return OK; +} diff --git a/CLion/CourseBook/0305_Expression/SqStack.h b/CLion/CourseBook/0305_Expression/SqStack.h new file mode 100644 index 0000000..21d66eb --- /dev/null +++ b/CLion/CourseBook/0305_Expression/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * 栈的顺序存储结构(顺序栈) + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define STACK_INIT_SIZE 100 // 顺序栈存储空间的初始分配量 +#define STACKINCREMENT 10 // 顺序栈存储空间的分配增量 + +/* 表达式元素类型定义 */ +typedef char SElemType; + +// 顺序栈元素结构 +typedef struct { + SElemType* base; // 栈底指针 + SElemType* top; // 栈顶指针 + int stacksize; // 当前已分配的存储空间,以元素为单位 +} SqStack; + + +/* + * 初始化 + * + * 构造一个空栈。初始化成功则返回OK,否则返回ERROR。 + */ +Status InitStack(SqStack* S); + +/* + * 判空 + * + * 判断顺序栈中是否包含有效数据。 + * + * 返回值: + * TRUE : 顺序栈为空 + * FALSE: 顺序栈不为空 + */ +Status StackEmpty(SqStack S); + +/* + * 取值 + * + * 获取操作符栈的栈顶元素。 + * + *【注】 + * 该操作的实现与传统的顺序栈的取值操作有些不同,但核心作用一致 + */ +SElemType GetTop(SqStack S); + +/* + * 入栈 + * + * 将元素e压入到栈顶。 + */ +Status Push(SqStack* S, SElemType e); + +/* + * 出栈 + * + * 将栈顶元素弹出,并用e接收。 + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/CLion/CourseBook/0306_Hanoi/CMakeLists.txt b/CLion/CourseBook/0306_Hanoi/CMakeLists.txt new file mode 100644 index 0000000..025b1b5 --- /dev/null +++ b/CLion/CourseBook/0306_Hanoi/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(Hanoi Hanoi.h Hanoi.c Hanoi-main.c) +# 链接公共库 +target_link_libraries(Hanoi Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0306_Hanoi/Hanoi-main.c b/CLion/CourseBook/0306_Hanoi/Hanoi-main.c new file mode 100644 index 0000000..9ff3a32 --- /dev/null +++ b/CLion/CourseBook/0306_Hanoi/Hanoi-main.c @@ -0,0 +1,15 @@ +#include "Hanoi.h" //**03 栈和队列**// + +int main(int argc, char** argv) { + char x = 'x'; + char y = 'y'; + char z = 'z'; + + printf("作为示例,假设圆盘个数为 %d ,操作步骤如下...\n", N); + + init(N); + + hanoi(N, x, y, z); + + return 0; +} diff --git a/CLion/CourseBook/0306_Hanoi/Hanoi.c b/CLion/CourseBook/0306_Hanoi/Hanoi.c new file mode 100644 index 0000000..0f4f83e --- /dev/null +++ b/CLion/CourseBook/0306_Hanoi/Hanoi.c @@ -0,0 +1,133 @@ +/*============== + * 汉诺塔 + * + * 包含算法: 3.5 + ===============*/ + +#include "Hanoi.h" //**03 栈和队列**// + +/* + * ████████ 算法3.5 ████████ + * + * 汉诺塔求解:以y为辅助,将x上前n个圆盘移动到z + */ +void hanoi(int n, char x, char y, char z) { + if(n == 1) { // 欲移动n个圆盘,需先移动其上的n-1个圆盘 + move(x, 1, z); // 将编号为1的圆盘从x移到z + } else { + hanoi(n - 1, x, z, y); // 将x上编号为1至n-1的圆盘移到y,z作辅助塔 + move(x, n, z); // 将编号为n的圆盘从x移到z + hanoi(n - 1, y, x, z); // 将y上编号为1至n-1的圆盘移动到z,x作辅助塔 + } +} + +void move(char x, int n, char z) { + // step为全局变量,在main函数之外定义 + gStep++; + printf("第%2d步:将第 %d 个圆盘从 %c 移到 %c \n", gStep, n, x, z); + + // 汉诺塔移动的图形表示 + PrintGraph(x, n, z); +} + +/* + * 汉诺塔图形信息初始化 + * + *【注】 + * 教材中无此操作。 + * 增加此操作的目的是为了便于观察汉诺塔圆盘的移动过程 + */ +void init(int n) { + int i; + int* towerX, * towerY, * towerZ; + + T.plates = (int**) malloc(3 * sizeof(int*)); + + towerX = (int*) malloc(n * sizeof(int)); + towerY = (int*) malloc(n * sizeof(int)); + towerZ = (int*) malloc(n * sizeof(int)); + + for(i = 0; i < n; ++i) { + towerX[i] = n - i; + towerY[i] = 0; + towerZ[i] = 0; + } + + T.plates[0] = towerX; + T.plates[1] = towerY; + T.plates[2] = towerZ; + + T.high[0] = n; + T.high[1] = 0; + T.high[2] = 0; + + // 汉诺塔移动的图形表示 + PrintGraph('\0', 0, '\0'); +} + +/* + * 汉诺塔移动的图形表示 + * + *【注】 + * 教材中无此操作。 + * 增加此操作的目的是为了便于观察汉诺塔圆盘的移动过程 + */ +void PrintGraph(char t1, int n, char t2) { + int i, j; + char** s; + + // 将n号盘子从t1中移除 + if(t1 == 'x') { + T.plates[0][T.high[0] - 1] = 0; + T.high[0]--; + } else if(t1 == 'y') { + T.plates[1][T.high[1] - 1] = 0; + T.high[1]--; + } else if(t1 == 'z') { + T.plates[2][T.high[2] - 1] = 0; + T.high[2]--; + } else { + // t1上的圆盘不需要移动 + } + + // 将n号盘子添加到t2中 + if(t2 == 'x') { + T.plates[0][T.high[0]] = n; + T.high[0]++; + } else if(t2 == 'y') { + T.plates[1][T.high[1]] = n; + T.high[1]++; + } else if(t2 == 'z') { + T.plates[2][T.high[2]] = n; + T.high[2]++; + } else { + // t2上的圆盘不需要移动 + } + + s = (char**) malloc((N + 2) * sizeof(char*)); + for(i = 0; i < N + 2; i++) { + s[i] = (char*) malloc(N * sizeof(char)); + + for(j = 0; j < i; j++) { + if(i == N + 1) { + s[i][j] = '-'; // 将最后一行初始化为托盘 + } else { + s[i][j] = '*'; + } + } + + if(i == N + 1) { + s[i][j - 1] = '\0'; + } else { + s[i][j] = '\0'; + } + } + + for(i = N - 1; i >= 0; i--) { + printf("%-*s | %-*s | %-*s\n", N, s[T.plates[0][i]], N, s[T.plates[1][i]], N, s[T.plates[2][i]]); + } + printf("%-*s + %-*s + %-*s\n", N, s[N + 1], N, s[N + 1], N, s[N + 1]); + printf("%-*s %-*s %-*s\n", N + 2, "x", N + 2, "y", N + 2, "z"); + + printf("\n"); +} diff --git a/CLion/CourseBook/0306_Hanoi/Hanoi.h b/CLion/CourseBook/0306_Hanoi/Hanoi.h new file mode 100644 index 0000000..7ebdaec --- /dev/null +++ b/CLion/CourseBook/0306_Hanoi/Hanoi.h @@ -0,0 +1,59 @@ +/*============== + * 汉诺塔 + * + * 包含算法: 3.5 + ===============*/ + +#ifndef HANOI_H +#define HANOI_H + +#include +#include +#include "Status.h" + +#define N 5 // 汉诺塔中盘子总数 + +// 汉诺塔图形信息 +typedef struct { + int** plates; // 汉诺塔中的圆盘信息 + int high[3]; // 三座塔的高度(持有的盘子数量) +} Tower; + +// 汉诺塔 +Tower T; + +// 统计移动步数 +int gStep; + + +/* + * ████████ 算法3.5 ████████ + * + * 汉诺塔求解:以y塔为辅助,将x塔上前n个圆盘移动到z塔 + */ +void hanoi(int n, char x, char y, char z); + +/* + * 移动汉诺塔圆盘:将第n个圆盘从x塔移到z塔。 + */ +void move(char x, int n, char z); + +/* + * 汉诺塔图形信息初始化 + * + *【注】 + * 教材中无此操作。 + * 增加此操作的目的是为了便于观察汉诺塔圆盘的移动过程 + */ +void init(int n); + +/* + * 汉诺塔移动的图形表示,参数含义参见move()函数 + * + *【注】 + * 教材中无此操作。 + * 增加此操作的目的是为了便于观察汉诺塔圆盘的移动过程 + */ +void PrintGraph(char x, int n, char z); + +#endif diff --git a/CLion/CourseBook/0307_LinkQueue/CMakeLists.txt b/CLion/CourseBook/0307_LinkQueue/CMakeLists.txt new file mode 100644 index 0000000..4189a47 --- /dev/null +++ b/CLion/CourseBook/0307_LinkQueue/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(LinkQueue LinkQueue.h LinkQueue.c LinkQueue-main.c) +# 链接公共库 +target_link_libraries(LinkQueue Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0307_LinkQueue/LinkQueue-main.c b/CLion/CourseBook/0307_LinkQueue/LinkQueue-main.c new file mode 100644 index 0000000..c1c6838 --- /dev/null +++ b/CLion/CourseBook/0307_LinkQueue/LinkQueue-main.c @@ -0,0 +1,94 @@ +#include +#include "LinkQueue.h" //**03 栈和队列**// + +// 测试函数,打印整型 +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + LinkQueue Q; + int i; + QElemType e; + + printf("████████ 函数 InitQueue \n"); + { + printf("█ 初始化链队 Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf("████████ 函数 QueueEmpty \n"); + { + QueueEmpty(Q) ? printf("█ Q 为空!!\n") : printf("█ Q 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 EnQueue \n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf("█ 元素 \"%2d\" 入队...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf("████████ 函数 QueueTraverse \n"); + { + printf("█ Q 中的元素为:Q = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 QueueLength \n"); + { + i = QueueLength(Q); + printf("█ Q 的长度为 %d \n", i); + } + PressEnterToContinue(); + + printf("████████ 函数 DeQueue \n"); + { + DeQueue(&Q, &e); + printf("█ 队头元素 \"%d\" 出队...\n", e); + printf("█ Q 中的元素为:Q = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 GetHead \n"); + { + GetHead(Q, &e); + printf("█ 队头元素的值为 \"%d\" \n", e); + } + PressEnterToContinue(); + + printf("████████ 函数 ClearQueue \n"); + { + printf("█ 清空 Q 前:"); + QueueEmpty(Q) ? printf(" Q 为空!!\n") : printf(" Q 不为空!\n"); + + ClearQueue(&Q); + + printf("█ 清空 Q 后:"); + QueueEmpty(Q) ? printf(" Q 为空!!\n") : printf(" Q 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 DestroyQueue \n"); + { + printf("█ 销毁 Q 前:"); + Q.front != NULL && Q.rear != NULL ? printf(" Q 存在!\n") : printf(" Q 不存在!!\n"); + + DestroyQueue(&Q); + + printf("█ 销毁 Q 后:"); + Q.front != NULL && Q.rear != NULL ? printf(" Q 存在!\n") : printf(" Q 不存在!!\n"); + } + PressEnterToContinue(); + + return 0; +} + +// 测试函数,打印整型 +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/CLion/CourseBook/0307_LinkQueue/LinkQueue.c b/CLion/CourseBook/0307_LinkQueue/LinkQueue.c new file mode 100644 index 0000000..bdca3a5 --- /dev/null +++ b/CLion/CourseBook/0307_LinkQueue/LinkQueue.c @@ -0,0 +1,204 @@ +/*========================= + * 队列的链式存储结构(链队) + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空的链队。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列带有头结点 + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * 销毁(结构) + * + * 释放链队所占内存。 + */ +Status DestroyQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + while((*Q).front) { + (*Q).rear = (*Q).front->next; + free((*Q).front); + (*Q).front = (*Q).rear; + } + + return OK; +} + +/* + * 置空(内容) + * + * 这里需要释放链队中非头结点处的空间。 + */ +Status ClearQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).rear = (*Q).front->next; + + while((*Q).rear) { + (*Q).front->next = (*Q).rear->next; + free((*Q).rear); + (*Q).rear = (*Q).front->next; + } + + (*Q).rear = (*Q).front; + + return OK; +} + +/* + * 判空 + * + * 判断链队中是否包含有效数据。 + * + * 返回值: + * TRUE : 链队为空 + * FALSE: 链队不为空 + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 计数 + * + * 返回链队包含的有效元素的数量。 + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +/* + * 遍历 + * + * 用visit函数访问队列Q + */ +Status QueueTraverse(LinkQueue Q, void (Visit)(QElemType)) { + QueuePtr p; + + if(Q.front == NULL) { + return ERROR; + } + + p = Q.front->next; + + while(p != NULL) { + Visit(p->data); + p = p->next; + } + + printf("\n"); + + return OK; +} + +#endif diff --git a/CLion/CourseBook/0307_LinkQueue/LinkQueue.h b/CLion/CourseBook/0307_LinkQueue/LinkQueue.h new file mode 100644 index 0000000..512ea96 --- /dev/null +++ b/CLion/CourseBook/0307_LinkQueue/LinkQueue.h @@ -0,0 +1,100 @@ +/*========================= + * 队列的链式存储结构(链队) + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 链队元素类型定义 */ +typedef int QElemType; + +// 队列元素结构 +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// 队列结构 +typedef struct { + QueuePtr front; // 队头指针 + QueuePtr rear; // 队尾指针 +} LinkQueue; // 队列的链式存储表示 + + +/* + * 初始化 + * + * 构造一个空的链队。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列带有头结点 + */ +Status InitQueue(LinkQueue* Q); + +/* + * 销毁(结构) + * + * 释放链队所占内存。 + */ +Status DestroyQueue(LinkQueue* Q); + +/* + * 置空(内容) + * + * 这里需要释放链队中非头结点处的空间。 + */ +Status ClearQueue(LinkQueue* Q); + +/* + * 判空 + * + * 判断链队中是否包含有效数据。 + * + * 返回值: + * TRUE : 链队为空 + * FALSE: 链队不为空 + */ +Status QueueEmpty(LinkQueue Q); + +/* + * 计数 + * + * 返回链队包含的有效元素的数量。 + */ +int QueueLength(LinkQueue Q); + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +/* + * 遍历 + * + * 用visit函数访问队列Q + */ +Status QueueTraverse(LinkQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/CLion/CourseBook/0308_SqQueue/CMakeLists.txt b/CLion/CourseBook/0308_SqQueue/CMakeLists.txt new file mode 100644 index 0000000..ede8486 --- /dev/null +++ b/CLion/CourseBook/0308_SqQueue/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(SqQueue SqQueue.h SqQueue.c SqQueue-main.c) +# 链接公共库 +target_link_libraries(SqQueue Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0308_SqQueue/SqQueue-main.c b/CLion/CourseBook/0308_SqQueue/SqQueue-main.c new file mode 100644 index 0000000..1975d2a --- /dev/null +++ b/CLion/CourseBook/0308_SqQueue/SqQueue-main.c @@ -0,0 +1,94 @@ +#include +#include "SqQueue.h" //**▲03 栈和队列**// + +// 测试函数,打印整型 +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + SqQueue Q; + int i; + QElemType e; + + printf("████████ 函数 InitQueue 测试...\n"); + { + printf("█ 初始化循环顺序队列 Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf("████████ 函数 QueueEmpty 测试...\n"); + { + QueueEmpty(Q) ? printf("█ Q 为空!!\n") : printf("█ Q 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 EnQueue 测试...\n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf("█ 元素 \"%2d\" 入队Q...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf("████████ 函数 QueueTraverse 测试...\n"); + { + printf("█ Q 中的元素为:Q = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 QueueLength 测试...\n"); + { + i = QueueLength(Q); + printf("█ Q 的长度为 %d \n", i); + } + PressEnterToContinue(); + + printf("████████ 函数 DeQueue 测试...\n"); + { + DeQueue(&Q, &e); + printf("█ 队头元素 \"%d\" 出队...\n", e); + printf("█ Q 中的元素为:Q = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf("████████ 函数 GetHead 测试...\n"); + { + GetHead(Q, &e); + printf("█ 队头元素的值为 \"%d\" \n", e); + } + PressEnterToContinue(); + + printf("████████ 函数 ClearQueue 测试...\n"); + { + printf("█ 清空 Q 前:"); + QueueEmpty(Q) ? printf(" Q 为空!!\n") : printf(" Q 不为空!\n"); + + ClearQueue(&Q); + + printf("█ 清空 Q 后:"); + QueueEmpty(Q) ? printf(" Q 为空!!\n") : printf(" Q 不为空!\n"); + } + PressEnterToContinue(); + + printf("████████ 函数 DestroyQueue 测试...\n"); + { + printf("█ 销毁 Q 前:"); + Q.base != NULL ? printf(" Q 存在!\n") : printf(" Q 不存在!!\n"); + + DestroyQueue(&Q); + + printf("█ 销毁 Q 后:"); + Q.base != NULL ? printf(" Q 存在!\n") : printf(" Q 不存在!!\n"); + } + PressEnterToContinue(); + + return 0; +} + +// 测试函数,打印整型 +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/CLion/CourseBook/0308_SqQueue/SqQueue.c b/CLion/CourseBook/0308_SqQueue/SqQueue.c new file mode 100644 index 0000000..5e3eadf --- /dev/null +++ b/CLion/CourseBook/0308_SqQueue/SqQueue.c @@ -0,0 +1,182 @@ +/*============================= + * 队列的顺序存储结构(顺序队列) + ==============================*/ + +#include "SqQueue.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空的顺序队列。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列是循环队列 + */ +Status InitQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).base = (QElemType*) malloc(MAXQSIZE * sizeof(QElemType)); + if(!(*Q).base) { + exit(OVERFLOW); + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * 销毁(结构) + * + * 释放循环顺序队列所占内存。 + */ +Status DestroyQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + if((*Q).base) { + free((*Q).base); + } + + (*Q).base = NULL; + (*Q).front = (*Q).rear = 0; + + return ERROR; +} + +/* + * 置空(内容) + * + * 只是清理循环顺序队列中存储的数据,不释放顺序栈所占内存。 + */ +Status ClearQueue(SqQueue* Q) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * 判空 + * + * 判断循环顺序队列中是否包含有效数据。 + * + * 返回值: + * TRUE : 循环顺序队列为空 + * FALSE: 循环顺序队列不为空 + */ +Status QueueEmpty(SqQueue Q) { + // 队列空的标志 + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 计数 + * + * 返回循环顺序队列包含的有效元素的数量。 + */ +int QueueLength(SqQueue Q) { + if(Q.base == NULL) { + return 0; + } + + // 队列长度 + return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; +} + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(SqQueue Q, QElemType* e) { + // 队列空的标志 + if(Q.base == NULL || Q.front == Q.rear) { + return ERROR; + } + + *e = Q.base[Q.front]; + + return OK; +} + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(SqQueue* Q, QElemType e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // 队列满的标志(会浪费一个空间来区分队列空和队列满) + if(((*Q).rear + 1) % MAXQSIZE == (*Q).front) { + return ERROR; + } + + // 入队 + (*Q).base[(*Q).rear] = e; + + // 尾指针前进 + (*Q).rear = ((*Q).rear + 1) % MAXQSIZE; + + return OK; +} + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(SqQueue* Q, QElemType* e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // 队列空的标志 + if((*Q).front == (*Q).rear) { + return ERROR; + } + + // 出队 + *e = (*Q).base[(*Q).front]; + + // 头指针前进 + (*Q).front = ((*Q).front + 1) % MAXQSIZE; + + return OK; +} + +/* + * 遍历 + * + * 用visit函数访问队列Q + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)) { + int i; + + if(Q.base == NULL) { + return ERROR; + } + + for(i = Q.front; i != Q.rear; i = (i + 1) % MAXQSIZE) { + Visit(Q.base[i]); + } + + printf("\n"); + + return OK; +} diff --git a/CLion/CourseBook/0308_SqQueue/SqQueue.h b/CLion/CourseBook/0308_SqQueue/SqQueue.h new file mode 100644 index 0000000..a37cd43 --- /dev/null +++ b/CLion/CourseBook/0308_SqQueue/SqQueue.h @@ -0,0 +1,98 @@ +/*============================= + * 队列的顺序存储结构(顺序队列) + ==============================*/ + +#ifndef SQQUEUE_H +#define SQQUEUE_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 宏定义 */ +#define MAXQSIZE 1000 //最大队列长度 + +/* 循环队列元素类型定义 */ +typedef int QElemType; + +// 循环队列的顺序存储结构 +typedef struct { + QElemType* base; // 动态分配存储空间 + int front; // 头指针,若队列不空,指向队头元素 + int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置 +} SqQueue; + + +/* + * 初始化 + * + * 构造一个空的顺序队列。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列是循环队列 + */ +Status InitQueue(SqQueue* Q); + +/* + * 销毁(结构) + * + * 释放循环顺序队列所占内存。 + */ +Status ClearQueue(SqQueue* Q); + +/* + * 置空(内容) + * + * 只是清理循环顺序队列中存储的数据,不释放顺序栈所占内存。 + */ +Status DestroyQueue(SqQueue* Q); + +/* + * 判空 + * + * 判断循环顺序队列中是否包含有效数据。 + * + * 返回值: + * TRUE : 循环顺序队列为空 + * FALSE: 循环顺序队列不为空 + */ +Status QueueEmpty(SqQueue Q); + +/* + * 计数 + * + * 返回循环顺序队列包含的有效元素的数量。 + */ +int QueueLength(SqQueue Q); + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(SqQueue Q, QElemType* e); + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(SqQueue* Q, QElemType e); + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(SqQueue* Q, QElemType* e); + +/* + * 遍历 + * + * 用visit函数访问队列Q + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/CLion/CourseBook/0309_BankQueuing/BankQueuing-main.c b/CLion/CourseBook/0309_BankQueuing/BankQueuing-main.c new file mode 100644 index 0000000..9b96bf2 --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/BankQueuing-main.c @@ -0,0 +1,10 @@ +#include "BankQueuing.h" //**▲03 栈和队列**// + +int main(int argc, char** argv) { + + Bank_Simulation_1(); //算法3.6 + +// Bank_Simulation_2(); //算法3.7,跟3.6类似 + + return 0; +} diff --git a/CLion/CourseBook/0309_BankQueuing/BankQueuing.c b/CLion/CourseBook/0309_BankQueuing/BankQueuing.c new file mode 100644 index 0000000..d455747 --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/BankQueuing.c @@ -0,0 +1,338 @@ +/*================== + * 模拟银行排队 + * + * 包含算法: 3.6、3.7 + ===================*/ + +#ifndef BANKQUEUING_C +#define BANKQUEUING_C + +#include "BankQueuing.h" //**▲03 栈和队列**// + +/* + * ████████ 算法3.6 ████████ + * + * 银行业务模拟,统计一天内客户在银行逗留的平均时间 + */ +void Bank_Simulation_1() +{ + char eventType; + + OpenForDay(); // 银行开门 + + // 如果事件表不为空 + while(MoreEvent()) { + EventDrived(&eventType); // 事件驱动 + + switch(eventType) { + case 'A': + CustomerArrived(); // 处理客户到达事件 + break; + case 'D': + CustomerDeparture(); // 处理客户离开事件 + break; + default : + Invalid(); + } + } + + CloseForDay(); +} + +/* + * ████████ 算法3.7 ████████ + * + * 银行业务模拟,统计一天内客户在银行逗留的平均时间 + * 算法内容与3.7是类似的 + */ +void Bank_Simulation_2() { + OpenForDay(); // 银行开门 + + while(!ListEmpty(gEv)) { + ListDelete(gEv, 1, &gEn); + + if(gEn.NType == Arrive) { + CustomerArrived(); // 处理客户到达事件 + } else { + CustomerDeparture(); // 处理客户离开事件 + } + } + + CloseForDay(); // 银行关门 +} + +/* + * 银行开门,初始化运行环境 + */ +void OpenForDay() { + int i; + + // 关门时间,假设银行每天营业8小时,480分 + gCloseTime = 480; + + // 初始化累计时间和客户数为0 + gTotalTime = 0; + gCustomerNum = 0; + + // 初始化事件链表为空表 + InitList(&gEv); + + // 设定第一个客户到达事件 + gEn.OccurTime = 0; + gEn.NType = Arrive; + + // 插入事件表 + OrderInsert(gEv, gEn, cmp); + + // 初始化4个空队列 + for(i = 1; i <= N; ++i) { + InitQueue(&gQ[i]); + } + + Show(); +} + +/* + * 银行关门 + * + * 释放资源,打印统计信息 + */ +void CloseForDay() { + printf("当天总共有%d个客户,平均逗留时间为%d分钟。\n", gCustomerNum, gTotalTime / gCustomerNum); +} + +/* + * 判断事件表是否为空。 + * 即是否存在未处理的事件。 + */ +Status MoreEvent() { + return !ListEmpty(gEv); +} + +/* + * 将待处理事件从事件表中移除,并将该事件存储到全局变量gEn中。 + * event用来存储该事件的类型 + */ +void EventDrived(char* eventType) { + // 从事件表中获取待处理事件 + ListDelete(gEv, 1, &gEn); + + // 识别事件类型 + if(gEn.NType == Arrive) { + *eventType = 'A'; + } else { + *eventType = 'D'; + } +} + +/* + * 处理客户到达事件,gEn.NType=0 + */ +void CustomerArrived() { + Event en; // 事件 + QElemType customer; // 客户记录 + + int durtime; // 当前客户办理业务需要的时间 + + int intertime; // 下一个客户达到时间间隔 + int t; // 下一个客户到达时间 + + int i; // 队列编号 + + // 总客户数增一 + ++gCustomerNum; + + // 生成当前客户办理业务需要的时间和下一个客户达到时间间隔 + Random(&durtime, &intertime); + + // 下一个客户到达时间 + t = gEn.OccurTime + intertime; + + // 如果银行尚未关门,将下一客户"到达"事件插入事件表 + if(t < gCloseTime) { + en.OccurTime = t; // 下一客户的到达时间 + en.NType = Arrive; // "到达"事件类型 + OrderInsert(gEv, en, cmp); // "到达"事件插入事件表 + } + + // 获取当前长度最短的队列编号 + i = Minimum(gQ); + + // 记录当前客户信息 + customer.ArrivedTime = gEn.OccurTime; // 到达时间 + customer.Duration = durtime; // 办理业务所需时间 + customer.Count = gCustomerNum; // 客户编号 + + // 当前客户进入最短队列排队 + EnQueue(&gQ[i], customer); + printf("第%3d个客户到队列 %d 中排队...\n", customer.Count, i); + Show(); + + /* + * 如果当前队列中只有这一个客户排队,则需要计算其离开时间, + * 并构造一个"离开"事件插入到事件表中 + */ + if(QueueLength(gQ[i]) == 1) { + en.OccurTime = gEn.OccurTime + durtime; // 当前客户的离开时间 + en.NType = i; // "离开"事件类型,值为1-4,指示从第几个队列中离开 + OrderInsert(gEv, en, cmp); // "离开"事件插入事件表 + } +} + +/* + * 处理客户离开事件,gEn.NType>0 + */ +void CustomerDeparture() { + Event en; // 事件 + QElemType customer; // 客户记录 + int i = gEn.NType; // 队列编号 + + // 第i个队列的队头客户完成业务并出队 + DeQueue(&gQ[i], &customer); + printf("第%3d个客户从队列 %d 中离开...\n", customer.Count, i); + Show(); + + // 累计客户逗留时间 + gTotalTime += gEn.OccurTime - customer.ArrivedTime; + + /* + * 如果当前队列中仍然存在排队的客户,则需要计算该队列中队头客户的离开时间 + * 注:之所以在这里计算,是因为只有上一个客户离开了,下一个客户的离开时间才会有意义 + */ + if(!QueueEmpty(gQ[i])) { + // 获取队头客户 + GetHead(gQ[i], &customer); + en.OccurTime = gEn.OccurTime + customer.Duration; // "离开"事件发生的时间 + en.NType = i; // "离开"事件类型 + OrderInsert(gEv, en, cmp); // "离开"事件插入事件表 + } +} + +/* + * 代表遇到了无效的事件 + */ +void Invalid() { + printf("运行错误!"); + exit(OVERFLOW); +} + +/* + * 将事件en插入到事件表ev中(ev是按发生时间从早到晚排列的事件表) + * cmp用来比较两个事件发生的早晚,en会作为第二个实参传进去 + */ +Status OrderInsert(EventList ev, Event en, int(cmp)(Event, Event)) { + EventList p, pre, s; + + if(ev == NULL) { + return ERROR; + } + + for(pre = ev; pre->next != NULL && cmp(pre->next->data, en) < 0; pre = pre->next) { + // 查找 + } + + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = en; + + s->next = pre->next; + pre->next = s; + + return OK; +} + +/* + * 比较两事件发生次序 + */ +int cmp(Event a, Event b) { + if(a.OccurTime < b.OccurTime) { + return -1; // a发生比较早 + } else if(a.OccurTime > b.OccurTime) { + return 1; // a发生比较晚 + } else { + return 0; // 同时发生 + } +} + +/* + * 生成随机数 + * + * durtime :当前客服办理业务所需时间 + * intertime:下一客户到达间隔的时间 + */ +void Random(int* durtime, int* intertime) { + srand((unsigned) time(NULL)); + *durtime = rand() % DurationTime + 1; // 办业务时间持续1到20分钟 + *intertime = rand() % IntervalTime + 1; // 下一个顾客到来的时间为间隔1到10分钟 +} + +/* + * 返回长度最短的队列的序号 + */ +int Minimum() { + int i1 = QueueLength(gQ[1]); + int i2 = QueueLength(gQ[2]); + int i3 = QueueLength(gQ[3]); + int i4 = QueueLength(gQ[4]); + + if(i1 <= i2 && i1 <= i3 && i1 <= i4) { + return 1; + } + + if(i2 < i1 && i2 <= i3 && i2 <= i4) { + return 2; + } + + if(i3 < i1 && i3 < i2 && i3 <= i4) { + return 3; + } + + if(i4 < i1 && i4 < i2 && i4 < i3) { + return 4; + } + + return 0; +} + +/* + * 显示所有客户队列的排队情况 + */ +void Show() { + int i; + QueuePtr p; // 记录到来的客户是第几个 + + // 遍历所有客户队列 + for(i = 1; i <= N; i++) { + for(p = gQ[i].front; p; p = p->next) { + if(p == gQ[i].front) { + if(i == 1) { + printf("柜台①●"); + } + if(i == 2) { + printf("柜台②●"); + } + if(i == 3) { + printf("柜台③●"); + } + if(i == 4) { + printf("柜台④●"); + } + } else { + printf("(%03d)", p->data.Count); + } + + + if(p == gQ[i].rear) { + printf("\n"); + } + } + } + + printf("\n"); + + Wait(SleepTime); +} + +#endif diff --git a/CLion/CourseBook/0309_BankQueuing/BankQueuing.h b/CLion/CourseBook/0309_BankQueuing/BankQueuing.h new file mode 100644 index 0000000..18c4bab --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/BankQueuing.h @@ -0,0 +1,121 @@ +/*================== + * 模拟银行排队 + * + * 包含算法: 3.6、3.7 + ===================*/ + +#ifndef BANKQUEUING_H +#define BANKQUEUING_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include // 提供time原型 +#include "Status.h" //**▲01 绪论**// +#include "LinkList.h" //**▲02 线性表**// +#include "LinkQueue.h" //**▲03 栈和队列**// + +/* 宏定义 */ +#define N 4 // 客户队列数量 +#define SleepTime 1 // SleepTime代表休眠时间 +#define DurationTime 20 // 办理业务持续时间从1到DurationTime分钟不等 +#define IntervalTime 8 // 下一个客户到来时间间隔为1到IntervalTime分钟不等 + +/* 类型定义 */ +typedef LinkList EventList; //事件链表类型,定义为有序链表 + +/* 全局变量(变量名称前面都加了g标记) */ +int gTotalTime; // 累计客户数 +int gCustomerNum; // 累计客户逗留时间 + +int gCloseTime; // 关门时间,假设银行每天营业8小时,480分 + +EventList gEv; // 事件表,存储所有待处理事件 +Event gEn; // 当前正在处理的事件 + +LinkQueue gQ[N+1]; // 4个客户队列,0号单元弃用 + + +/* + * ████████ 算法3.6 ████████ + * + * 银行业务模拟,统计一天内客户在银行逗留的平均时间 + */ +void Bank_Simulation_1(); + +/* + * ████████ 算法3.7 ████████ + * + * 银行业务模拟,统计一天内客户在银行逗留的平均时间 + * 算法内容与3.7是类似的 + */ +void Bank_Simulation_2(); + +/* + * 银行开门,初始化运行环境 + */ +void OpenForDay(); + +/* + * 银行关门 + * + * 释放资源,打印统计信息 + */ +void CloseForDay(); + +/* + * 判断事件表是否为空。 + * 即是否存在未处理的事件。 + */ +Status MoreEvent(); + +/* + * 将待处理事件从事件表中移除,并将该事件存储到全局变量gEn中。 + * event用来存储该事件的类型 + */ +void EventDrived(char* event); + +/* + * 处理客户到达事件,gEn.NType=0 + */ +void CustomerArrived(); + +/* + * 处理客户离开事件,gEn.NType>0 + */ +void CustomerDeparture(); + +/* + * 代表遇到了无效的事件 + */ +void Invalid(); + +/* + * 将事件en插入到事件表ev中(ev是按发生时间从早到晚排列的事件表) + * cmp用来比较两个事件发生的早晚,en会作为第二个实参传进去 + */ +Status OrderInsert(EventList gEv, Event gEn, int(cmp)(Event, Event)); + +/* + * 比较两事件发生次序 + */ +int cmp(Event a, Event b); + +/* + * 生成随机数 + * + * durtime :当前客服办理业务所需时间 + * intertime:下一客户到达间隔的时间 + */ +void Random(int* durtime, int* intertime); + +/* + * 返回长度最短的队列的序号 + */ +int Minimum(); + +/* + * 显示所有客户队列的排队情况 + */ +void Show(); + +#endif diff --git a/CLion/CourseBook/0309_BankQueuing/CMakeLists.txt b/CLion/CourseBook/0309_BankQueuing/CMakeLists.txt new file mode 100644 index 0000000..b73815e --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/CMakeLists.txt @@ -0,0 +1,7 @@ +# 包含公共库 +include_directories(${CMAKE_SOURCE_DIR}/Status) + +# 生成可执行文件 +add_executable(BankQueuing LinkList.h LinkList.c LinkQueue.h LinkQueue.c BankQueuing.h BankQueuing.c BankQueuing-main.c) +# 链接公共库 +target_link_libraries(BankQueuing Scanf_lib) \ No newline at end of file diff --git a/CLion/CourseBook/0309_BankQueuing/LinkList.c b/CLion/CourseBook/0309_BankQueuing/LinkList.c new file mode 100644 index 0000000..ec4c4f6 --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/LinkList.c @@ -0,0 +1,130 @@ +/*=============================== + * 线性表的链式存储结构(链表) + * + * 包含算法: 2.8、2.9、2.10、2.11 + ================================*/ + +#include "LinkList.h" //**▲02 线性表**// + +/* + * 初始化 + * + * 只是初始化一个头结点。 + * 初始化成功则返回OK,否则返回ERROR。 + */ +Status InitList(LinkList* L) { + (*L) = (LinkList) malloc(sizeof(LNode)); + if(*L == NULL) { + exit(OVERFLOW); + } + + (*L)->next = NULL; + + return OK; +} + +/* + * 判空 + * + * 判断链表中是否包含有效数据。 + * + * 返回值: + * TRUE : 链表为空 + * FALSE: 链表不为空 + */ +Status ListEmpty(LinkList L) { + // 链表只有头结点时,认为该链表为空 + if(L != NULL && L->next == NULL) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ████████ 算法2.9 ████████ + * + * 插入 + * + * 向链表第i个位置上插入e,插入成功则返回OK,否则返回ERROR。 + * + *【备注】 + * 教材中i的含义是元素位置,从1开始计数 + */ +Status ListInsert(LinkList L, int i, ElemType e) { + LinkList p, s; + int j; + + // 确保链表存 + if(L == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // 寻找第i-1个结点,且保证该结点本身不为NULL + while(p != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // 如果遍历到头了,或者i的值不合规(比如i<=0),说明没找到合乎目标的结点 + if(p == NULL || j > i - 1) { + return ERROR; + } + + // 生成新结点 + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = e; + s->next = p->next; + p->next = s; + + return OK; +} + +/* + * ████████ 算法2.10 ████████ + * + * 删除 + * + * 删除链表第i个位置上的元素,并将被删除元素存储到e中。 + * 删除成功则返回OK,否则返回ERROR。 + * + *【备注】 + * 教材中i的含义是元素位置,从1开始计数 + */ +Status ListDelete(LinkList L, int i, ElemType* e) { + LinkList p, q; + int j; + + // 确保链表存在且不为空表 + if(L == NULL || L->next == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // 寻找第i-1个结点,且保证该结点的后继不为NULL + while(p->next != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // 如果遍历到头了,或者i的值不合规(比如i<=0),说明没找到合乎目标的结点 + if(p->next == NULL || j > i - 1) { + return ERROR; + } + + // 删除第i个结点 + q = p->next; + p->next = q->next; + *e = q->data; + free(q); + + return OK; +} diff --git a/CLion/CourseBook/0309_BankQueuing/LinkList.h b/CLion/CourseBook/0309_BankQueuing/LinkList.h new file mode 100644 index 0000000..2019135 --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/LinkList.h @@ -0,0 +1,83 @@ +/*=============================== + * 线性表的链式存储结构(链表) + * + * 包含算法: 2.8、2.9、2.10、2.11 + ================================*/ + +#ifndef LINKLIST_H +#define LINKLIST_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +// 事件类型枚举常量,0代表到达事件,1至4表示四个窗口的离开事件 +typedef enum { + Arrive, Leave_1, Leave_2, Leave_3, Leave_4 +} EventType; + +/* 事件链表元素类型定义 */ +typedef struct +{ + int OccurTime; // 事件发生时刻 + EventType NType; // 事件类型 +} Event, ElemType; // 事件链表元素 + +/* + * 单链表结构 + * + * 注:这里的单链表存在头结点 + */ +typedef struct LNode { + ElemType data; // 数据结点 + struct LNode* next; // 指向下一个结点的指针 +} LNode; + +// 指向单链表结点的指针 +typedef LNode* LinkList; + + +/* + * 初始化 + * + * 初始化成功则返回OK,否则返回ERROR。 + */ +Status InitList(LinkList* L); + +/* + * 判空 + * + * 判断链表中是否包含有效数据。 + * + * 返回值: + * TRUE : 链表为空 + * FALSE: 链表不为空 + */ +Status ListEmpty(LinkList L); + +/* + * ████████ 算法2.9 ████████ + * + * 插入 + * + * 向链表第i个位置上插入e,插入成功则返回OK,否则返回ERROR。 + * + *【备注】 + * 教材中i的含义是元素位置,从1开始计数 + */ +Status ListInsert(LinkList L, int i, ElemType e); + +/* + * ████████ 算法2.10 ████████ + * + * 删除 + * + * 删除链表第i个位置上的元素,并将被删除元素存储到e中。 + * 删除成功则返回OK,否则返回ERROR。 + * + *【备注】 + * 教材中i的含义是元素位置,从1开始计数 + */ +Status ListDelete(LinkList L, int i, ElemType* e); + +#endif diff --git a/CLion/CourseBook/0309_BankQueuing/LinkQueue.c b/CLion/CourseBook/0309_BankQueuing/LinkQueue.c new file mode 100644 index 0000000..1b526de --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/LinkQueue.c @@ -0,0 +1,138 @@ +/*========================= + * 队列的链式存储结构(链队) + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**▲03 栈和队列**// + +/* + * 初始化 + * + * 构造一个空的链队。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列带有头结点 + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * 判空 + * + * 判断链队中是否包含有效数据。 + * + * 返回值: + * TRUE : 链队为空 + * FALSE: 链队不为空 + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 计数 + * + * 返回链队包含的有效元素的数量。 + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +#endif diff --git a/CLion/CourseBook/0309_BankQueuing/LinkQueue.h b/CLion/CourseBook/0309_BankQueuing/LinkQueue.h new file mode 100644 index 0000000..c69dc47 --- /dev/null +++ b/CLion/CourseBook/0309_BankQueuing/LinkQueue.h @@ -0,0 +1,83 @@ +/*========================= + * 队列的链式存储结构(链队) + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // 提供malloc、realloc、free、exit原型 +#include "Status.h" //**▲01 绪论**// + +/* 链队元素类型定义,这里记录客户信息 */ +typedef struct { + int ArrivedTime; // 客户到达时间 + int Duration; // 办理业务所需的时间 + int Count; // 此变量记录来到每个队列的客户是第几个【教材中无此变量,增加此变量的目的是观察排队状况。】 +} QElemType; //队列的数据元素类型 + +// 队列元素结构 +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// 队列结构 +typedef struct { + QueuePtr front; // 队头指针 + QueuePtr rear; // 队尾指针 +} LinkQueue; // 队列的链式存储表示 + + +/* + * 初始化 + * + * 构造一个空的链队。 + * 初始化成功则返回OK,否则返回ERROR。 + * + *【注】 + * 这里的队列带有头结点 + */ +Status InitQueue(LinkQueue* Q); + +/* + * 判空 + * + * 判断链队中是否包含有效数据。 + * + * 返回值: + * TRUE : 链队为空 + * FALSE: 链队不为空 + */ +Status QueueEmpty(LinkQueue Q); + +/* + * 计数 + * + * 返回链队包含的有效元素的数量。 + */ +int QueueLength(LinkQueue Q); + +/* + * 取值 + * + * 获取队头元素,将其存储到e中。 + * 如果可以找到,返回OK,否则,返回ERROR。 + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * 入队 + * + * 将元素e添加到队列尾部。 + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * 出队 + * + * 移除队列头部的元素,将其存储到e中。 + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +#endif diff --git a/CLion/CourseBook/CMakeLists.txt b/CLion/CourseBook/CMakeLists.txt index b08f9c3..37ea433 100644 --- a/CLion/CourseBook/CMakeLists.txt +++ b/CLion/CourseBook/CMakeLists.txt @@ -9,3 +9,13 @@ add_subdirectory(0208_DuLinkList) add_subdirectory(0209_ELinkList) add_subdirectory(0210_MergeEList) add_subdirectory(0211_Polynomial) + +add_subdirectory(0301_SqStack) +add_subdirectory(0302_Conversion) +add_subdirectory(0303_LineEdit) +add_subdirectory(0304_Maze) +add_subdirectory(0305_Expression) +add_subdirectory(0306_Hanoi) +add_subdirectory(0307_LinkQueue) +add_subdirectory(0308_SqQueue) +add_subdirectory(0309_BankQueuing) diff --git a/Dev-C++/CourseBook/0301_SqStack/SqStack-main.cpp b/Dev-C++/CourseBook/0301_SqStack/SqStack-main.cpp new file mode 100644 index 0000000..ae7df91 --- /dev/null +++ b/Dev-C++/CourseBook/0301_SqStack/SqStack-main.cpp @@ -0,0 +1,94 @@ +#include +#include "SqStack.h" //**03 ջͶ**// + +// ԺӡԪ +void PrintElem(SElemType e); + +int main(int argc, char** argv) { + SqStack S; + int i; + SElemType e; + + printf(" InitStack \n"); + { + printf(" ʼ˳ջ S ...\n"); + InitStack(&S); + } + PressEnterToContinue(); + + printf(" StackEmpty \n"); + { + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" Push \n"); + { + for(i = 1; i <= 6; i++) { + Push(&S, 2 * i); + printf(" \"%2d\" ѹջ S ...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" StackTraverse \n"); + { + printf(" S еԪΪS = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf(" StackLength \n"); + { + i = StackLength(S); + printf(" S ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" Pop \n"); + { + Pop(&S, &e); + printf(" ջԪ \"%d\" ջ...\n", e); + printf(" S еԪΪS = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf(" GetTop \n"); + { + GetTop(S, &e); + printf(" ջԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearStack \n"); + { + printf(" S ǰ"); + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + + ClearStack(&S); + + printf(" S "); + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyStack \n"); + { + printf(" S ǰ"); + S.base != NULL && S.top != NULL ? printf(" S ڣ\n") : printf(" S ڣ\n"); + + DestroyStack(&S); + + printf(" S "); + S.base != NULL && S.top != NULL ? printf(" S ڣ\n") : printf(" S ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// ԺӡԪ +void PrintElem(SElemType e) { + printf("%d ", e); +} diff --git a/Dev-C++/CourseBook/0301_SqStack/SqStack.cpp b/Dev-C++/CourseBook/0301_SqStack/SqStack.cpp new file mode 100644 index 0000000..6ae0e8b --- /dev/null +++ b/Dev-C++/CourseBook/0301_SqStack/SqStack.cpp @@ -0,0 +1,174 @@ +/*========================= + * ջ˳洢ṹ˳ջ + ==========================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ˳ջЧԪص + */ +int StackLength(SqStack S) { + if(S.base == NULL) { + return 0; + } + + return (int) (S.top - S.base); +} + +/* + * ȡֵ + * + * ջԪأeա + */ +Status GetTop(SqStack S, SElemType* e) { + if(S.base == NULL || S.top == S.base) { + return 0; + } + + // ıջԪ + *e = *(S.top - 1); + + return OK; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/Dev-C++/CourseBook/0301_SqStack/SqStack.dev b/Dev-C++/CourseBook/0301_SqStack/SqStack.dev new file mode 100644 index 0000000..76b38c8 --- /dev/null +++ b/Dev-C++/CourseBook/0301_SqStack/SqStack.dev @@ -0,0 +1,82 @@ +[Project] +FileName=SqStack.dev +Name=SqStack +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=3 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit1] +FileName=SqStack.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=SqStack.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit3] +FileName=SqStack-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0301_SqStack/SqStack.h b/Dev-C++/CourseBook/0301_SqStack/SqStack.h new file mode 100644 index 0000000..3a0d1a8 --- /dev/null +++ b/Dev-C++/CourseBook/0301_SqStack/SqStack.h @@ -0,0 +1,94 @@ +/*========================= + * ջ˳洢ṹ˳ջ + ==========================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S); + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * + * + * ˳ջЧԪص + */ +int StackLength(SqStack S); + +/* + * ȡֵ + * + * ջԪأeա + */ +Status GetTop(SqStack S, SElemType* e); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/Dev-C++/CourseBook/0302_Conversion/Conversion-main.cpp b/Dev-C++/CourseBook/0302_Conversion/Conversion-main.cpp new file mode 100644 index 0000000..2d99ac5 --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/Conversion-main.cpp @@ -0,0 +1,11 @@ +#include "Conversion.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + int i = 342391; + + printf("ʮתΪ˽...\n"); + + conversion(i); + + return 0; +} diff --git a/Dev-C++/CourseBook/0302_Conversion/Conversion.cpp b/Dev-C++/CourseBook/0302_Conversion/Conversion.cpp new file mode 100644 index 0000000..4df0cfa --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/Conversion.cpp @@ -0,0 +1,37 @@ +/*============== + * ת + * + * 㷨: 3.1 + ===============*/ + +#include "Conversion.h" //**03 ջͶ**// + +/* + * 㷨3.1 + * + * תָķǸʮתΪ˽ƺ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void conversion(int i) { + SqStack S; + SElemType e; + + InitStack(&S); + + // ˽ǰ0 + printf("ʮ %d תΪ˽Ϊ0", i); + + while(i!=0) { + Push(&S, i % 8); // ջʱӵλλ + i = i / 8; + } + + while(StackEmpty(S)==FALSE) { + Pop(&S, &e); // ջʱӸλλ + printf("%d", e); + } + + printf("\n"); +} diff --git a/Dev-C++/CourseBook/0302_Conversion/Conversion.dev b/Dev-C++/CourseBook/0302_Conversion/Conversion.dev new file mode 100644 index 0000000..99e5a05 --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/Conversion.dev @@ -0,0 +1,102 @@ +[Project] +FileName=Conversion.dev +Name=Conversion +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=5 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=Conversion-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=Conversion.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=SqStack.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=Conversion.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=SqStack.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0302_Conversion/Conversion.h b/Dev-C++/CourseBook/0302_Conversion/Conversion.h new file mode 100644 index 0000000..0371acf --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/Conversion.h @@ -0,0 +1,20 @@ +/*============== + * ת + * + * 㷨: 3.1 + ===============*/ + +#ifndef CONVERSION_H +#define CONVERSION_H + +#include +#include "SqStack.h" //**03 ջͶ**// + +/* + * 㷨3.1 + * + * תָķǸʮתΪ˽ƺ + */ +void conversion(int i); + +#endif diff --git a/Dev-C++/CourseBook/0302_Conversion/SqStack.cpp b/Dev-C++/CourseBook/0302_Conversion/SqStack.cpp new file mode 100644 index 0000000..7e16904 --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/SqStack.cpp @@ -0,0 +1,90 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/Dev-C++/CourseBook/0302_Conversion/SqStack.h b/Dev-C++/CourseBook/0302_Conversion/SqStack.h new file mode 100644 index 0000000..19e6cc1 --- /dev/null +++ b/Dev-C++/CourseBook/0302_Conversion/SqStack.h @@ -0,0 +1,59 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/Dev-C++/CourseBook/0303_LineEdit/LineEdit-main.cpp b/Dev-C++/CourseBook/0303_LineEdit/LineEdit-main.cpp new file mode 100644 index 0000000..56235b7 --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/LineEdit-main.cpp @@ -0,0 +1,18 @@ +#include +#include "LineEdit.h" //**03 ջͶ**// + +int main(int argc, char* argv[]) { + char* buf = "whli##ilr#e(s#*s)\noutcha@ putchar(*s=#++);"; //Ҫ¼ + + printf("ΪʾûıΪ\n"); + printf("%s\n\n", buf); + + printf("б༭...\n\n"); + + printf("ţ'#' ɾһԪء'@' ɾǰ\n"); + printf(" '\\n''\\0'\n"); + printf("մ洢Ϊ\n"); + LineEdit(buf); + + return 0; +} diff --git a/Dev-C++/CourseBook/0303_LineEdit/LineEdit.cpp b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.cpp new file mode 100644 index 0000000..cf00861 --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.cpp @@ -0,0 +1,71 @@ +/*============== + * б༭ + * + * 㷨: 3.2 + ===============*/ + +#include "LineEdit.h" //**03 ջͶ**// + +/* + * 㷨3.2 + * + * б༭ģ༭ıʱ˸еIJ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void LineEdit(const char buffer[]) { + SqStack S; //ַ + SElemType e; + int i; + char ch; + + // ʼջ + InitStack(&S); + + i = 0; + ch = buffer[i++]; + + // δıĩβ + while(ch != EOF) { + // δıĩβұδδУ + while(ch != EOF && ch != '\n') { + switch(ch) { + case '#': + Pop(&S, &e); // '#'ʾɾһַ + break; + case '@': + ClearStack(&S); // '@'ʾյǰ + break; + default : + Push(&S, ch); // Чַջ + } + + // ʶһַ + ch = buffer[i++]; + } + + // ֮ǰǰջݣ˴̲û + StackTraverse(S, Print); + + // ոеĻ + ClearStack(&S); + + // δıĩβ˵'\n'н + if(ch != EOF) { + // һ + ch = buffer[i++]; + } + } + + // ѾıĩβĿǰջеԪأ˴̲û + StackTraverse(S, Print); + + // ջ + DestroyStack(&S); +} + +// ԺӡԪ +void Print(SElemType e) { + printf("%c", e); +} diff --git a/Dev-C++/CourseBook/0303_LineEdit/LineEdit.dev b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.dev new file mode 100644 index 0000000..4f419e3 --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.dev @@ -0,0 +1,102 @@ +[Project] +FileName=LineEdit.dev +Name=LineEdit +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=5 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=LineEdit-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=LineEdit.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=SqStack.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=LineEdit.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=SqStack.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0303_LineEdit/LineEdit.h b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.h new file mode 100644 index 0000000..528960b --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/LineEdit.h @@ -0,0 +1,33 @@ +/*============== + * б༭ + * + * 㷨: 3.2 + ===============*/ + +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include +#include "SqStack.h" //**03 ջͶ**// +#include "LineEdit.h" + +// ģļеıǣҪеĶ +#ifdef EOF +#undef EOF +#define EOF '\0' +#endif + +/* + * 㷨3.2 + * + * б༭ģ༭ıʱ˸еIJ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void LineEdit(const char buffer[]); + +// ԺӡԪ +void Print(SElemType e); + +#endif diff --git a/Dev-C++/CourseBook/0303_LineEdit/SqStack.cpp b/Dev-C++/CourseBook/0303_LineEdit/SqStack.cpp new file mode 100644 index 0000000..d089f26 --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/SqStack.cpp @@ -0,0 +1,128 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/Dev-C++/CourseBook/0303_LineEdit/SqStack.h b/Dev-C++/CourseBook/0303_LineEdit/SqStack.h new file mode 100644 index 0000000..7382c02 --- /dev/null +++ b/Dev-C++/CourseBook/0303_LineEdit/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S); + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/Dev-C++/CourseBook/0304_Maze/Maze-main.cpp b/Dev-C++/CourseBook/0304_Maze/Maze-main.cpp new file mode 100644 index 0000000..1e2246a --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/Maze-main.cpp @@ -0,0 +1,20 @@ +#include "Maze.h" //**03 ջͶ**// + +int main(int argc, char* argv[]) { + MazeType maze; + PosType start, end; + char n, Re = 'Y'; + + while(Re == 'Y' || Re == 'y') { + InitMaze(maze, &start, &end); // ʼԹ + + MazePath(maze, start, end); // ԹѰ· + + printf("ãY/N"); + scanf("%c%c", &Re, &n); + + printf("\n"); + } + + return 0; +} diff --git a/Dev-C++/CourseBook/0304_Maze/Maze.cpp b/Dev-C++/CourseBook/0304_Maze/Maze.cpp new file mode 100644 index 0000000..cb2dca1 --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/Maze.cpp @@ -0,0 +1,294 @@ +/*============== + * ԹѰ· + * + * 㷨: 3.3 + ===============*/ + +#include "Maze.h" //**03 ջͶ**// + +/* + * 㷨3.3 + * + * ԹѰ· + * + * ʹٷҵһͨ· + */ +Status MazePath(MazeType maze, PosType start, PosType end) { + SqStack S; // 洢̽ͨ + SElemType e; // e洢ǰͨϢ + PosType curPos; // ǰλ + int curStep; // ǰͨ + + // ʼ켣ջ + InitStack(&S); + + curPos = start; // 趨ǰλΪ"λ" + curStep = 1; // ̽һ + + do { + // ǰλÿͨҪλǴδ̽ͨ飩 + if(Pass(maze, curPos)) { + // ³ʼ㼣򶫷ʵı + FootPrint(maze, curPos); + + // һͨϢ + e = Construct(curStep, curPos, East); + + // · + Push(&S, e); + + // յ + if(Equals(curPos, end) == TRUE) { + printf("\nѰ·ɹ\n\n"); + return TRUE; + } + + // ȡһӦ̽λãǰλõĶ + curPos = NextPos(curPos, East); + + // ̽һ + curStep++; + + // ǰλѾ̽ˣ޸̽ + } else { + // ջΪգ̽ıҪ + if(!StackEmpty(S)) { + // ˵һλ + Pop(&S, &e); + + // ̽λõ4̽Ҫ + while(e.di == North && !StackEmpty(S)) { + // "ͬ"ǣӸλó·ûͨ· + MarkPrint(maze, e.seat, Impasse); + + // + Pop(&S, &e); + } + + // ̽λûʣ̽ķ + if(e.di < North) { + // ı̽򣬰ķѯ + ++e.di; + + // Թ·ʱǣ۲Թ״̬̲ûиò裩 + MarkPrint(maze, e.seat, e.di); + + // ½λü뵽· + Push(&S, e); + + // ȡһӦ̽λ + curPos = NextPos(e.seat, e.di); + } + } + } + + // ջΪգζŻ̽ıҪ + } while(!StackEmpty(S)); + + printf("\nѰ·ʧܣ\n\n"); + + return FALSE; +} + +/* + * ʼһģΪNNԹ + * startendֱΪԹͳ + * + *ע + * ̲޴˲òDZڵ + */ +void InitMaze(MazeType maze, PosType* start, PosType* end) { + int i, j, tmp; + + srand((unsigned) time(NULL)); // ϵͳʱ + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + + // Թǽ + if(i == 0 || j == 0 || i == M - 1 || j == N - 1) { + maze[i][j] = Wall; + + // Թڲ + } else { + tmp = rand() % X; // [0, X-1]Թ + + if(tmp == 0) { + // 1/Xĸϰ + maze[i][j] = Obstacle; + } else { + // طΪɱͨ· + maze[i][j] = Way; + } + } + } + } + + // Թ + (*start).x = 1; + (*start).y = 0; + + // Թ + (*end).x = M - 2; + (*end).y = N - 1; + + // ںͳ + maze[1][0] = maze[M - 2][N - 1] = Way; + + // ΪѰ·ɹʣڴͳڴٽĽΪͨ·DZ + maze[1][1] = maze[M - 2][N - 2] = Way; + + // ʾԹijʼ״̬ + PaintMaze(maze); +} + +/* + * жϵǰλǷͨҪλǴδ̽ͨ + * + *ע + * ΪжϵǰλǷΪ״̽ + */ +Status Pass(MazeType maze, PosType seat) { + int x = seat.x; + int y = seat.y; + + // ȼǷԽ磬Խˣǰλÿ϶޷ͨ + if(x < 0 || y < 0 || x > M - 1 || y > N - 1) { + return FALSE; //Խ + } + + // ҪλñǴδ̽ͨ + if(maze[x][y] != Way) { + return FALSE; + } + + return TRUE; +} + +/* + * ȡһӦ̽λ + * diָʾǰλõ̽򣬰East, South, West, North + */ +PosType NextPos(PosType seat, int di) { + PosType tmp = seat; + + switch(di) { + case East: + tmp.y++; // + break; + case South: + tmp.x++; // + break; + case West: + tmp.y--; // + break; + case North: + tmp.x--; // + break; + } + + return tmp; +} + +/* + * ³ʼ㼣 + * + * ʼ㼣򶫷 + */ +void FootPrint(MazeType maze, PosType seat) { + //ʼ̽ + MarkPrint(maze, seat, East); +} + +/* + * Թseatmark + * + *ע + * ú̲ϵĺ + * ֻ̲ô˺"̽"ı + * ˴ĺĽΪǣ̽ı + */ +void MarkPrint(MazeType maze, PosType seat, int mark) { + int x = seat.x; + int y = seat.y; + + maze[x][y] = mark; //²ͨı + + // Թ + PaintMaze(maze); +} + +/* + * һͨϢ + * + *ע + * ̲д˲޴˺ + */ +SElemType Construct(int ord, PosType seat, int di) { + SElemType e; + + e.ord = ord; + e.seat = seat; + e.di = di; + + return e; +} + +/* + * жǷ + * + *ע + * ̲д˲޴˺ + * ΪҪȽṹ壬Բֱ"==" + */ +Status Equals(PosType seat1, PosType seat2) { + if(seat1.x == seat2.x && seat1.y == seat2.y) { + return TRUE; + } else { + return ERROR; + } +} + +/* + * Թ + * ͼεķʽԹǰ״̬ + * + *ע + * 1.̲޴˲˴ӸòĿǹ۲Ѱ·̵ÿһ + * 2.ʵCLionĿ̨ + */ +void PaintMaze(MazeType maze) { + int i, j; + + Wait(SleepTime); // ͣһ + + system("cls"); // Ļ + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + if(maze[i][j] == Wall) { // ǽ + printf("~"); + } else if(maze[i][j] == Obstacle) { // Թڲϰ + printf(""); + } else if(maze[i][j] == East) { // ڳ̽ + printf(""); + } else if(maze[i][j] == South) { // ڳ̽ + printf(""); + } else if(maze[i][j] == West) { // ڳ̽ + printf(""); + } else if(maze[i][j] == North) { // ڳ̽ + printf(""); + } else if(maze[i][j] == Impasse) { // ͬĸ̽޷ͨλ + printf(""); + } else { // δ̽· + printf(""); + } + + if(j != 0 && j % (N - 1) == 0) { // ÿN㻻 + printf("\n"); + } + } + } + + printf("\n"); +} diff --git a/Dev-C++/CourseBook/0304_Maze/Maze.dev b/Dev-C++/CourseBook/0304_Maze/Maze.dev new file mode 100644 index 0000000..dfad10c --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/Maze.dev @@ -0,0 +1,102 @@ +[Project] +FileName=Maze.dev +Name=Maze +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=5 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=Maze-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=Maze.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=SqStack.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=Maze.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=SqStack.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0304_Maze/Maze.h b/Dev-C++/CourseBook/0304_Maze/Maze.h new file mode 100644 index 0000000..d18a67a --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/Maze.h @@ -0,0 +1,112 @@ +/*============== + * ԹѰ· + * + * 㷨: 3.3 + ===============*/ + +#ifndef MAZE_H +#define MAZE_H + +#include +#include // ṩsystemrandsrandԭ +#include // ṩtimeԭ +#include "Status.h" //**01 **// +#include "SqStack.h" //**03 ջͶ**// + +/* 궨 */ +#define M 15 // Թ +#define N 15 // Թ + +#define X 4 // XָʾԹϰֵĸʡ磬X=4ζűԹʱϰĸ1/4=25% + +#define SleepTime 3 //SleepTimeӡͼʱʱ + +/* ԹͶ */ +typedef enum { + Wall, // ǽ + Obstacle, // Թڲϰ + Way, // ͨ· + Impasse, // ͬ + East, South, West, North // ǰ̽򣺶 +} MazeNode; + +typedef int MazeType[M][N]; // Թ + + +/* + * 㷨3.3 + * + * ԹѰ· + * + * ʹٷҵһͨ· + */ +Status MazePath(MazeType maze, PosType start, PosType end); + +/* + * ʼһģΪNNԹ + * startendֱΪԹͳ + * + *ע + * ̲޴˲òDZڵ + */ +void InitMaze(MazeType maze, PosType* start, PosType* end); + +/* + * жϵǰλǷͨҪλǴδ̽ͨ + * + *ע + * ΪжϵǰλǷΪ״̽ + */ +Status Pass(MazeType maze, PosType seat); + +/* + * ȡһӦ̽λ + * diָʾǰλõ̽򣬰East, South, West, North + */ +PosType NextPos(PosType seat, int di); + +/* + * ³ʼ㼣 + * + * ʼ㼣򶫷 + */ +void FootPrint(MazeType maze, PosType seat); + +/* + * Թseatmark + * + *ע + * ú̲ϵĺ + * ֻ̲ô˺"̽"ı + * ˴ĺĽΪǣ̽ı + */ +void MarkPrint(MazeType maze, PosType seat, int mark); + +/* + * һͨϢ + * + *ע + * ̲д˲޴˺ + */ +SElemType Construct(int ord, PosType seat, int di); + +/* + * жǷ + * + *ע + * ̲д˲޴˺ + * ΪҪȽṹ壬Բֱ"==" + */ +Status Equals(PosType a, PosType b); + +/* + * Թ + * ͼεķʽԹǰ״̬ + * + *ע + * ̲޴˲ + * ˴ӸòĿǹ۲Ѱ·̵ÿһ + */ +void PaintMaze(MazeType maze); + +#endif diff --git a/Dev-C++/CourseBook/0304_Maze/SqStack.cpp b/Dev-C++/CourseBook/0304_Maze/SqStack.cpp new file mode 100644 index 0000000..7e16904 --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/SqStack.cpp @@ -0,0 +1,90 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/Dev-C++/CourseBook/0304_Maze/SqStack.h b/Dev-C++/CourseBook/0304_Maze/SqStack.h new file mode 100644 index 0000000..bbd553e --- /dev/null +++ b/Dev-C++/CourseBook/0304_Maze/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +// Թͨ +typedef struct { + int x; // ͨĺᡢ궨 + int y; +} PosType; + +/* ͨϢԹ㷨 */ +typedef struct { + int ord; // ͨġš + PosType seat; // ͨġλá + int di; // һӦʵġ +} SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/Dev-C++/CourseBook/0305_Expression/Expression-main.cpp b/Dev-C++/CourseBook/0305_Expression/Expression-main.cpp new file mode 100644 index 0000000..9186009 --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/Expression-main.cpp @@ -0,0 +1,12 @@ +#include "Expression.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + char opnd; + char* exp = "(1+3)*2/4#"; + + opnd = EvaluateExpression(exp); + + printf("Ϊʾ %s ļΪ%d\n", exp, opnd - '0'); + + return 0; +} diff --git a/Dev-C++/CourseBook/0305_Expression/Expression.cpp b/Dev-C++/CourseBook/0305_Expression/Expression.cpp new file mode 100644 index 0000000..0bfa743 --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/Expression.cpp @@ -0,0 +1,139 @@ +/*============== + * ʽ + * + * 㷨: 3.4 + ===============*/ + +#include "Expression.h" //**03 ջͶ**// + +/* + * 㷨3.4 + * + * expʽʽ + * + *ע + * 1.̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + * 2.ü㹦ޣϽֶ֧Ըλ㣬ҪÿһҲǸλ + * ̲ṩ㷨Ŀ֤ջʹãչ֧֣Բ֧֣ + * ˳Ŵ˼·иİ + */ +OperandType EvaluateExpression(const char exp[]) { + SElemType c; // + + SqStack OPTR; // ջ + SqStack OPND; // ջ + + OperatorType theta, x; // + OperandType a, b; // + + int i = 0; + + // ʼջһ޷'#'ջ + InitStack(&OPTR); + Push(&OPTR, '#'); + + // ʼջʼȡ + InitStack(&OPND); + c = exp[i++]; + + // ޷'#'ջջԪҲǽ޷'#'ʱʾȡ + while(c != '#' || GetTop(OPTR) != '#') { + // chΪջ + if(!In(c, OP)) { + Push(&OPND, c); // ջ + c = exp[i++]; // ȡһַ + } else { + switch(Precede(GetTop(OPTR), c)) { + // ջȼͣջ + case '<': + Push(&OPTR, c); + c = exp[i++]; + break; + + // ȼʱ˵ţҪ + case '=': + Pop(&OPTR, &x); + c = exp[i++]; + break; + + /* + * ջȼʱȼ㣬ٽѹջ + * + * עûжַcĻǸղŶַ + */ + case '>': + Pop(&OPTR, &theta); // + Pop(&OPND, &b); // ұߵIJ + Pop(&OPND, &a); // ߵIJ + Push(&OPND, Operate(a, theta, b)); + break; + } + } + } + + return GetTop(OPND); +} + +// жָǷϹ +Status In(SElemType c, const char OP[]) { + + SElemType* e = strchr(OP, c); + + // cںϹ淶Χڣ˵ָϹ + if(e == NULL) { + return FALSE; + } else { + return TRUE; + } +} + +/* + * жջвo1ʽеIJo2ȼ + * + * '>''<''='ָʾo1o2ȼ + */ +OperatorType Precede(OperatorType o1, OperatorType o2) { + int x, y; + + // ȡָеλ + char* p1 = strchr(OP, o1); + char* p2 = strchr(OP, o2); + + // һȼ + x = p1 - OP; + y = p2 - OP; + + return PrecedeTable[x][y]; +} + +/* + * Բ + * + * abDztheta + * ڲ֤Ըλ֧ + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b) { + int x, y, z = CHAR_MAX - 48; + + // ȴַתΪ + x = a - '0'; + y = b - '0'; + + switch(theta) { + case '+': + z = x + y; + break; + case '-': + z = x - y; + break; + case '*': + z = x * y; + break; + case '/': + z = x / y; + break; + } + + // ɺ󣬽תΪַͷ + return z + 48; +} diff --git a/Dev-C++/CourseBook/0305_Expression/Expression.dev b/Dev-C++/CourseBook/0305_Expression/Expression.dev new file mode 100644 index 0000000..d4f0e73 --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/Expression.dev @@ -0,0 +1,102 @@ +[Project] +FileName=Expression.dev +Name=Expression +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=5 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=Expression-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=Expression.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=SqStack.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=Expression.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=SqStack.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0305_Expression/Expression.h b/Dev-C++/CourseBook/0305_Expression/Expression.h new file mode 100644 index 0000000..0250fa6 --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/Expression.h @@ -0,0 +1,70 @@ +/*============== + * ʽ + * + * 㷨: 3.4 + ===============*/ + +#ifndef EXPRESSION_H +#define EXPRESSION_H + +#include +#include +#include +#include "SqStack.h" //**03 ջͶ**// + +typedef SElemType OperatorType; // +typedef SElemType OperandType; // + +// ʽֵķţ޷'#' +static const char OP[] = {'+', '-', '*', '/', '(', ')', '#'}; + +/* + * ȼ޷'#'OPǺӦġ + * ɲμ̲е"ȹϵ" + */ +static const char PrecedeTable[7][7] = {{'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'<', '<', '<', '<', '<', '=', ' '}, + {'>', '>', '>', '>', ' ', '>', '>'}, + {'<', '<', '<', '<', '<', ' ', '='}}; + + +/* + * 㷨3.4 + * + * expʽʽ + * + *ע + * 1.̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + * 2.ü㹦ޣϽֶ֧Ըλ㣬ҪÿһҲǸλ + * ̲ṩ㷨Ŀ֤ջʹãչ֧֣Բ֧֣ + * ˳Ŵ˼·иİ + */ +OperandType EvaluateExpression(const char exp[]); + +/* + * жָǷϹ + * + * OPд洢˺Ϲ޷'#' + */ +Status In(SElemType c, const char OP[]); + +/* + * жջвo1ʽеIJo2ȼ + * + * '>''<''='ָʾo1o2ȼ + */ +OperatorType Precede(OperatorType o1, OperatorType o2); + +/* + * Բ + * + * abDztheta + * ڲֶԸλ֧ + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b); + + +#endif diff --git a/Dev-C++/CourseBook/0305_Expression/SqStack.cpp b/Dev-C++/CourseBook/0305_Expression/SqStack.cpp new file mode 100644 index 0000000..30e35ab --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/SqStack.cpp @@ -0,0 +1,111 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ȡֵ + * + * ȡջջԪء + * + *ע + * òʵ봫ͳ˳ջȡֵЩͬһ + */ +SElemType GetTop(SqStack S) { + SElemType e; + + if(S.base == NULL || S.top == S.base) { + return '\0'; + } + + // ıջԪ + e = *(S.top - 1); + + return e; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/Dev-C++/CourseBook/0305_Expression/SqStack.h b/Dev-C++/CourseBook/0305_Expression/SqStack.h new file mode 100644 index 0000000..74a388a --- /dev/null +++ b/Dev-C++/CourseBook/0305_Expression/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ʽԪͶ */ +typedef char SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ȡֵ + * + * ȡջջԪء + * + *ע + * òʵ봫ͳ˳ջȡֵЩͬһ + */ +SElemType GetTop(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/Dev-C++/CourseBook/0306_Hanoi/Hanoi-main.cpp b/Dev-C++/CourseBook/0306_Hanoi/Hanoi-main.cpp new file mode 100644 index 0000000..b05e34f --- /dev/null +++ b/Dev-C++/CourseBook/0306_Hanoi/Hanoi-main.cpp @@ -0,0 +1,15 @@ +#include "Hanoi.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + char x = 'x'; + char y = 'y'; + char z = 'z'; + + printf("ΪʾԲ̸Ϊ %d ...\n", N); + + init(N); + + hanoi(N, x, y, z); + + return 0; +} diff --git a/Dev-C++/CourseBook/0306_Hanoi/Hanoi.cpp b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.cpp new file mode 100644 index 0000000..c772b44 --- /dev/null +++ b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.cpp @@ -0,0 +1,133 @@ +/*============== + * ŵ + * + * 㷨: 3.5 + ===============*/ + +#include "Hanoi.h" //**03 ջͶ**// + +/* + * 㷨3.5 + * + * ŵ⣺yΪxǰnԲƶz + */ +void hanoi(int n, char x, char y, char z) { + if(n == 1) { // ƶnԲ̣ƶϵn-1Բ + move(x, 1, z); // Ϊ1Բ̴xƵz + } else { + hanoi(n - 1, x, z, y); // xϱΪ1n-1ԲƵyz + move(x, n, z); // ΪnԲ̴xƵz + hanoi(n - 1, y, x, z); // yϱΪ1n-1Բƶzx + } +} + +void move(char x, int n, char z) { + // stepΪȫֱmain֮ⶨ + gStep++; + printf("%2d %d Բ̴ %c Ƶ %c \n", gStep, n, x, z); + + // ŵƶͼαʾ + PrintGraph(x, n, z); +} + +/* + * ŵͼϢʼ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void init(int n) { + int i; + int* towerX, * towerY, * towerZ; + + T.plates = (int**) malloc(3 * sizeof(int*)); + + towerX = (int*) malloc(n * sizeof(int)); + towerY = (int*) malloc(n * sizeof(int)); + towerZ = (int*) malloc(n * sizeof(int)); + + for(i = 0; i < n; ++i) { + towerX[i] = n-i; + towerY[i] = 0; + towerZ[i] = 0; + } + + T.plates[0] = towerX; + T.plates[1] = towerY; + T.plates[2] = towerZ; + + T.high[0] = n; + T.high[1] = 0; + T.high[2] = 0; + + // ŵƶͼαʾ + PrintGraph('\0', 0, '\0'); +} + +/* + * ŵƶͼαʾ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void PrintGraph(char t1, int n, char t2){ + int i, j; + char** s; + + // nӴt1Ƴ + if(t1=='x') { + T.plates[0][T.high[0]-1] = 0; + T.high[0]--; + } else if(t1=='y') { + T.plates[1][T.high[1]-1] = 0; + T.high[1]--; + } else if(t1=='z') { + T.plates[2][T.high[2]-1] = 0; + T.high[2]--; + } else { + // t1ϵԲ̲Ҫƶ + } + + // nӵt2 + if(t2=='x') { + T.plates[0][T.high[0]] = n; + T.high[0]++; + } else if(t2=='y') { + T.plates[1][T.high[1]] = n; + T.high[1]++; + } else if(t2=='z') { + T.plates[2][T.high[2]] = n; + T.high[2]++; + } else { + // t2ϵԲ̲Ҫƶ + } + + s = (char**)malloc((N+2)*sizeof(char*)); + for(i = 0; i= 0; i--) { + printf("%-*s | %-*s | %-*s\n", N, s[T.plates[0][i]], N, s[T.plates[1][i]], N, s[T.plates[2][i]]); + } + printf("%-*s + %-*s + %-*s\n", N, s[N+1], N, s[N+1], N, s[N+1]); + printf("%-*s %-*s %-*s\n", N+2, "x", N+2, "y", N+2, "z"); + + printf("\n"); +} diff --git a/Dev-C++/CourseBook/0306_Hanoi/Hanoi.dev b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.dev new file mode 100644 index 0000000..bc829ef --- /dev/null +++ b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.dev @@ -0,0 +1,82 @@ +[Project] +FileName=Hanoi.dev +Name=Hanoi +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=3 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=Hanoi-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=Hanoi.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=Hanoi.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0306_Hanoi/Hanoi.h b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.h new file mode 100644 index 0000000..9ff9730 --- /dev/null +++ b/Dev-C++/CourseBook/0306_Hanoi/Hanoi.h @@ -0,0 +1,59 @@ +/*============== + * ŵ + * + * 㷨: 3.5 + ===============*/ + +#ifndef HANOI_H +#define HANOI_H + +#include +#include +#include "Status.h" + +#define N 5 // ŵ + +// ŵͼϢ +typedef struct { + int** plates; // ŵеԲϢ + int high[3]; // ĸ߶ȣе +} Tower; + +// ŵ +static Tower T; + +// ͳƶ +static int gStep; + + +/* + * 㷨3.5 + * + * ŵ⣺yΪxǰnԲƶz + */ +void hanoi(int n, char x, char y, char z); + +/* + * ƶŵԲ̣nԲ̴xƵz + */ +void move(char x, int n, char z); + +/* + * ŵͼϢʼ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void init(int n); + +/* + * ŵƶͼαʾμmove() + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void PrintGraph(char x, int n, char z); + +#endif diff --git a/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue-main.cpp b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue-main.cpp new file mode 100644 index 0000000..1e71482 --- /dev/null +++ b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue-main.cpp @@ -0,0 +1,94 @@ +#include +#include "LinkQueue.h" //**03 ջͶ**// + +// Ժӡ +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + LinkQueue Q; + int i; + QElemType e; + + printf(" InitQueue \n"); + { + printf(" ʼ Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf(" QueueEmpty \n"); + { + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" EnQueue \n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf(" Ԫ \"%2d\" ...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" QueueTraverse \n"); + { + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" QueueLength \n"); + { + i = QueueLength(Q); + printf(" Q ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" DeQueue \n"); + { + DeQueue(&Q, &e); + printf(" ͷԪ \"%d\" ...\n", e); + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" GetHead \n"); + { + GetHead(Q, &e); + printf(" ͷԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearQueue \n"); + { + printf(" Q ǰ"); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + + ClearQueue(&Q); + + printf(" Q "); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyQueue \n"); + { + printf(" Q ǰ"); + Q.front != NULL && Q.rear != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + + DestroyQueue(&Q); + + printf(" Q "); + Q.front != NULL && Q.rear != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// Ժӡ +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.cpp b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.cpp new file mode 100644 index 0000000..ba578f3 --- /dev/null +++ b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.cpp @@ -0,0 +1,204 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * (ṹ) + * + * ͷռڴ档 + */ +Status DestroyQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + while((*Q).front) { + (*Q).rear = (*Q).front->next; + free((*Q).front); + (*Q).front = (*Q).rear; + } + + return OK; +} + +/* + * ÿ() + * + * Ҫͷзͷ㴦Ŀռ䡣 + */ +Status ClearQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).rear = (*Q).front->next; + + while((*Q).rear) { + (*Q).front->next = (*Q).rear->next; + free((*Q).rear); + (*Q).rear = (*Q).front->next; + } + + (*Q).rear = (*Q).front; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(LinkQueue Q, void (Visit)(QElemType)) { + QueuePtr p; + + if(Q.front == NULL) { + return ERROR; + } + + p = Q.front->next; + + while(p != NULL) { + Visit(p->data); + p = p->next; + } + + printf("\n"); + + return OK; +} + +#endif diff --git a/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.dev b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.dev new file mode 100644 index 0000000..e39d0e7 --- /dev/null +++ b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.dev @@ -0,0 +1,82 @@ +[Project] +FileName=LinkQueue.dev +Name=LinkQueue +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=3 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=LinkQueue-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=LinkQueue.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=LinkQueue.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.h b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.h new file mode 100644 index 0000000..42cc95b --- /dev/null +++ b/Dev-C++/CourseBook/0307_LinkQueue/LinkQueue.h @@ -0,0 +1,100 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* ԪͶ */ +typedef int QElemType; + +// Ԫؽṹ +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// нṹ +typedef struct { + QueuePtr front; // ͷָ + QueuePtr rear; // βָ +} LinkQueue; // еʽ洢ʾ + + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q); + +/* + * (ṹ) + * + * ͷռڴ档 + */ +Status DestroyQueue(LinkQueue* Q); + +/* + * ÿ() + * + * Ҫͷзͷ㴦Ŀռ䡣 + */ +Status ClearQueue(LinkQueue* Q); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q); + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(LinkQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/Dev-C++/CourseBook/0308_SqQueue/SqQueue-main.cpp b/Dev-C++/CourseBook/0308_SqQueue/SqQueue-main.cpp new file mode 100644 index 0000000..c4a59d3 --- /dev/null +++ b/Dev-C++/CourseBook/0308_SqQueue/SqQueue-main.cpp @@ -0,0 +1,94 @@ +#include +#include "SqQueue.h" //**03 ջͶ**// + +// Ժӡ +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + SqQueue Q; + int i; + QElemType e; + + printf(" InitQueue ...\n"); + { + printf(" ʼѭ˳ Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf(" QueueEmpty ...\n"); + { + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" EnQueue ...\n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf(" Ԫ \"%2d\" Q...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" QueueTraverse ...\n"); + { + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" QueueLength ...\n"); + { + i = QueueLength(Q); + printf(" Q ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" DeQueue ...\n"); + { + DeQueue(&Q, &e); + printf(" ͷԪ \"%d\" ...\n", e); + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" GetHead ...\n"); + { + GetHead(Q, &e); + printf(" ͷԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearQueue ...\n"); + { + printf(" Q ǰ"); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + + ClearQueue(&Q); + + printf(" Q "); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyQueue ...\n"); + { + printf(" Q ǰ"); + Q.base != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + + DestroyQueue(&Q); + + printf(" Q "); + Q.base != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// Ժӡ +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/Dev-C++/CourseBook/0308_SqQueue/SqQueue.cpp b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.cpp new file mode 100644 index 0000000..6079495 --- /dev/null +++ b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.cpp @@ -0,0 +1,182 @@ +/*============================= + * е˳洢ṹ˳У + ==============================*/ + +#include "SqQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյ˳С + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķѭ + */ +Status InitQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).base = (QElemType*) malloc(MAXQSIZE * sizeof(QElemType)); + if(!(*Q).base) { + exit(OVERFLOW); + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * (ṹ) + * + * ͷѭ˳ռڴ档 + */ +Status DestroyQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + if((*Q).base) { + free((*Q).base); + } + + (*Q).base = NULL; + (*Q).front = (*Q).rear = 0; + + return ERROR; +} + +/* + * ÿ() + * + * ֻѭ˳д洢ݣͷ˳ջռڴ档 + */ +Status ClearQueue(SqQueue* Q) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * п + * + * жѭ˳ǷЧݡ + * + * ֵ + * TRUE : ѭ˳Ϊ + * FALSE: ѭ˳вΪ + */ +Status QueueEmpty(SqQueue Q) { + // пյı־ + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ѭ˳аЧԪص + */ +int QueueLength(SqQueue Q) { + if(Q.base == NULL) { + return 0; + } + + // г + return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(SqQueue Q, QElemType* e) { + // пյı־ + if(Q.base == NULL || Q.front == Q.rear) { + return ERROR; + } + + *e = Q.base[Q.front]; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(SqQueue* Q, QElemType e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // ı־˷һռֶпպͶ + if(((*Q).rear + 1) % MAXQSIZE == (*Q).front) { + return ERROR; + } + + // + (*Q).base[(*Q).rear] = e; + + // βָǰ + (*Q).rear = ((*Q).rear + 1) % MAXQSIZE; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(SqQueue* Q, QElemType* e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // пյı־ + if((*Q).front == (*Q).rear) { + return ERROR; + } + + // + *e = (*Q).base[(*Q).front]; + + // ͷָǰ + (*Q).front = ((*Q).front + 1) % MAXQSIZE; + + return OK; +} + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)) { + int i; + + if(Q.base == NULL) { + return ERROR; + } + + for(i = Q.front; i != Q.rear; i = (i + 1) % MAXQSIZE) { + Visit(Q.base[i]); + } + + printf("\n"); + + return OK; +} diff --git a/Dev-C++/CourseBook/0308_SqQueue/SqQueue.dev b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.dev new file mode 100644 index 0000000..f5efc2d --- /dev/null +++ b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.dev @@ -0,0 +1,82 @@ +[Project] +FileName=SqQueue.dev +Name=SqQueue +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=3 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=SqQueue-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=SqQueue.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=SqQueue.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0308_SqQueue/SqQueue.h b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.h new file mode 100644 index 0000000..18c3ba7 --- /dev/null +++ b/Dev-C++/CourseBook/0308_SqQueue/SqQueue.h @@ -0,0 +1,98 @@ +/*============================= + * е˳洢ṹ˳У + ==============================*/ + +#ifndef SQQUEUE_H +#define SQQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define MAXQSIZE 1000 //г + +/* ѭԪͶ */ +typedef int QElemType; + +// ѭе˳洢ṹ +typedef struct { + QElemType* base; // ̬洢ռ + int front; // ͷָ룬вգָͷԪ + int rear; // βָ룬вգָβԪصһλ +} SqQueue; + + +/* + * ʼ + * + * һյ˳С + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķѭ + */ +Status InitQueue(SqQueue* Q); + +/* + * (ṹ) + * + * ͷѭ˳ռڴ档 + */ +Status ClearQueue(SqQueue* Q); + +/* + * ÿ() + * + * ֻѭ˳д洢ݣͷ˳ջռڴ档 + */ +Status DestroyQueue(SqQueue* Q); + +/* + * п + * + * жѭ˳ǷЧݡ + * + * ֵ + * TRUE : ѭ˳Ϊ + * FALSE: ѭ˳вΪ + */ +Status QueueEmpty(SqQueue Q); + +/* + * + * + * ѭ˳аЧԪص + */ +int QueueLength(SqQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(SqQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(SqQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(SqQueue* Q, QElemType* e); + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing-main.cpp b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing-main.cpp new file mode 100644 index 0000000..7e74c26 --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing-main.cpp @@ -0,0 +1,10 @@ +#include "BankQueuing.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + + Bank_Simulation_1(); //㷨3.6 + +// Bank_Simulation_2(); //㷨3.73.6 + + return 0; +} diff --git a/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.cpp b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.cpp new file mode 100644 index 0000000..836db55 --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.cpp @@ -0,0 +1,338 @@ +/*================== + * ģŶ + * + * 㷨: 3.63.7 + ===================*/ + +#ifndef BANKQUEUING_C +#define BANKQUEUING_C + +#include "BankQueuing.h" //**03 ջͶ**// + +/* + * 㷨3.6 + * + * ҵģ⣬ͳһڿͻжƽʱ + */ +void Bank_Simulation_1() +{ + char eventType; + + OpenForDay(); // п + + // ¼Ϊ + while(MoreEvent()) { + EventDrived(&eventType); // ¼ + + switch(eventType) { + case 'A': + CustomerArrived(); // ͻ¼ + break; + case 'D': + CustomerDeparture(); // ͻ뿪¼ + break; + default : + Invalid(); + } + } + + CloseForDay(); +} + +/* + * 㷨3.7 + * + * ҵģ⣬ͳһڿͻжƽʱ + * 㷨3.7Ƶ + */ +void Bank_Simulation_2() { + OpenForDay(); // п + + while(!ListEmpty(gEv)) { + ListDelete(gEv, 1, &gEn); + + if(gEn.NType == Arrive) { + CustomerArrived(); // ͻ¼ + } else { + CustomerDeparture(); // ͻ뿪¼ + } + } + + CloseForDay(); // й +} + +/* + * пţʼл + */ +void OpenForDay() { + int i; + + // ʱ,ÿӪҵ8Сʱ480 + gCloseTime = 480; + + // ʼۼʱͿͻΪ0 + gTotalTime = 0; + gCustomerNum = 0; + + // ʼ¼Ϊձ + InitList(&gEv); + + // 趨һͻ¼ + gEn.OccurTime = 0; + gEn.NType = Arrive; + + // ¼ + OrderInsert(gEv, gEn, cmp); + + // ʼ4ն + for(i = 1; i <= N; ++i) { + InitQueue(&gQ[i]); + } + + Show(); +} + +/* + * й + * + * ͷԴӡͳϢ + */ +void CloseForDay() { + printf("ܹ%dͻƽʱΪ%dӡ\n", gCustomerNum, gTotalTime / gCustomerNum); +} + +/* + * ж¼ǷΪա + * Ƿδ¼ + */ +Status MoreEvent() { + return !ListEmpty(gEv); +} + +/* + * ¼¼Ƴ¼洢ȫֱgEnС + * event洢¼ + */ +void EventDrived(char* eventType) { + // ¼лȡ¼ + ListDelete(gEv, 1, &gEn); + + // ʶ¼ + if(gEn.NType == Arrive) { + *eventType = 'A'; + } else { + *eventType = 'D'; + } +} + +/* + * ͻ¼gEn.NType=0 + */ +void CustomerArrived() { + Event en; // ¼ + QElemType customer; // ͻ¼ + + int durtime; // ǰͻҵҪʱ + + int intertime; // һͻﵽʱ + int t; // һͻʱ + + int i; // б + + // ܿͻһ + ++gCustomerNum; + + // ɵǰͻҵҪʱһͻﵽʱ + Random(&durtime, &intertime); + + // һͻʱ + t = gEn.OccurTime + intertime; + + // δţһͻ""¼¼ + if(t < gCloseTime) { + en.OccurTime = t; // һͻĵʱ + en.NType = Arrive; // ""¼ + OrderInsert(gEv, en, cmp); // ""¼¼ + } + + // ȡǰ̵Ķб + i = Minimum(); + + // ¼ǰͻϢ + customer.ArrivedTime = gEn.OccurTime; // ʱ + customer.Duration = durtime; // ҵʱ + customer.Count = gCustomerNum; // ͻ + + // ǰͻ̶Ŷ + EnQueue(&gQ[i], customer); + printf("%3dͻ %d Ŷ...\n", customer.Count, i); + Show(); + + /* + * ǰֻһͻŶӣҪ뿪ʱ䣬 + * һ"뿪"¼뵽¼ + */ + if(QueueLength(gQ[i]) == 1) { + en.OccurTime = gEn.OccurTime + durtime; // ǰͻ뿪ʱ + en.NType = EventType(i); // "뿪"¼ֵͣΪ1-4ָʾӵڼ뿪 + OrderInsert(gEv, en, cmp); // "뿪"¼¼ + } +} + +/* + * ͻ뿪¼gEn.NType>0 + */ +void CustomerDeparture() { + Event en; // ¼ + QElemType customer; // ͻ¼ + int i = gEn.NType; // б + + // iеĶͷͻҵ񲢳 + DeQueue(&gQ[i], &customer); + printf("%3dͻӶ %d 뿪...\n", customer.Count, i); + Show(); + + // ۼƿͻʱ + gTotalTime += gEn.OccurTime - customer.ArrivedTime; + + /* + * ǰȻŶӵĿͻҪöжͷͻ뿪ʱ + * ע֮㣬Ϊֻһͻ뿪ˣһͻ뿪ʱŻ + */ + if(!QueueEmpty(gQ[i])) { + // ȡͷͻ + GetHead(gQ[i], &customer); + en.OccurTime = gEn.OccurTime + customer.Duration; // "뿪"¼ʱ + en.NType = EventType(i); // "뿪"¼ + OrderInsert(gEv, en, cmp); // "뿪"¼¼ + } +} + +/* + * Ч¼ + */ +void Invalid() { + printf("д"); + exit(OVERFLOW); +} + +/* + * ¼en뵽¼evУevǰʱ絽е¼ + * cmpȽ¼enΪڶʵδȥ + */ +Status OrderInsert(EventList ev, Event en, int(cmp)(Event, Event)) { + EventList p, pre, s; + + if(ev == NULL) { + return ERROR; + } + + for(pre = ev; pre->next != NULL && cmp(pre->next->data, en) < 0; pre = pre->next) { + // + } + + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = en; + + s->next = pre->next; + pre->next = s; + + return OK; +} + +/* + * Ƚ¼ + */ +int cmp(Event a, Event b) { + if(a.OccurTime < b.OccurTime) { + return -1; // aȽ + } else if(a.OccurTime > b.OccurTime) { + return 1; // aȽ + } else { + return 0; // ͬʱ + } +} + +/* + * + * + * durtime ǰͷҵʱ + * intertimeһͻʱ + */ +void Random(int* durtime, int* intertime) { + srand((unsigned) time(NULL)); + *durtime = rand() % DurationTime + 1; // ҵʱ120 + *intertime = rand() % IntervalTime + 1; // һ˿͵ʱΪ110 +} + +/* + * س̵Ķе + */ +int Minimum() { + int i1 = QueueLength(gQ[1]); + int i2 = QueueLength(gQ[2]); + int i3 = QueueLength(gQ[3]); + int i4 = QueueLength(gQ[4]); + + if(i1 <= i2 && i1 <= i3 && i1 <= i4) { + return 1; + } + + if(i2 < i1 && i2 <= i3 && i2 <= i4) { + return 2; + } + + if(i3 < i1 && i3 < i2 && i3 <= i4) { + return 3; + } + + if(i4 < i1 && i4 < i2 && i4 < i3) { + return 4; + } + + return 0; +} + +/* + * ʾпͻеŶ + */ +void Show() { + int i; + QueuePtr p; // ¼Ŀͻǵڼ + + // пͻ + for(i = 1; i <= N; i++) { + for(p = gQ[i].front; p; p = p->next) { + if(p == gQ[i].front) { + if(i == 1) { + printf("̨١"); + } + if(i == 2) { + printf("̨ڡ"); + } + if(i == 3) { + printf("̨ۡ"); + } + if(i == 4) { + printf("̨ܡ"); + } + } else { + printf("%03d", p->data.Count); + } + + + if(p == gQ[i].rear) { + printf("\n"); + } + } + } + + printf("\n"); + + Wait(SleepTime); +} + +#endif diff --git a/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.dev b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.dev new file mode 100644 index 0000000..2514642 --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.dev @@ -0,0 +1,122 @@ +[Project] +FileName=BankQueuing.dev +Name=BankQueuing +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=1 +CompilerSettings=0000000000000000001000000 +UnitCount=7 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit3] +FileName=BankQueuing-main.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=BankQueuing.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=LinkList.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit6] +FileName=LinkQueue.cpp +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit2] +FileName=BankQueuing.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=LinkList.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit7] +FileName=LinkQueue.h +CompileCpp=0 +Folder= +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.h b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.h new file mode 100644 index 0000000..008483c --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/BankQueuing.h @@ -0,0 +1,121 @@ +/*================== + * ģŶ + * + * 㷨: 3.63.7 + ===================*/ + +#ifndef BANKQUEUING_H +#define BANKQUEUING_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include // ṩtimeԭ +#include "Status.h" //**01 **// +#include "LinkList.h" //**02 Ա**// +#include "LinkQueue.h" //**03 ջͶ**// + +/* 궨 */ +#define N 4 // ͻ +#define SleepTime 1 // SleepTimeʱ +#define DurationTime 20 // ҵʱ1DurationTimeӲ +#define IntervalTime 8 // һͻʱΪ1IntervalTimeӲ + +/* Ͷ */ +typedef LinkList EventList; //¼ͣΪ + +/* ȫֱǰ涼gǣ */ +static int gTotalTime; // ۼƿͻ +static int gCustomerNum; // ۼƿͻʱ + +static int gCloseTime; // ʱ,ÿӪҵ8Сʱ480 + +static EventList gEv; // ¼洢д¼ +static Event gEn; // ǰڴ¼ + +static LinkQueue gQ[N+1]; // 4ͻ,0ŵԪ + + +/* + * 㷨3.6 + * + * ҵģ⣬ͳһڿͻжƽʱ + */ +void Bank_Simulation_1(); + +/* + * 㷨3.7 + * + * ҵģ⣬ͳһڿͻжƽʱ + * 㷨3.7Ƶ + */ +void Bank_Simulation_2(); + +/* + * пţʼл + */ +void OpenForDay(); + +/* + * й + * + * ͷԴӡͳϢ + */ +void CloseForDay(); + +/* + * ж¼ǷΪա + * Ƿδ¼ + */ +Status MoreEvent(); + +/* + * ¼¼Ƴ¼洢ȫֱgEnС + * event洢¼ + */ +void EventDrived(char* event); + +/* + * ͻ¼gEn.NType=0 + */ +void CustomerArrived(); + +/* + * ͻ뿪¼gEn.NType>0 + */ +void CustomerDeparture(); + +/* + * Ч¼ + */ +void Invalid(); + +/* + * ¼en뵽¼evУevǰʱ絽е¼ + * cmpȽ¼enΪڶʵδȥ + */ +Status OrderInsert(EventList gEv, Event gEn, int(cmp)(Event, Event)); + +/* + * Ƚ¼ + */ +int cmp(Event a, Event b); + +/* + * + * + * durtime ǰͷҵʱ + * intertimeһͻʱ + */ +void Random(int* durtime, int* intertime); + +/* + * س̵Ķе + */ +int Minimum(); + +/* + * ʾпͻеŶ + */ +void Show(); + +#endif diff --git a/Dev-C++/CourseBook/0309_BankQueuing/LinkList.cpp b/Dev-C++/CourseBook/0309_BankQueuing/LinkList.cpp new file mode 100644 index 0000000..ecc119c --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/LinkList.cpp @@ -0,0 +1,130 @@ +/*=============================== + * Աʽ洢ṹ + * + * 㷨: 2.82.92.102.11 + ================================*/ + +#include "LinkList.h" //**02 Ա**// + +/* + * ʼ + * + * ֻdzʼһͷ㡣 + * ʼɹ򷵻OK򷵻ERROR + */ +Status InitList(LinkList* L) { + (*L) = (LinkList) malloc(sizeof(LNode)); + if(*L == NULL) { + exit(OVERFLOW); + } + + (*L)->next = NULL; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: Ϊ + */ +Status ListEmpty(LinkList L) { + // ֻͷʱΪΪ + if(L != NULL && L->next == NULL) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 㷨2.9 + * + * + * + * iλϲeɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListInsert(LinkList L, int i, ElemType e) { + LinkList p, s; + int j; + + // ȷ + if(L == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // Ѱҵi-1㣬ұ֤ý㱾ΪNULL + while(p != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // ͷˣiֵϹ(i<=0)˵ûҵϺĿĽ + if(p == NULL || j > i - 1) { + return ERROR; + } + + // ½ + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = e; + s->next = p->next; + p->next = s; + + return OK; +} + +/* + * 㷨2.10 + * + * ɾ + * + * ɾiλϵԪأɾԪش洢eС + * ɾɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListDelete(LinkList L, int i, ElemType* e) { + LinkList p, q; + int j; + + // ȷҲΪձ + if(L == NULL || L->next == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // Ѱҵi-1㣬ұ֤ýĺ̲ΪNULL + while(p->next != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // ͷˣiֵϹ(i<=0)˵ûҵϺĿĽ + if(p->next == NULL || j > i - 1) { + return ERROR; + } + + // ɾi + q = p->next; + p->next = q->next; + *e = q->data; + free(q); + + return OK; +} diff --git a/Dev-C++/CourseBook/0309_BankQueuing/LinkList.h b/Dev-C++/CourseBook/0309_BankQueuing/LinkList.h new file mode 100644 index 0000000..53bc85f --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/LinkList.h @@ -0,0 +1,83 @@ +/*=============================== + * Աʽ洢ṹ + * + * 㷨: 2.82.92.102.11 + ================================*/ + +#ifndef LINKLIST_H +#define LINKLIST_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +// ¼öٳ0¼14ʾĸڵ뿪¼ +typedef enum { + Arrive, Leave_1, Leave_2, Leave_3, Leave_4 +} EventType; + +/* ¼ԪͶ */ +typedef struct +{ + int OccurTime; // ¼ʱ + EventType NType; // ¼ +} Event, ElemType; // ¼Ԫ + +/* + * ṹ + * + * עĵͷ + */ +typedef struct LNode { + ElemType data; // ݽ + struct LNode* next; // ָһָ +} LNode; + +// ָָ +typedef LNode* LinkList; + + +/* + * ʼ + * + * ʼɹ򷵻OK򷵻ERROR + */ +Status InitList(LinkList* L); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: Ϊ + */ +Status ListEmpty(LinkList L); + +/* + * 㷨2.9 + * + * + * + * iλϲeɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListInsert(LinkList L, int i, ElemType e); + +/* + * 㷨2.10 + * + * ɾ + * + * ɾiλϵԪأɾԪش洢eС + * ɾɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListDelete(LinkList L, int i, ElemType* e); + +#endif diff --git a/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.cpp b/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.cpp new file mode 100644 index 0000000..b800d2c --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.cpp @@ -0,0 +1,138 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +#endif diff --git a/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.h b/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.h new file mode 100644 index 0000000..7600daa --- /dev/null +++ b/Dev-C++/CourseBook/0309_BankQueuing/LinkQueue.h @@ -0,0 +1,83 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* ԪͶ壬¼ͻϢ */ +typedef struct { + int ArrivedTime; // ͻʱ + int Duration; // ҵʱ + int Count; // ˱¼ÿеĿͻǵڼ̲޴˱Ӵ˱Ŀǹ۲Ŷ״ +} QElemType; //еԪ + +// Ԫؽṹ +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// нṹ +typedef struct { + QueuePtr front; // ͷָ + QueuePtr rear; // βָ +} LinkQueue; // еʽ洢ʾ + + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q); + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +#endif diff --git a/README.md b/README.md index c4f602d..245ce22 100644 --- a/README.md +++ b/README.md @@ -12,57 +12,56 @@ ## 项目结构 -本项目包含了**教材源码**跟**习题源码**,并分为4个版本,分别是:**CFree**、**Dev-C++**、**CLion**、**VisualC++**,其中: +本项目包含了**教材源码**跟**习题源码**,并分为4个版本,分别是:**CFree**、**Dev-C++**、**CLion**、**VisualC++**,其中: -- **CFree** 版本是早期上传的完整版本,该版本在CFree这个IDE下测试通过。此版本中的代码虽有瑕疵,但不会再维护,新的更新会在下面三个分支版本中呈现。 -- **Dev-C++** 版本是指在Dev-C++这个IDE下测试通过的版本。 -- **CLion** 版本是指在CLion这个IDE下测试通过的版本。 -- **VisualC++** 版本是指在Microsoft Visual C++ 2010这个IDE下测试通过的版本。 +- **CFree** 版本是早期上传的完整版本,该版本在CFree这个IDE下测试通过。此版本中的代码虽有瑕疵,但不会再维护,新的更新会在下面三个分支版本中呈现。 +- **Dev-C++** 版本是指在Dev-C++这个IDE下测试通过的版本。 +- **CLion** 版本是指在CLion这个IDE下测试通过的版本。 +- **VisualC++** 版本是指在Microsoft Visual C++ 2010这个IDE下测试通过的版本。 > IDE的选择 >> CFree是一个优秀的国产软件,麻雀虽小五脏俱全,非常适合新手使用。不过该产品早已停更,在win10上有些兼容问题,需要调教。 -> ->> Dev-C++是一个开源软件,同CFree一样小巧实用。最关键的是,可以兼容win10,推荐使用。 -> +> +>> Dev-C++是一个开源软件,同CFree一样小巧实用。最关键的是,可以兼容win10,推荐使用。 +> >> CLion需要掌握一点cmake知识,对笔记本性能要求也略高。不过JetBrains系列的产品,功能优秀没得说,强烈建议尝试。 -> +> >> Microsoft Visual C++是微软出品,该系列号称地表最强,不过复杂度也是很高,对于新手并不友好,需要耐心琢磨。如果将来不是走C/C++/C#等路线,可以先不使用。(注:从2018年开始,计算机二级C语言项目的考试中,已将VC++6换成了Microsoft Visual C++ 2010。所以如果有考级需求的同学,请自行熟悉该IDE) -**习题解析**中存储了《数据结构题集》中非代码题的解析,对于需要写代码解决的问题,参见 **Dev-C++**、**CLion**、**VisualC++** 这三个版本中的源码。 +**习题解析**中存储了《数据结构题集》中非代码题的解析,对于需要写代码解决的问题,参见 **Dev-C++**、**CLion**、**VisualC++** 这三个版本中的源码。 ``` 注: -1. "CFree"是完整版本。"Dev-C++"/"CLion"/"VisualC++"是新增的版本,这三个版本最终会取代"CFree"版本。 -2. "CFree"版本既可以用CFree直接打开,也支持用Dev-C++打开,所以当使用CFree遇到兼容问题时,可尝试用Dev-C++。 -3. 上述四个版本各自独立,没有任何依赖关系,可单独运行/测试。 -4. 对所有版本的代码均未充分测试,所以如有BUG请到Issues反馈。 +1. "CFree"是完整版本。"Dev-C++"/"CLion"/"VisualC++"是新增的版本,这三个版本最终会取代"CFree"版本。 +2. "CFree"版本既可以用CFree直接打开,也支持用Dev-C++打开,所以当使用CFree遇到兼容问题时,可尝试用Dev-C++。 +3. 上述四个版本各自独立,没有任何依赖关系,可单独运行/测试。 +4. 对所有版本的代码均未充分测试,所以如有BUG请到Issues反馈。 ``` ## 更新目标 -总的目标是保障正确性,提高可读性,降低学习难度,具体来说包含以下几点: +总的目标是保障正确性,提高可读性,降低学习难度,具体来说包含以下几点: -1. 项目工程化★★ -2. 修复一些已知/潜在的BUG -3. 简化源码之间的引用关系,争取每个模块都可以单独运行测试 -4. 修剪被引用源码中的次要内容,使得焦点更聚集,重点更突出 -5. 增加注释与帮助信息,使源码展示更友好 -6. 出自教材中的算法,会尽量使其代码与教材一致,如有改动,会在注释中提示。其它算法会视情形书写,不唯一 +1. 项目工程化★★ +2. 修复一些已知/潜在的BUG +3. 简化源码之间的引用关系,争取每个模块都可以单独运行测试 +4. 修剪被引用源码中的次要内容,使得焦点更聚集,重点更突出 +5. 增加注释与帮助信息,使源码展示更友好 +6. 出自教材中的算法,会尽量使其代码与教材一致,如有改动,会在注释中提示。其它算法会视情形书写,不唯一 ## 使用方式 -* 开箱即用 - -> 将源码克隆/下载到本地后,可以查看各分支内的README.md文件以获取帮助信息 +* 开箱即用 +> 将源码克隆/下载到本地后,可以查看各分支内的 **README** 文件以获取帮助信息 ## 注意事项 -1. **本内容仅限个人学习使用,未经作者许可,不得用于商业用途** -2. **源码仅供参考,别抄作业** -3. **鼓励在Github提交[Issues](https://github.com/kangjianwei/Data-Structure/issues)来反馈,在博客上发私信未必可以及时看到** +1. **本内容仅限个人学习使用,未经作者许可,不得用于商业用途** +2. **源码仅供参考,别抄作业** +3. **鼓励在Github提交[Issues](https://github.com/kangjianwei/Data-Structure/issues)来反馈,在博客上发私信未必可以及时看到** ## Commit图例 @@ -79,31 +78,39 @@ ## 相关链接 -[个人博客](http://www.cnblogs.com/kangjianwei101) +[个人博客](http://www.cnblogs.com/kangjianwei101) ## 脚注 - -Commit信息中的`emoji`参考来源: - + +Commit信息中的`emoji`参考来源: + * [Full Emoji List](https://unicode.org/emoji/charts/full-emoji-list.html) - -* [gitmoji](https://gitmoji.carloscuesta.me/) +* [gitmoji](https://gitmoji.carloscuesta.me/) ## 附:教材源码目录 -| 章 | 节 | 内容 | 包含算法 | 备注 | -| :------- | :---------- | :----------- | :-------------------- | :------------------- | -| 01 绪论 | | | | 定义一些共享常量和函数 | -| 02 线性表 | SqList | 顺序表 | 2.3、2.4、2.5、2.6 | | -| | Union | A=A∪B | 2.1 | | -| | MergeSqList | C=A+B | 2.2、2.7 | 归并顺序表 | -| | LinkList | 链表 | 2.8、2.9、2.10、2.11 | | -| | MergeList | C=A+B | 2.12 | 归并链表 | -| | SLinkList | 静态链表 | 2.13、2.14、2.15、2.16 | | -| | Difference | (A-B)∪(B-A) | 2.17 | | -| | DuLinkList | 双向循环链表 | 2.18、2.19 | | -| | ELinkList | 扩展的线性链表 | 2.20 | | -| | MergeEList | C=A+B | 2.21 | 归并扩展的线性链表 | -| | Polynomial | 一元多项式 | 2.22、2.23 | | +| 章 | 节 | 内容 | 包含算法 | 备注 | +| :--------- | :---------- | :----------- | :-------------------- | :------------------- | +| 01 绪论 | Status | | | 定义一些共享常量和函数 | +| 02 线性表 | SqList | 顺序表 | 2.3、2.4、2.5、2.6 | 线性表的顺序存储结构 | +| | Union | A=A∪B | 2.1 | | +| | MergeSqList | C=A+B | 2.2、2.7 | 归并顺序表 | +| | LinkList | 链表 | 2.8、2.9、2.10、2.11 | 线性表的链式存储结构 | +| | MergeList | C=A+B | 2.12 | 归并链表 | +| | SLinkList | 静态链表 | 2.13、2.14、2.15、2.16 | | +| | Difference | (A-B)∪(B-A) | 2.17 | | +| | DuLinkList | 双向循环链表 | 2.18、2.19 | | +| | ELinkList | 扩展的线性链表 | 2.20 | | +| | MergeEList | C=A+B | 2.21 | 归并扩展的线性链表 | +| | Polynomial | 一元多项式 | 2.22、2.23 | | +| 03 栈和队列 | SqStack | 栈 | | 顺序存储结构 | +| | Conversion | 进制转换 | 3.1 | 栈的应用 | +| | LineEdit | 行编辑程序 | 3.2 | 栈的应用 | +| | Maze | 迷宫寻路 | 3.3 | 栈的应用 | +| | Expression | 表达式求值 | 3.4 | 栈的应用 | +| | Hanoi | 汉诺塔 | 3.5 | 递归 | +| | LinkQueue | 链列 | | 链式存储结构 | +| | SqQueue | 顺序队列 | | 循环队列,顺序存储结构 | +| | BankQueuing | 模拟银行排队 | 3.6、3.7 | 队列的应用 | diff --git a/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj new file mode 100644 index 0000000..ba5e9c6 --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {CBC87773-9686-4E77-BE7E-1335A673E0E1} + My0301_SqStack + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.filters b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.filters new file mode 100644 index 0000000..0ec157d --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.user b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/0301_SqStack.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0301_SqStack/SqStack-main.c b/VisualC++/CourseBook/0301_SqStack/SqStack-main.c new file mode 100644 index 0000000..ae7df91 --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/SqStack-main.c @@ -0,0 +1,94 @@ +#include +#include "SqStack.h" //**03 ջͶ**// + +// ԺӡԪ +void PrintElem(SElemType e); + +int main(int argc, char** argv) { + SqStack S; + int i; + SElemType e; + + printf(" InitStack \n"); + { + printf(" ʼ˳ջ S ...\n"); + InitStack(&S); + } + PressEnterToContinue(); + + printf(" StackEmpty \n"); + { + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" Push \n"); + { + for(i = 1; i <= 6; i++) { + Push(&S, 2 * i); + printf(" \"%2d\" ѹջ S ...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" StackTraverse \n"); + { + printf(" S еԪΪS = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf(" StackLength \n"); + { + i = StackLength(S); + printf(" S ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" Pop \n"); + { + Pop(&S, &e); + printf(" ջԪ \"%d\" ջ...\n", e); + printf(" S еԪΪS = "); + StackTraverse(S, PrintElem); + } + PressEnterToContinue(); + + printf(" GetTop \n"); + { + GetTop(S, &e); + printf(" ջԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearStack \n"); + { + printf(" S ǰ"); + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + + ClearStack(&S); + + printf(" S "); + StackEmpty(S) ? printf(" S Ϊգ\n") : printf(" S Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyStack \n"); + { + printf(" S ǰ"); + S.base != NULL && S.top != NULL ? printf(" S ڣ\n") : printf(" S ڣ\n"); + + DestroyStack(&S); + + printf(" S "); + S.base != NULL && S.top != NULL ? printf(" S ڣ\n") : printf(" S ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// ԺӡԪ +void PrintElem(SElemType e) { + printf("%d ", e); +} diff --git a/VisualC++/CourseBook/0301_SqStack/SqStack.c b/VisualC++/CourseBook/0301_SqStack/SqStack.c new file mode 100644 index 0000000..6ae0e8b --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/SqStack.c @@ -0,0 +1,174 @@ +/*========================= + * ջ˳洢ṹ˳ջ + ==========================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ˳ջЧԪص + */ +int StackLength(SqStack S) { + if(S.base == NULL) { + return 0; + } + + return (int) (S.top - S.base); +} + +/* + * ȡֵ + * + * ջԪأeա + */ +Status GetTop(SqStack S, SElemType* e) { + if(S.base == NULL || S.top == S.base) { + return 0; + } + + // ıջԪ + *e = *(S.top - 1); + + return OK; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/VisualC++/CourseBook/0301_SqStack/SqStack.h b/VisualC++/CourseBook/0301_SqStack/SqStack.h new file mode 100644 index 0000000..3a0d1a8 --- /dev/null +++ b/VisualC++/CourseBook/0301_SqStack/SqStack.h @@ -0,0 +1,94 @@ +/*========================= + * ջ˳洢ṹ˳ջ + ==========================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S); + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * + * + * ˳ջЧԪص + */ +int StackLength(SqStack S); + +/* + * ȡֵ + * + * ջԪأeա + */ +Status GetTop(SqStack S, SElemType* e); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj new file mode 100644 index 0000000..dc09019 --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj @@ -0,0 +1,78 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {B1FD90AC-75CE-404C-907E-8D939C078D79} + My0302_Conversion + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.filters b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.filters new file mode 100644 index 0000000..5b7dd4c --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.user b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/0302_Conversion.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0302_Conversion/Conversion-main.c b/VisualC++/CourseBook/0302_Conversion/Conversion-main.c new file mode 100644 index 0000000..2d99ac5 --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/Conversion-main.c @@ -0,0 +1,11 @@ +#include "Conversion.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + int i = 342391; + + printf("ʮתΪ˽...\n"); + + conversion(i); + + return 0; +} diff --git a/VisualC++/CourseBook/0302_Conversion/Conversion.c b/VisualC++/CourseBook/0302_Conversion/Conversion.c new file mode 100644 index 0000000..4df0cfa --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/Conversion.c @@ -0,0 +1,37 @@ +/*============== + * ת + * + * 㷨: 3.1 + ===============*/ + +#include "Conversion.h" //**03 ջͶ**// + +/* + * 㷨3.1 + * + * תָķǸʮתΪ˽ƺ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void conversion(int i) { + SqStack S; + SElemType e; + + InitStack(&S); + + // ˽ǰ0 + printf("ʮ %d תΪ˽Ϊ0", i); + + while(i!=0) { + Push(&S, i % 8); // ջʱӵλλ + i = i / 8; + } + + while(StackEmpty(S)==FALSE) { + Pop(&S, &e); // ջʱӸλλ + printf("%d", e); + } + + printf("\n"); +} diff --git a/VisualC++/CourseBook/0302_Conversion/Conversion.h b/VisualC++/CourseBook/0302_Conversion/Conversion.h new file mode 100644 index 0000000..0371acf --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/Conversion.h @@ -0,0 +1,20 @@ +/*============== + * ת + * + * 㷨: 3.1 + ===============*/ + +#ifndef CONVERSION_H +#define CONVERSION_H + +#include +#include "SqStack.h" //**03 ջͶ**// + +/* + * 㷨3.1 + * + * תָķǸʮתΪ˽ƺ + */ +void conversion(int i); + +#endif diff --git a/VisualC++/CourseBook/0302_Conversion/SqStack.c b/VisualC++/CourseBook/0302_Conversion/SqStack.c new file mode 100644 index 0000000..7e16904 --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/SqStack.c @@ -0,0 +1,90 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/VisualC++/CourseBook/0302_Conversion/SqStack.h b/VisualC++/CourseBook/0302_Conversion/SqStack.h new file mode 100644 index 0000000..19e6cc1 --- /dev/null +++ b/VisualC++/CourseBook/0302_Conversion/SqStack.h @@ -0,0 +1,59 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj new file mode 100644 index 0000000..480a7c2 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj @@ -0,0 +1,78 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {55BB85DE-4B42-4EF0-BBF8-F5E03A518376} + My0303_LineEdit + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.filters b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.filters new file mode 100644 index 0000000..150f369 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.user b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/0303_LineEdit.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0303_LineEdit/LineEdit-main.c b/VisualC++/CourseBook/0303_LineEdit/LineEdit-main.c new file mode 100644 index 0000000..56235b7 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/LineEdit-main.c @@ -0,0 +1,18 @@ +#include +#include "LineEdit.h" //**03 ջͶ**// + +int main(int argc, char* argv[]) { + char* buf = "whli##ilr#e(s#*s)\noutcha@ putchar(*s=#++);"; //Ҫ¼ + + printf("ΪʾûıΪ\n"); + printf("%s\n\n", buf); + + printf("б༭...\n\n"); + + printf("ţ'#' ɾһԪء'@' ɾǰ\n"); + printf(" '\\n''\\0'\n"); + printf("մ洢Ϊ\n"); + LineEdit(buf); + + return 0; +} diff --git a/VisualC++/CourseBook/0303_LineEdit/LineEdit.c b/VisualC++/CourseBook/0303_LineEdit/LineEdit.c new file mode 100644 index 0000000..cf00861 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/LineEdit.c @@ -0,0 +1,71 @@ +/*============== + * б༭ + * + * 㷨: 3.2 + ===============*/ + +#include "LineEdit.h" //**03 ջͶ**// + +/* + * 㷨3.2 + * + * б༭ģ༭ıʱ˸еIJ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void LineEdit(const char buffer[]) { + SqStack S; //ַ + SElemType e; + int i; + char ch; + + // ʼջ + InitStack(&S); + + i = 0; + ch = buffer[i++]; + + // δıĩβ + while(ch != EOF) { + // δıĩβұδδУ + while(ch != EOF && ch != '\n') { + switch(ch) { + case '#': + Pop(&S, &e); // '#'ʾɾһַ + break; + case '@': + ClearStack(&S); // '@'ʾյǰ + break; + default : + Push(&S, ch); // Чַջ + } + + // ʶһַ + ch = buffer[i++]; + } + + // ֮ǰǰջݣ˴̲û + StackTraverse(S, Print); + + // ոеĻ + ClearStack(&S); + + // δıĩβ˵'\n'н + if(ch != EOF) { + // һ + ch = buffer[i++]; + } + } + + // ѾıĩβĿǰջеԪأ˴̲û + StackTraverse(S, Print); + + // ջ + DestroyStack(&S); +} + +// ԺӡԪ +void Print(SElemType e) { + printf("%c", e); +} diff --git a/VisualC++/CourseBook/0303_LineEdit/LineEdit.h b/VisualC++/CourseBook/0303_LineEdit/LineEdit.h new file mode 100644 index 0000000..528960b --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/LineEdit.h @@ -0,0 +1,33 @@ +/*============== + * б༭ + * + * 㷨: 3.2 + ===============*/ + +#ifndef LINEEDIT_H +#define LINEEDIT_H + +#include +#include "SqStack.h" //**03 ջͶ**// +#include "LineEdit.h" + +// ģļеıǣҪеĶ +#ifdef EOF +#undef EOF +#define EOF '\0' +#endif + +/* + * 㷨3.2 + * + * б༭ģ༭ıʱ˸еIJ + * + *ע + * ̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + */ +void LineEdit(const char buffer[]); + +// ԺӡԪ +void Print(SElemType e); + +#endif diff --git a/VisualC++/CourseBook/0303_LineEdit/SqStack.c b/VisualC++/CourseBook/0303_LineEdit/SqStack.c new file mode 100644 index 0000000..d089f26 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/SqStack.c @@ -0,0 +1,128 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + free((*S).base); + + (*S).base = NULL; + (*S).top = NULL; + (*S).stacksize = 0; + + return OK; +} + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + (*S).top = (*S).base; + + return OK; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)) { + SElemType* p = S.base; + + if(S.base == NULL) { + return ERROR; + } + + while(p < S.top) { + Visit(*p++); + } + + printf("\n"); + + return OK; +} diff --git a/VisualC++/CourseBook/0303_LineEdit/SqStack.h b/VisualC++/CourseBook/0303_LineEdit/SqStack.h new file mode 100644 index 0000000..7382c02 --- /dev/null +++ b/VisualC++/CourseBook/0303_LineEdit/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ˳ջԪͶ */ +typedef int SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * (ṹ) + * + * ͷ˳ջռڴ档 + */ +Status DestroyStack(SqStack* S); + +/* + * ÿ() + * + * ֻ˳ջд洢ݣͷ˳ջռڴ档 + */ +Status ClearStack(SqStack* S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +/* + * + * + * visit˳ջS + */ +Status StackTraverse(SqStack S, void(Visit)(SElemType)); + +#endif diff --git a/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj new file mode 100644 index 0000000..8295250 --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj @@ -0,0 +1,78 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {38C80F0E-757B-4E11-93F2-C2666AF3617F} + My0304_Maze + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.filters b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.filters new file mode 100644 index 0000000..e4c78ed --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.user b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/0304_Maze.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0304_Maze/Maze-main.c b/VisualC++/CourseBook/0304_Maze/Maze-main.c new file mode 100644 index 0000000..1e2246a --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/Maze-main.c @@ -0,0 +1,20 @@ +#include "Maze.h" //**03 ջͶ**// + +int main(int argc, char* argv[]) { + MazeType maze; + PosType start, end; + char n, Re = 'Y'; + + while(Re == 'Y' || Re == 'y') { + InitMaze(maze, &start, &end); // ʼԹ + + MazePath(maze, start, end); // ԹѰ· + + printf("ãY/N"); + scanf("%c%c", &Re, &n); + + printf("\n"); + } + + return 0; +} diff --git a/VisualC++/CourseBook/0304_Maze/Maze.c b/VisualC++/CourseBook/0304_Maze/Maze.c new file mode 100644 index 0000000..cb2dca1 --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/Maze.c @@ -0,0 +1,294 @@ +/*============== + * ԹѰ· + * + * 㷨: 3.3 + ===============*/ + +#include "Maze.h" //**03 ջͶ**// + +/* + * 㷨3.3 + * + * ԹѰ· + * + * ʹٷҵһͨ· + */ +Status MazePath(MazeType maze, PosType start, PosType end) { + SqStack S; // 洢̽ͨ + SElemType e; // e洢ǰͨϢ + PosType curPos; // ǰλ + int curStep; // ǰͨ + + // ʼ켣ջ + InitStack(&S); + + curPos = start; // 趨ǰλΪ"λ" + curStep = 1; // ̽һ + + do { + // ǰλÿͨҪλǴδ̽ͨ飩 + if(Pass(maze, curPos)) { + // ³ʼ㼣򶫷ʵı + FootPrint(maze, curPos); + + // һͨϢ + e = Construct(curStep, curPos, East); + + // · + Push(&S, e); + + // յ + if(Equals(curPos, end) == TRUE) { + printf("\nѰ·ɹ\n\n"); + return TRUE; + } + + // ȡһӦ̽λãǰλõĶ + curPos = NextPos(curPos, East); + + // ̽һ + curStep++; + + // ǰλѾ̽ˣ޸̽ + } else { + // ջΪգ̽ıҪ + if(!StackEmpty(S)) { + // ˵һλ + Pop(&S, &e); + + // ̽λõ4̽Ҫ + while(e.di == North && !StackEmpty(S)) { + // "ͬ"ǣӸλó·ûͨ· + MarkPrint(maze, e.seat, Impasse); + + // + Pop(&S, &e); + } + + // ̽λûʣ̽ķ + if(e.di < North) { + // ı̽򣬰ķѯ + ++e.di; + + // Թ·ʱǣ۲Թ״̬̲ûиò裩 + MarkPrint(maze, e.seat, e.di); + + // ½λü뵽· + Push(&S, e); + + // ȡһӦ̽λ + curPos = NextPos(e.seat, e.di); + } + } + } + + // ջΪգζŻ̽ıҪ + } while(!StackEmpty(S)); + + printf("\nѰ·ʧܣ\n\n"); + + return FALSE; +} + +/* + * ʼһģΪNNԹ + * startendֱΪԹͳ + * + *ע + * ̲޴˲òDZڵ + */ +void InitMaze(MazeType maze, PosType* start, PosType* end) { + int i, j, tmp; + + srand((unsigned) time(NULL)); // ϵͳʱ + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + + // Թǽ + if(i == 0 || j == 0 || i == M - 1 || j == N - 1) { + maze[i][j] = Wall; + + // Թڲ + } else { + tmp = rand() % X; // [0, X-1]Թ + + if(tmp == 0) { + // 1/Xĸϰ + maze[i][j] = Obstacle; + } else { + // طΪɱͨ· + maze[i][j] = Way; + } + } + } + } + + // Թ + (*start).x = 1; + (*start).y = 0; + + // Թ + (*end).x = M - 2; + (*end).y = N - 1; + + // ںͳ + maze[1][0] = maze[M - 2][N - 1] = Way; + + // ΪѰ·ɹʣڴͳڴٽĽΪͨ·DZ + maze[1][1] = maze[M - 2][N - 2] = Way; + + // ʾԹijʼ״̬ + PaintMaze(maze); +} + +/* + * жϵǰλǷͨҪλǴδ̽ͨ + * + *ע + * ΪжϵǰλǷΪ״̽ + */ +Status Pass(MazeType maze, PosType seat) { + int x = seat.x; + int y = seat.y; + + // ȼǷԽ磬Խˣǰλÿ϶޷ͨ + if(x < 0 || y < 0 || x > M - 1 || y > N - 1) { + return FALSE; //Խ + } + + // ҪλñǴδ̽ͨ + if(maze[x][y] != Way) { + return FALSE; + } + + return TRUE; +} + +/* + * ȡһӦ̽λ + * diָʾǰλõ̽򣬰East, South, West, North + */ +PosType NextPos(PosType seat, int di) { + PosType tmp = seat; + + switch(di) { + case East: + tmp.y++; // + break; + case South: + tmp.x++; // + break; + case West: + tmp.y--; // + break; + case North: + tmp.x--; // + break; + } + + return tmp; +} + +/* + * ³ʼ㼣 + * + * ʼ㼣򶫷 + */ +void FootPrint(MazeType maze, PosType seat) { + //ʼ̽ + MarkPrint(maze, seat, East); +} + +/* + * Թseatmark + * + *ע + * ú̲ϵĺ + * ֻ̲ô˺"̽"ı + * ˴ĺĽΪǣ̽ı + */ +void MarkPrint(MazeType maze, PosType seat, int mark) { + int x = seat.x; + int y = seat.y; + + maze[x][y] = mark; //²ͨı + + // Թ + PaintMaze(maze); +} + +/* + * һͨϢ + * + *ע + * ̲д˲޴˺ + */ +SElemType Construct(int ord, PosType seat, int di) { + SElemType e; + + e.ord = ord; + e.seat = seat; + e.di = di; + + return e; +} + +/* + * жǷ + * + *ע + * ̲д˲޴˺ + * ΪҪȽṹ壬Բֱ"==" + */ +Status Equals(PosType seat1, PosType seat2) { + if(seat1.x == seat2.x && seat1.y == seat2.y) { + return TRUE; + } else { + return ERROR; + } +} + +/* + * Թ + * ͼεķʽԹǰ״̬ + * + *ע + * 1.̲޴˲˴ӸòĿǹ۲Ѱ·̵ÿһ + * 2.ʵCLionĿ̨ + */ +void PaintMaze(MazeType maze) { + int i, j; + + Wait(SleepTime); // ͣһ + + system("cls"); // Ļ + + for(i = 0; i < M; i++) { + for(j = 0; j < N; j++) { + if(maze[i][j] == Wall) { // ǽ + printf("~"); + } else if(maze[i][j] == Obstacle) { // Թڲϰ + printf(""); + } else if(maze[i][j] == East) { // ڳ̽ + printf(""); + } else if(maze[i][j] == South) { // ڳ̽ + printf(""); + } else if(maze[i][j] == West) { // ڳ̽ + printf(""); + } else if(maze[i][j] == North) { // ڳ̽ + printf(""); + } else if(maze[i][j] == Impasse) { // ͬĸ̽޷ͨλ + printf(""); + } else { // δ̽· + printf(""); + } + + if(j != 0 && j % (N - 1) == 0) { // ÿN㻻 + printf("\n"); + } + } + } + + printf("\n"); +} diff --git a/VisualC++/CourseBook/0304_Maze/Maze.h b/VisualC++/CourseBook/0304_Maze/Maze.h new file mode 100644 index 0000000..d18a67a --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/Maze.h @@ -0,0 +1,112 @@ +/*============== + * ԹѰ· + * + * 㷨: 3.3 + ===============*/ + +#ifndef MAZE_H +#define MAZE_H + +#include +#include // ṩsystemrandsrandԭ +#include // ṩtimeԭ +#include "Status.h" //**01 **// +#include "SqStack.h" //**03 ջͶ**// + +/* 궨 */ +#define M 15 // Թ +#define N 15 // Թ + +#define X 4 // XָʾԹϰֵĸʡ磬X=4ζűԹʱϰĸ1/4=25% + +#define SleepTime 3 //SleepTimeӡͼʱʱ + +/* ԹͶ */ +typedef enum { + Wall, // ǽ + Obstacle, // Թڲϰ + Way, // ͨ· + Impasse, // ͬ + East, South, West, North // ǰ̽򣺶 +} MazeNode; + +typedef int MazeType[M][N]; // Թ + + +/* + * 㷨3.3 + * + * ԹѰ· + * + * ʹٷҵһͨ· + */ +Status MazePath(MazeType maze, PosType start, PosType end); + +/* + * ʼһģΪNNԹ + * startendֱΪԹͳ + * + *ע + * ̲޴˲òDZڵ + */ +void InitMaze(MazeType maze, PosType* start, PosType* end); + +/* + * жϵǰλǷͨҪλǴδ̽ͨ + * + *ע + * ΪжϵǰλǷΪ״̽ + */ +Status Pass(MazeType maze, PosType seat); + +/* + * ȡһӦ̽λ + * diָʾǰλõ̽򣬰East, South, West, North + */ +PosType NextPos(PosType seat, int di); + +/* + * ³ʼ㼣 + * + * ʼ㼣򶫷 + */ +void FootPrint(MazeType maze, PosType seat); + +/* + * Թseatmark + * + *ע + * ú̲ϵĺ + * ֻ̲ô˺"̽"ı + * ˴ĺĽΪǣ̽ı + */ +void MarkPrint(MazeType maze, PosType seat, int mark); + +/* + * һͨϢ + * + *ע + * ̲д˲޴˺ + */ +SElemType Construct(int ord, PosType seat, int di); + +/* + * жǷ + * + *ע + * ̲д˲޴˺ + * ΪҪȽṹ壬Բֱ"==" + */ +Status Equals(PosType a, PosType b); + +/* + * Թ + * ͼεķʽԹǰ״̬ + * + *ע + * ̲޴˲ + * ˴ӸòĿǹ۲Ѱ·̵ÿһ + */ +void PaintMaze(MazeType maze); + +#endif diff --git a/VisualC++/CourseBook/0304_Maze/SqStack.c b/VisualC++/CourseBook/0304_Maze/SqStack.c new file mode 100644 index 0000000..7e16904 --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/SqStack.c @@ -0,0 +1,90 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/VisualC++/CourseBook/0304_Maze/SqStack.h b/VisualC++/CourseBook/0304_Maze/SqStack.h new file mode 100644 index 0000000..bbd553e --- /dev/null +++ b/VisualC++/CourseBook/0304_Maze/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +// Թͨ +typedef struct { + int x; // ͨĺᡢ궨 + int y; +} PosType; + +/* ͨϢԹ㷨 */ +typedef struct { + int ord; // ͨġš + PosType seat; // ͨġλá + int di; // һӦʵġ +} SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj new file mode 100644 index 0000000..32ce6f3 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj @@ -0,0 +1,78 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {71331A05-F03F-41E1-A7BD-D6F9D2944D8D} + My0305_Expression + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.filters b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.filters new file mode 100644 index 0000000..115a619 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.user b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/0305_Expression.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0305_Expression/Expression-main.c b/VisualC++/CourseBook/0305_Expression/Expression-main.c new file mode 100644 index 0000000..9186009 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/Expression-main.c @@ -0,0 +1,12 @@ +#include "Expression.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + char opnd; + char* exp = "(1+3)*2/4#"; + + opnd = EvaluateExpression(exp); + + printf("Ϊʾ %s ļΪ%d\n", exp, opnd - '0'); + + return 0; +} diff --git a/VisualC++/CourseBook/0305_Expression/Expression.c b/VisualC++/CourseBook/0305_Expression/Expression.c new file mode 100644 index 0000000..0bfa743 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/Expression.c @@ -0,0 +1,139 @@ +/*============== + * ʽ + * + * 㷨: 3.4 + ===============*/ + +#include "Expression.h" //**03 ջͶ**// + +/* + * 㷨3.4 + * + * expʽʽ + * + *ע + * 1.̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + * 2.ü㹦ޣϽֶ֧Ըλ㣬ҪÿһҲǸλ + * ̲ṩ㷨Ŀ֤ջʹãչ֧֣Բ֧֣ + * ˳Ŵ˼·иİ + */ +OperandType EvaluateExpression(const char exp[]) { + SElemType c; // + + SqStack OPTR; // ջ + SqStack OPND; // ջ + + OperatorType theta, x; // + OperandType a, b; // + + int i = 0; + + // ʼջһ޷'#'ջ + InitStack(&OPTR); + Push(&OPTR, '#'); + + // ʼջʼȡ + InitStack(&OPND); + c = exp[i++]; + + // ޷'#'ջջԪҲǽ޷'#'ʱʾȡ + while(c != '#' || GetTop(OPTR) != '#') { + // chΪջ + if(!In(c, OP)) { + Push(&OPND, c); // ջ + c = exp[i++]; // ȡһַ + } else { + switch(Precede(GetTop(OPTR), c)) { + // ջȼͣջ + case '<': + Push(&OPTR, c); + c = exp[i++]; + break; + + // ȼʱ˵ţҪ + case '=': + Pop(&OPTR, &x); + c = exp[i++]; + break; + + /* + * ջȼʱȼ㣬ٽѹջ + * + * עûжַcĻǸղŶַ + */ + case '>': + Pop(&OPTR, &theta); // + Pop(&OPND, &b); // ұߵIJ + Pop(&OPND, &a); // ߵIJ + Push(&OPND, Operate(a, theta, b)); + break; + } + } + } + + return GetTop(OPND); +} + +// жָǷϹ +Status In(SElemType c, const char OP[]) { + + SElemType* e = strchr(OP, c); + + // cںϹ淶Χڣ˵ָϹ + if(e == NULL) { + return FALSE; + } else { + return TRUE; + } +} + +/* + * жջвo1ʽеIJo2ȼ + * + * '>''<''='ָʾo1o2ȼ + */ +OperatorType Precede(OperatorType o1, OperatorType o2) { + int x, y; + + // ȡָеλ + char* p1 = strchr(OP, o1); + char* p2 = strchr(OP, o2); + + // һȼ + x = p1 - OP; + y = p2 - OP; + + return PrecedeTable[x][y]; +} + +/* + * Բ + * + * abDztheta + * ڲ֤Ըλ֧ + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b) { + int x, y, z = CHAR_MAX - 48; + + // ȴַתΪ + x = a - '0'; + y = b - '0'; + + switch(theta) { + case '+': + z = x + y; + break; + case '-': + z = x - y; + break; + case '*': + z = x * y; + break; + case '/': + z = x / y; + break; + } + + // ɺ󣬽תΪַͷ + return z + 48; +} diff --git a/VisualC++/CourseBook/0305_Expression/Expression.h b/VisualC++/CourseBook/0305_Expression/Expression.h new file mode 100644 index 0000000..0250fa6 --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/Expression.h @@ -0,0 +1,70 @@ +/*============== + * ʽ + * + * 㷨: 3.4 + ===============*/ + +#ifndef EXPRESSION_H +#define EXPRESSION_H + +#include +#include +#include +#include "SqStack.h" //**03 ջͶ**// + +typedef SElemType OperatorType; // +typedef SElemType OperandType; // + +// ʽֵķţ޷'#' +static const char OP[] = {'+', '-', '*', '/', '(', ')', '#'}; + +/* + * ȼ޷'#'OPǺӦġ + * ɲμ̲е"ȹϵ" + */ +static const char PrecedeTable[7][7] = {{'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '<', '<', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'>', '>', '>', '>', '<', '>', '>'}, + {'<', '<', '<', '<', '<', '=', ' '}, + {'>', '>', '>', '>', ' ', '>', '>'}, + {'<', '<', '<', '<', '<', ' ', '='}}; + + +/* + * 㷨3.4 + * + * expʽʽ + * + *ע + * 1.̲ʹõǿ̨룬Ϊ˱ڲԣֱӸΪβνղ + * 2.ü㹦ޣϽֶ֧Ըλ㣬ҪÿһҲǸλ + * ̲ṩ㷨Ŀ֤ջʹãչ֧֣Բ֧֣ + * ˳Ŵ˼·иİ + */ +OperandType EvaluateExpression(const char exp[]); + +/* + * жָǷϹ + * + * OPд洢˺Ϲ޷'#' + */ +Status In(SElemType c, const char OP[]); + +/* + * жջвo1ʽеIJo2ȼ + * + * '>''<''='ָʾo1o2ȼ + */ +OperatorType Precede(OperatorType o1, OperatorType o2); + +/* + * Բ + * + * abDztheta + * ڲֶԸλ֧ + */ +OperandType Operate(OperandType a, OperatorType theta, OperandType b); + + +#endif diff --git a/VisualC++/CourseBook/0305_Expression/SqStack.c b/VisualC++/CourseBook/0305_Expression/SqStack.c new file mode 100644 index 0000000..30e35ab --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/SqStack.c @@ -0,0 +1,111 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#include "SqStack.h" //**03 ջͶ**// + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S) { + if(S == NULL) { + return ERROR; + } + + (*S).base = (SElemType*) malloc(STACK_INIT_SIZE * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); + } + + (*S).top = (*S).base; + (*S).stacksize = STACK_INIT_SIZE; + + return OK; +} + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S) { + if(S.top == S.base) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * ȡֵ + * + * ȡջջԪء + * + *ע + * òʵ봫ͳ˳ջȡֵЩͬһ + */ +SElemType GetTop(SqStack S) { + SElemType e; + + if(S.base == NULL || S.top == S.base) { + return '\0'; + } + + // ıջԪ + e = *(S.top - 1); + + return e; +} + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + // ջʱ׷Ӵ洢ռ + if((*S).top - (*S).base >= (*S).stacksize) { + (*S).base = (SElemType*) realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); + if((*S).base == NULL) { + exit(OVERFLOW); // 洢ʧ + } + + (*S).top = (*S).base + (*S).stacksize; + (*S).stacksize += STACKINCREMENT; + } + + // ջȸֵջָ + *(S->top++) = e; + + return OK; +} + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e) { + if(S == NULL || (*S).base == NULL) { + return ERROR; + } + + if((*S).top == (*S).base) { + return ERROR; + } + + // ջջָȵݼٸֵ + *e = *(--(*S).top); + + return OK; +} diff --git a/VisualC++/CourseBook/0305_Expression/SqStack.h b/VisualC++/CourseBook/0305_Expression/SqStack.h new file mode 100644 index 0000000..74a388a --- /dev/null +++ b/VisualC++/CourseBook/0305_Expression/SqStack.h @@ -0,0 +1,69 @@ +/*============================= + * ջ˳洢ṹ˳ջ + =============================*/ + +#ifndef SQSTACK_H +#define SQSTACK_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define STACK_INIT_SIZE 100 // ˳ջ洢ռijʼ +#define STACKINCREMENT 10 // ˳ջ洢ռķ + +/* ʽԪͶ */ +typedef char SElemType; + +// ˳ջԪؽṹ +typedef struct { + SElemType* base; // ջָ + SElemType* top; // ջָ + int stacksize; // ǰѷĴ洢ռ䣬ԪΪλ +} SqStack; + + +/* + * ʼ + * + * һջʼɹ򷵻OK򷵻ERROR + */ +Status InitStack(SqStack* S); + +/* + * п + * + * ж˳ջǷЧݡ + * + * ֵ + * TRUE : ˳ջΪ + * FALSE: ˳ջΪ + */ +Status StackEmpty(SqStack S); + +/* + * ȡֵ + * + * ȡջջԪء + * + *ע + * òʵ봫ͳ˳ջȡֵЩͬһ + */ +SElemType GetTop(SqStack S); + +/* + * ջ + * + * Ԫeѹ뵽ջ + */ +Status Push(SqStack* S, SElemType e); + +/* + * ջ + * + * ջԪصeա + */ +Status Pop(SqStack* S, SElemType* e); + +#endif diff --git a/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj new file mode 100644 index 0000000..2c6c298 --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {B92DECE4-A1D8-4A31-904B-C2441A1BB053} + My0306_Hanoi + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.filters b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.filters new file mode 100644 index 0000000..df8e3d3 --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.user b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/0306_Hanoi.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0306_Hanoi/Hanoi-main.c b/VisualC++/CourseBook/0306_Hanoi/Hanoi-main.c new file mode 100644 index 0000000..b05e34f --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/Hanoi-main.c @@ -0,0 +1,15 @@ +#include "Hanoi.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + char x = 'x'; + char y = 'y'; + char z = 'z'; + + printf("ΪʾԲ̸Ϊ %d ...\n", N); + + init(N); + + hanoi(N, x, y, z); + + return 0; +} diff --git a/VisualC++/CourseBook/0306_Hanoi/Hanoi.c b/VisualC++/CourseBook/0306_Hanoi/Hanoi.c new file mode 100644 index 0000000..c772b44 --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/Hanoi.c @@ -0,0 +1,133 @@ +/*============== + * ŵ + * + * 㷨: 3.5 + ===============*/ + +#include "Hanoi.h" //**03 ջͶ**// + +/* + * 㷨3.5 + * + * ŵ⣺yΪxǰnԲƶz + */ +void hanoi(int n, char x, char y, char z) { + if(n == 1) { // ƶnԲ̣ƶϵn-1Բ + move(x, 1, z); // Ϊ1Բ̴xƵz + } else { + hanoi(n - 1, x, z, y); // xϱΪ1n-1ԲƵyz + move(x, n, z); // ΪnԲ̴xƵz + hanoi(n - 1, y, x, z); // yϱΪ1n-1Բƶzx + } +} + +void move(char x, int n, char z) { + // stepΪȫֱmain֮ⶨ + gStep++; + printf("%2d %d Բ̴ %c Ƶ %c \n", gStep, n, x, z); + + // ŵƶͼαʾ + PrintGraph(x, n, z); +} + +/* + * ŵͼϢʼ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void init(int n) { + int i; + int* towerX, * towerY, * towerZ; + + T.plates = (int**) malloc(3 * sizeof(int*)); + + towerX = (int*) malloc(n * sizeof(int)); + towerY = (int*) malloc(n * sizeof(int)); + towerZ = (int*) malloc(n * sizeof(int)); + + for(i = 0; i < n; ++i) { + towerX[i] = n-i; + towerY[i] = 0; + towerZ[i] = 0; + } + + T.plates[0] = towerX; + T.plates[1] = towerY; + T.plates[2] = towerZ; + + T.high[0] = n; + T.high[1] = 0; + T.high[2] = 0; + + // ŵƶͼαʾ + PrintGraph('\0', 0, '\0'); +} + +/* + * ŵƶͼαʾ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void PrintGraph(char t1, int n, char t2){ + int i, j; + char** s; + + // nӴt1Ƴ + if(t1=='x') { + T.plates[0][T.high[0]-1] = 0; + T.high[0]--; + } else if(t1=='y') { + T.plates[1][T.high[1]-1] = 0; + T.high[1]--; + } else if(t1=='z') { + T.plates[2][T.high[2]-1] = 0; + T.high[2]--; + } else { + // t1ϵԲ̲Ҫƶ + } + + // nӵt2 + if(t2=='x') { + T.plates[0][T.high[0]] = n; + T.high[0]++; + } else if(t2=='y') { + T.plates[1][T.high[1]] = n; + T.high[1]++; + } else if(t2=='z') { + T.plates[2][T.high[2]] = n; + T.high[2]++; + } else { + // t2ϵԲ̲Ҫƶ + } + + s = (char**)malloc((N+2)*sizeof(char*)); + for(i = 0; i= 0; i--) { + printf("%-*s | %-*s | %-*s\n", N, s[T.plates[0][i]], N, s[T.plates[1][i]], N, s[T.plates[2][i]]); + } + printf("%-*s + %-*s + %-*s\n", N, s[N+1], N, s[N+1], N, s[N+1]); + printf("%-*s %-*s %-*s\n", N+2, "x", N+2, "y", N+2, "z"); + + printf("\n"); +} diff --git a/VisualC++/CourseBook/0306_Hanoi/Hanoi.h b/VisualC++/CourseBook/0306_Hanoi/Hanoi.h new file mode 100644 index 0000000..2f3fa97 --- /dev/null +++ b/VisualC++/CourseBook/0306_Hanoi/Hanoi.h @@ -0,0 +1,59 @@ +/*============== + * ŵ + * + * 㷨: 3.5 + ===============*/ + +#ifndef HANOI_H +#define HANOI_H + +#include +#include +#include "Status.h" + +#define N 5 // ŵ + +// ŵͼϢ +typedef struct { + int** plates; // ŵеԲϢ + int high[3]; // ĸ߶ȣе +} Tower; + +// ŵ +Tower T; + +// ͳƶ +int gStep; + + +/* + * 㷨3.5 + * + * ŵ⣺yΪxǰnԲƶz + */ +void hanoi(int n, char x, char y, char z); + +/* + * ƶŵԲ̣nԲ̴xƵz + */ +void move(char x, int n, char z); + +/* + * ŵͼϢʼ + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void init(int n); + +/* + * ŵƶͼαʾμmove() + * + *ע + * ̲޴˲ + * Ӵ˲ĿΪ˱ڹ۲캺ŵԲ̵ƶ + */ +void PrintGraph(char x, int n, char z); + +#endif diff --git a/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj new file mode 100644 index 0000000..011e09f --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {9ECA0672-0E13-4324-B2EA-1A8153348085} + My0307_LinkQueue + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.filters b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.filters new file mode 100644 index 0000000..b4e2036 --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.user b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/0307_LinkQueue.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0307_LinkQueue/LinkQueue-main.c b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue-main.c new file mode 100644 index 0000000..1e71482 --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue-main.c @@ -0,0 +1,94 @@ +#include +#include "LinkQueue.h" //**03 ջͶ**// + +// Ժӡ +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + LinkQueue Q; + int i; + QElemType e; + + printf(" InitQueue \n"); + { + printf(" ʼ Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf(" QueueEmpty \n"); + { + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" EnQueue \n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf(" Ԫ \"%2d\" ...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" QueueTraverse \n"); + { + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" QueueLength \n"); + { + i = QueueLength(Q); + printf(" Q ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" DeQueue \n"); + { + DeQueue(&Q, &e); + printf(" ͷԪ \"%d\" ...\n", e); + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" GetHead \n"); + { + GetHead(Q, &e); + printf(" ͷԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearQueue \n"); + { + printf(" Q ǰ"); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + + ClearQueue(&Q); + + printf(" Q "); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyQueue \n"); + { + printf(" Q ǰ"); + Q.front != NULL && Q.rear != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + + DestroyQueue(&Q); + + printf(" Q "); + Q.front != NULL && Q.rear != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// Ժӡ +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.c b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.c new file mode 100644 index 0000000..ba578f3 --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.c @@ -0,0 +1,204 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * (ṹ) + * + * ͷռڴ档 + */ +Status DestroyQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + while((*Q).front) { + (*Q).rear = (*Q).front->next; + free((*Q).front); + (*Q).front = (*Q).rear; + } + + return OK; +} + +/* + * ÿ() + * + * Ҫͷзͷ㴦Ŀռ䡣 + */ +Status ClearQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).rear = (*Q).front->next; + + while((*Q).rear) { + (*Q).front->next = (*Q).rear->next; + free((*Q).rear); + (*Q).rear = (*Q).front->next; + } + + (*Q).rear = (*Q).front; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(LinkQueue Q, void (Visit)(QElemType)) { + QueuePtr p; + + if(Q.front == NULL) { + return ERROR; + } + + p = Q.front->next; + + while(p != NULL) { + Visit(p->data); + p = p->next; + } + + printf("\n"); + + return OK; +} + +#endif diff --git a/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.h b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.h new file mode 100644 index 0000000..42cc95b --- /dev/null +++ b/VisualC++/CourseBook/0307_LinkQueue/LinkQueue.h @@ -0,0 +1,100 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* ԪͶ */ +typedef int QElemType; + +// Ԫؽṹ +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// нṹ +typedef struct { + QueuePtr front; // ͷָ + QueuePtr rear; // βָ +} LinkQueue; // еʽ洢ʾ + + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q); + +/* + * (ṹ) + * + * ͷռڴ档 + */ +Status DestroyQueue(LinkQueue* Q); + +/* + * ÿ() + * + * Ҫͷзͷ㴦Ŀռ䡣 + */ +Status ClearQueue(LinkQueue* Q); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q); + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(LinkQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj new file mode 100644 index 0000000..e5dde67 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj @@ -0,0 +1,76 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {28EB7738-3109-4B98-B312-1B3D1DD91DDF} + My0308_SqQueue + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.filters b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.filters new file mode 100644 index 0000000..0b09061 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.user b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/0308_SqQueue.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0308_SqQueue/SqQueue-main.c b/VisualC++/CourseBook/0308_SqQueue/SqQueue-main.c new file mode 100644 index 0000000..c4a59d3 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/SqQueue-main.c @@ -0,0 +1,94 @@ +#include +#include "SqQueue.h" //**03 ջͶ**// + +// Ժӡ +void PrintElem(QElemType e); + +int main(int argc, char** argv) { + SqQueue Q; + int i; + QElemType e; + + printf(" InitQueue ...\n"); + { + printf(" ʼѭ˳ Q ...\n"); + InitQueue(&Q); + } + PressEnterToContinue(); + + printf(" QueueEmpty ...\n"); + { + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" EnQueue ...\n"); + { + for(i = 1; i <= 6; i++) { + EnQueue(&Q, 2 * i); + printf(" Ԫ \"%2d\" Q...\n", 2 * i); + } + } + PressEnterToContinue(); + + printf(" QueueTraverse ...\n"); + { + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" QueueLength ...\n"); + { + i = QueueLength(Q); + printf(" Q ijΪ %d \n", i); + } + PressEnterToContinue(); + + printf(" DeQueue ...\n"); + { + DeQueue(&Q, &e); + printf(" ͷԪ \"%d\" ...\n", e); + printf(" Q еԪΪQ = "); + QueueTraverse(Q, PrintElem); + } + PressEnterToContinue(); + + printf(" GetHead ...\n"); + { + GetHead(Q, &e); + printf(" ͷԪصֵΪ \"%d\" \n", e); + } + PressEnterToContinue(); + + printf(" ClearQueue ...\n"); + { + printf(" Q ǰ"); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + + ClearQueue(&Q); + + printf(" Q "); + QueueEmpty(Q) ? printf(" Q Ϊգ\n") : printf(" Q Ϊգ\n"); + } + PressEnterToContinue(); + + printf(" DestroyQueue ...\n"); + { + printf(" Q ǰ"); + Q.base != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + + DestroyQueue(&Q); + + printf(" Q "); + Q.base != NULL ? printf(" Q ڣ\n") : printf(" Q ڣ\n"); + } + PressEnterToContinue(); + + return 0; +} + +// Ժӡ +void PrintElem(QElemType e) { + printf("%d ", e); +} diff --git a/VisualC++/CourseBook/0308_SqQueue/SqQueue.c b/VisualC++/CourseBook/0308_SqQueue/SqQueue.c new file mode 100644 index 0000000..6079495 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/SqQueue.c @@ -0,0 +1,182 @@ +/*============================= + * е˳洢ṹ˳У + ==============================*/ + +#include "SqQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյ˳С + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķѭ + */ +Status InitQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).base = (QElemType*) malloc(MAXQSIZE * sizeof(QElemType)); + if(!(*Q).base) { + exit(OVERFLOW); + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * (ṹ) + * + * ͷѭ˳ռڴ档 + */ +Status DestroyQueue(SqQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + if((*Q).base) { + free((*Q).base); + } + + (*Q).base = NULL; + (*Q).front = (*Q).rear = 0; + + return ERROR; +} + +/* + * ÿ() + * + * ֻѭ˳д洢ݣͷ˳ջռڴ档 + */ +Status ClearQueue(SqQueue* Q) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = 0; + + return OK; +} + +/* + * п + * + * жѭ˳ǷЧݡ + * + * ֵ + * TRUE : ѭ˳Ϊ + * FALSE: ѭ˳вΪ + */ +Status QueueEmpty(SqQueue Q) { + // пյı־ + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ѭ˳аЧԪص + */ +int QueueLength(SqQueue Q) { + if(Q.base == NULL) { + return 0; + } + + // г + return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(SqQueue Q, QElemType* e) { + // пյı־ + if(Q.base == NULL || Q.front == Q.rear) { + return ERROR; + } + + *e = Q.base[Q.front]; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(SqQueue* Q, QElemType e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // ı־˷һռֶпպͶ + if(((*Q).rear + 1) % MAXQSIZE == (*Q).front) { + return ERROR; + } + + // + (*Q).base[(*Q).rear] = e; + + // βָǰ + (*Q).rear = ((*Q).rear + 1) % MAXQSIZE; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(SqQueue* Q, QElemType* e) { + if(Q == NULL || (*Q).base == NULL) { + return ERROR; + } + + // пյı־ + if((*Q).front == (*Q).rear) { + return ERROR; + } + + // + *e = (*Q).base[(*Q).front]; + + // ͷָǰ + (*Q).front = ((*Q).front + 1) % MAXQSIZE; + + return OK; +} + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)) { + int i; + + if(Q.base == NULL) { + return ERROR; + } + + for(i = Q.front; i != Q.rear; i = (i + 1) % MAXQSIZE) { + Visit(Q.base[i]); + } + + printf("\n"); + + return OK; +} diff --git a/VisualC++/CourseBook/0308_SqQueue/SqQueue.h b/VisualC++/CourseBook/0308_SqQueue/SqQueue.h new file mode 100644 index 0000000..18c3ba7 --- /dev/null +++ b/VisualC++/CourseBook/0308_SqQueue/SqQueue.h @@ -0,0 +1,98 @@ +/*============================= + * е˳洢ṹ˳У + ==============================*/ + +#ifndef SQQUEUE_H +#define SQQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* 궨 */ +#define MAXQSIZE 1000 //г + +/* ѭԪͶ */ +typedef int QElemType; + +// ѭе˳洢ṹ +typedef struct { + QElemType* base; // ̬洢ռ + int front; // ͷָ룬вգָͷԪ + int rear; // βָ룬вգָβԪصһλ +} SqQueue; + + +/* + * ʼ + * + * һյ˳С + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķѭ + */ +Status InitQueue(SqQueue* Q); + +/* + * (ṹ) + * + * ͷѭ˳ռڴ档 + */ +Status ClearQueue(SqQueue* Q); + +/* + * ÿ() + * + * ֻѭ˳д洢ݣͷ˳ջռڴ档 + */ +Status DestroyQueue(SqQueue* Q); + +/* + * п + * + * жѭ˳ǷЧݡ + * + * ֵ + * TRUE : ѭ˳Ϊ + * FALSE: ѭ˳вΪ + */ +Status QueueEmpty(SqQueue Q); + +/* + * + * + * ѭ˳аЧԪص + */ +int QueueLength(SqQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(SqQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(SqQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(SqQueue* Q, QElemType* e); + +/* + * + * + * visitʶQ + */ +Status QueueTraverse(SqQueue Q, void(Visit)(QElemType)); + +#endif diff --git a/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj new file mode 100644 index 0000000..1848bd5 --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj @@ -0,0 +1,80 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {C44F604C-F8CD-498E-A3EF-04FCF37AA303} + My0309_BankQueuing + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)\..\Status;$(IncludePath) + + + + Level3 + Disabled + + + true + $(SolutionDir)\..\Status\Status.lib;%(AdditionalDependencies) + Console + + + + + Level3 + MaxSpeed + true + true + + + true + true + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.filters b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.filters new file mode 100644 index 0000000..dcd279b --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.filters @@ -0,0 +1,42 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.user b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/0309_BankQueuing.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/VisualC++/CourseBook/0309_BankQueuing/BankQueuing-main.c b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing-main.c new file mode 100644 index 0000000..7e74c26 --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing-main.c @@ -0,0 +1,10 @@ +#include "BankQueuing.h" //**03 ջͶ**// + +int main(int argc, char** argv) { + + Bank_Simulation_1(); //㷨3.6 + +// Bank_Simulation_2(); //㷨3.73.6 + + return 0; +} diff --git a/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.c b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.c new file mode 100644 index 0000000..143402d --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.c @@ -0,0 +1,338 @@ +/*================== + * ģŶ + * + * 㷨: 3.63.7 + ===================*/ + +#ifndef BANKQUEUING_C +#define BANKQUEUING_C + +#include "BankQueuing.h" //**03 ջͶ**// + +/* + * 㷨3.6 + * + * ҵģ⣬ͳһڿͻжƽʱ + */ +void Bank_Simulation_1() +{ + char eventType; + + OpenForDay(); // п + + // ¼Ϊ + while(MoreEvent()) { + EventDrived(&eventType); // ¼ + + switch(eventType) { + case 'A': + CustomerArrived(); // ͻ¼ + break; + case 'D': + CustomerDeparture(); // ͻ뿪¼ + break; + default : + Invalid(); + } + } + + CloseForDay(); +} + +/* + * 㷨3.7 + * + * ҵģ⣬ͳһڿͻжƽʱ + * 㷨3.7Ƶ + */ +void Bank_Simulation_2() { + OpenForDay(); // п + + while(!ListEmpty(gEv)) { + ListDelete(gEv, 1, &gEn); + + if(gEn.NType == Arrive) { + CustomerArrived(); // ͻ¼ + } else { + CustomerDeparture(); // ͻ뿪¼ + } + } + + CloseForDay(); // й +} + +/* + * пţʼл + */ +void OpenForDay() { + int i; + + // ʱ,ÿӪҵ8Сʱ480 + gCloseTime = 480; + + // ʼۼʱͿͻΪ0 + gTotalTime = 0; + gCustomerNum = 0; + + // ʼ¼Ϊձ + InitList(&gEv); + + // 趨һͻ¼ + gEn.OccurTime = 0; + gEn.NType = Arrive; + + // ¼ + OrderInsert(gEv, gEn, cmp); + + // ʼ4ն + for(i = 1; i <= N; ++i) { + InitQueue(&gQ[i]); + } + + Show(); +} + +/* + * й + * + * ͷԴӡͳϢ + */ +void CloseForDay() { + printf("ܹ%dͻƽʱΪ%dӡ\n", gCustomerNum, gTotalTime / gCustomerNum); +} + +/* + * ж¼ǷΪա + * Ƿδ¼ + */ +Status MoreEvent() { + return !ListEmpty(gEv); +} + +/* + * ¼¼Ƴ¼洢ȫֱgEnС + * event洢¼ + */ +void EventDrived(char* eventType) { + // ¼лȡ¼ + ListDelete(gEv, 1, &gEn); + + // ʶ¼ + if(gEn.NType == Arrive) { + *eventType = 'A'; + } else { + *eventType = 'D'; + } +} + +/* + * ͻ¼gEn.NType=0 + */ +void CustomerArrived() { + Event en; // ¼ + QElemType customer; // ͻ¼ + + int durtime; // ǰͻҵҪʱ + + int intertime; // һͻﵽʱ + int t; // һͻʱ + + int i; // б + + // ܿͻһ + ++gCustomerNum; + + // ɵǰͻҵҪʱһͻﵽʱ + Random(&durtime, &intertime); + + // һͻʱ + t = gEn.OccurTime + intertime; + + // δţһͻ""¼¼ + if(t < gCloseTime) { + en.OccurTime = t; // һͻĵʱ + en.NType = Arrive; // ""¼ + OrderInsert(gEv, en, cmp); // ""¼¼ + } + + // ȡǰ̵Ķб + i = Minimum(); + + // ¼ǰͻϢ + customer.ArrivedTime = gEn.OccurTime; // ʱ + customer.Duration = durtime; // ҵʱ + customer.Count = gCustomerNum; // ͻ + + // ǰͻ̶Ŷ + EnQueue(&gQ[i], customer); + printf("%3dͻ %d Ŷ...\n", customer.Count, i); + Show(); + + /* + * ǰֻһͻŶӣҪ뿪ʱ䣬 + * һ"뿪"¼뵽¼ + */ + if(QueueLength(gQ[i]) == 1) { + en.OccurTime = gEn.OccurTime + durtime; // ǰͻ뿪ʱ + en.NType = i; // "뿪"¼ֵͣΪ1-4ָʾӵڼ뿪 + OrderInsert(gEv, en, cmp); // "뿪"¼¼ + } +} + +/* + * ͻ뿪¼gEn.NType>0 + */ +void CustomerDeparture() { + Event en; // ¼ + QElemType customer; // ͻ¼ + int i = gEn.NType; // б + + // iеĶͷͻҵ񲢳 + DeQueue(&gQ[i], &customer); + printf("%3dͻӶ %d 뿪...\n", customer.Count, i); + Show(); + + // ۼƿͻʱ + gTotalTime += gEn.OccurTime - customer.ArrivedTime; + + /* + * ǰȻŶӵĿͻҪöжͷͻ뿪ʱ + * ע֮㣬Ϊֻһͻ뿪ˣһͻ뿪ʱŻ + */ + if(!QueueEmpty(gQ[i])) { + // ȡͷͻ + GetHead(gQ[i], &customer); + en.OccurTime = gEn.OccurTime + customer.Duration; // "뿪"¼ʱ + en.NType = i; // "뿪"¼ + OrderInsert(gEv, en, cmp); // "뿪"¼¼ + } +} + +/* + * Ч¼ + */ +void Invalid() { + printf("д"); + exit(OVERFLOW); +} + +/* + * ¼en뵽¼evУevǰʱ絽е¼ + * cmpȽ¼enΪڶʵδȥ + */ +Status OrderInsert(EventList ev, Event en, int(cmp)(Event, Event)) { + EventList p, pre, s; + + if(ev == NULL) { + return ERROR; + } + + for(pre = ev; pre->next != NULL && cmp(pre->next->data, en) < 0; pre = pre->next) { + // + } + + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = en; + + s->next = pre->next; + pre->next = s; + + return OK; +} + +/* + * Ƚ¼ + */ +int cmp(Event a, Event b) { + if(a.OccurTime < b.OccurTime) { + return -1; // aȽ + } else if(a.OccurTime > b.OccurTime) { + return 1; // aȽ + } else { + return 0; // ͬʱ + } +} + +/* + * + * + * durtime ǰͷҵʱ + * intertimeһͻʱ + */ +void Random(int* durtime, int* intertime) { + srand((unsigned) time(NULL)); + *durtime = rand() % DurationTime + 1; // ҵʱ120 + *intertime = rand() % IntervalTime + 1; // һ˿͵ʱΪ110 +} + +/* + * س̵Ķе + */ +int Minimum() { + int i1 = QueueLength(gQ[1]); + int i2 = QueueLength(gQ[2]); + int i3 = QueueLength(gQ[3]); + int i4 = QueueLength(gQ[4]); + + if(i1 <= i2 && i1 <= i3 && i1 <= i4) { + return 1; + } + + if(i2 < i1 && i2 <= i3 && i2 <= i4) { + return 2; + } + + if(i3 < i1 && i3 < i2 && i3 <= i4) { + return 3; + } + + if(i4 < i1 && i4 < i2 && i4 < i3) { + return 4; + } + + return 0; +} + +/* + * ʾпͻеŶ + */ +void Show() { + int i; + QueuePtr p; // ¼Ŀͻǵڼ + + // пͻ + for(i = 1; i <= N; i++) { + for(p = gQ[i].front; p; p = p->next) { + if(p == gQ[i].front) { + if(i == 1) { + printf("̨١"); + } + if(i == 2) { + printf("̨ڡ"); + } + if(i == 3) { + printf("̨ۡ"); + } + if(i == 4) { + printf("̨ܡ"); + } + } else { + printf("%03d", p->data.Count); + } + + + if(p == gQ[i].rear) { + printf("\n"); + } + } + } + + printf("\n"); + + Wait(SleepTime); +} + +#endif diff --git a/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.h b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.h new file mode 100644 index 0000000..8d27560 --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/BankQueuing.h @@ -0,0 +1,121 @@ +/*================== + * ģŶ + * + * 㷨: 3.63.7 + ===================*/ + +#ifndef BANKQUEUING_H +#define BANKQUEUING_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include // ṩtimeԭ +#include "Status.h" //**01 **// +#include "LinkList.h" //**02 Ա**// +#include "LinkQueue.h" //**03 ջͶ**// + +/* 궨 */ +#define N 4 // ͻ +#define SleepTime 1 // SleepTimeʱ +#define DurationTime 20 // ҵʱ1DurationTimeӲ +#define IntervalTime 8 // һͻʱΪ1IntervalTimeӲ + +/* Ͷ */ +typedef LinkList EventList; //¼ͣΪ + +/* ȫֱǰ涼gǣ */ +int gTotalTime; // ۼƿͻ +int gCustomerNum; // ۼƿͻʱ + +int gCloseTime; // ʱ,ÿӪҵ8Сʱ480 + +EventList gEv; // ¼洢д¼ +Event gEn; // ǰڴ¼ + +LinkQueue gQ[N+1]; // 4ͻ,0ŵԪ + + +/* + * 㷨3.6 + * + * ҵģ⣬ͳһڿͻжƽʱ + */ +void Bank_Simulation_1(); + +/* + * 㷨3.7 + * + * ҵģ⣬ͳһڿͻжƽʱ + * 㷨3.7Ƶ + */ +void Bank_Simulation_2(); + +/* + * пţʼл + */ +void OpenForDay(); + +/* + * й + * + * ͷԴӡͳϢ + */ +void CloseForDay(); + +/* + * ж¼ǷΪա + * Ƿδ¼ + */ +Status MoreEvent(); + +/* + * ¼¼Ƴ¼洢ȫֱgEnС + * event洢¼ + */ +void EventDrived(char* event); + +/* + * ͻ¼gEn.NType=0 + */ +void CustomerArrived(); + +/* + * ͻ뿪¼gEn.NType>0 + */ +void CustomerDeparture(); + +/* + * Ч¼ + */ +void Invalid(); + +/* + * ¼en뵽¼evУevǰʱ絽е¼ + * cmpȽ¼enΪڶʵδȥ + */ +Status OrderInsert(EventList gEv, Event gEn, int(cmp)(Event, Event)); + +/* + * Ƚ¼ + */ +int cmp(Event a, Event b); + +/* + * + * + * durtime ǰͷҵʱ + * intertimeһͻʱ + */ +void Random(int* durtime, int* intertime); + +/* + * س̵Ķе + */ +int Minimum(); + +/* + * ʾпͻеŶ + */ +void Show(); + +#endif diff --git a/VisualC++/CourseBook/0309_BankQueuing/LinkList.c b/VisualC++/CourseBook/0309_BankQueuing/LinkList.c new file mode 100644 index 0000000..ecc119c --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/LinkList.c @@ -0,0 +1,130 @@ +/*=============================== + * Աʽ洢ṹ + * + * 㷨: 2.82.92.102.11 + ================================*/ + +#include "LinkList.h" //**02 Ա**// + +/* + * ʼ + * + * ֻdzʼһͷ㡣 + * ʼɹ򷵻OK򷵻ERROR + */ +Status InitList(LinkList* L) { + (*L) = (LinkList) malloc(sizeof(LNode)); + if(*L == NULL) { + exit(OVERFLOW); + } + + (*L)->next = NULL; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: Ϊ + */ +Status ListEmpty(LinkList L) { + // ֻͷʱΪΪ + if(L != NULL && L->next == NULL) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * 㷨2.9 + * + * + * + * iλϲeɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListInsert(LinkList L, int i, ElemType e) { + LinkList p, s; + int j; + + // ȷ + if(L == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // Ѱҵi-1㣬ұ֤ý㱾ΪNULL + while(p != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // ͷˣiֵϹ(i<=0)˵ûҵϺĿĽ + if(p == NULL || j > i - 1) { + return ERROR; + } + + // ½ + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = e; + s->next = p->next; + p->next = s; + + return OK; +} + +/* + * 㷨2.10 + * + * ɾ + * + * ɾiλϵԪأɾԪش洢eС + * ɾɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListDelete(LinkList L, int i, ElemType* e) { + LinkList p, q; + int j; + + // ȷҲΪձ + if(L == NULL || L->next == NULL) { + return ERROR; + } + + p = L; + j = 0; + + // Ѱҵi-1㣬ұ֤ýĺ̲ΪNULL + while(p->next != NULL && j < i - 1) { + p = p->next; + ++j; + } + + // ͷˣiֵϹ(i<=0)˵ûҵϺĿĽ + if(p->next == NULL || j > i - 1) { + return ERROR; + } + + // ɾi + q = p->next; + p->next = q->next; + *e = q->data; + free(q); + + return OK; +} diff --git a/VisualC++/CourseBook/0309_BankQueuing/LinkList.h b/VisualC++/CourseBook/0309_BankQueuing/LinkList.h new file mode 100644 index 0000000..53bc85f --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/LinkList.h @@ -0,0 +1,83 @@ +/*=============================== + * Աʽ洢ṹ + * + * 㷨: 2.82.92.102.11 + ================================*/ + +#ifndef LINKLIST_H +#define LINKLIST_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +// ¼öٳ0¼14ʾĸڵ뿪¼ +typedef enum { + Arrive, Leave_1, Leave_2, Leave_3, Leave_4 +} EventType; + +/* ¼ԪͶ */ +typedef struct +{ + int OccurTime; // ¼ʱ + EventType NType; // ¼ +} Event, ElemType; // ¼Ԫ + +/* + * ṹ + * + * עĵͷ + */ +typedef struct LNode { + ElemType data; // ݽ + struct LNode* next; // ָһָ +} LNode; + +// ָָ +typedef LNode* LinkList; + + +/* + * ʼ + * + * ʼɹ򷵻OK򷵻ERROR + */ +Status InitList(LinkList* L); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: Ϊ + */ +Status ListEmpty(LinkList L); + +/* + * 㷨2.9 + * + * + * + * iλϲeɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListInsert(LinkList L, int i, ElemType e); + +/* + * 㷨2.10 + * + * ɾ + * + * ɾiλϵԪأɾԪش洢eС + * ɾɹ򷵻OK򷵻ERROR + * + *ע + * ̲iĺԪλã1ʼ + */ +Status ListDelete(LinkList L, int i, ElemType* e); + +#endif diff --git a/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.c b/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.c new file mode 100644 index 0000000..b800d2c --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.c @@ -0,0 +1,138 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_C +#define LINKQUEUE_C + +#include "LinkQueue.h" //**03 ջͶ**// + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q) { + if(Q == NULL) { + return ERROR; + } + + (*Q).front = (*Q).rear = (QueuePtr) malloc(sizeof(QNode)); + if(!(*Q).front) { + exit(OVERFLOW); + } + + (*Q).front->next = NULL; + + return OK; +} + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q) { + if(Q.front == Q.rear) { + return TRUE; + } else { + return FALSE; + } +} + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q) { + int count = 0; + QueuePtr p = Q.front; + + while(p != Q.rear) { + count++; + p = p->next; + } + + return count; +} + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e) { + QueuePtr p; + + if(Q.front == NULL || Q.front == Q.rear) { + return ERROR; + } + + p = Q.front->next; + *e = p->data; + + return OK; +} + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL) { + return ERROR; + } + + p = (QueuePtr) malloc(sizeof(QNode)); + if(!p) { + exit(OVERFLOW); + } + + p->data = e; + p->next = NULL; + + (*Q).rear->next = p; + (*Q).rear = p; + + return OK; +} + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e) { + QueuePtr p; + + if(Q == NULL || (*Q).front == NULL || (*Q).front == (*Q).rear) { + return ERROR; + } + + p = (*Q).front->next; + *e = p->data; + + (*Q).front->next = p->next; + if((*Q).rear == p) { + (*Q).rear = (*Q).front; + } + + free(p); + + return OK; +} + +#endif diff --git a/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.h b/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.h new file mode 100644 index 0000000..7600daa --- /dev/null +++ b/VisualC++/CourseBook/0309_BankQueuing/LinkQueue.h @@ -0,0 +1,83 @@ +/*========================= + * еʽ洢ṹӣ + ==========================*/ + +#ifndef LINKQUEUE_H +#define LINKQUEUE_H + +#include +#include // ṩmallocreallocfreeexitԭ +#include "Status.h" //**01 **// + +/* ԪͶ壬¼ͻϢ */ +typedef struct { + int ArrivedTime; // ͻʱ + int Duration; // ҵʱ + int Count; // ˱¼ÿеĿͻǵڼ̲޴˱Ӵ˱Ŀǹ۲Ŷ״ +} QElemType; //еԪ + +// Ԫؽṹ +typedef struct QNode { + QElemType data; + struct QNode* next; +} QNode, * QueuePtr; + +// нṹ +typedef struct { + QueuePtr front; // ͷָ + QueuePtr rear; // βָ +} LinkQueue; // еʽ洢ʾ + + +/* + * ʼ + * + * һյӡ + * ʼɹ򷵻OK򷵻ERROR + * + *ע + * Ķдͷ + */ +Status InitQueue(LinkQueue* Q); + +/* + * п + * + * жǷЧݡ + * + * ֵ + * TRUE : Ϊ + * FALSE: ӲΪ + */ +Status QueueEmpty(LinkQueue Q); + +/* + * + * + * ӰЧԪص + */ +int QueueLength(LinkQueue Q); + +/* + * ȡֵ + * + * ȡͷԪأ洢eС + * ҵOK򣬷ERROR + */ +Status GetHead(LinkQueue Q, QElemType* e); + +/* + * + * + * Ԫeӵβ + */ +Status EnQueue(LinkQueue* Q, QElemType e); + +/* + * + * + * ƳͷԪأ洢eС + */ +Status DeQueue(LinkQueue* Q, QElemType* e); + +#endif diff --git a/VisualC++/CourseBook/CourseBook.sdf b/VisualC++/CourseBook/CourseBook.sdf index 67ff2c3e92122b2540683bb2a197a8037d1cd01f..79acf718dd99131e8f62b8cc49f67e73513d5d63 100644 GIT binary patch delta 480212 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

ypg6W3S~jq-o|@xRWlrknhpJ9AmEaLwmt@Qd61 zbuziY574;CnsfBZ-jEd%cm#PZ=P?6Lpcp6t$^myBAp}$drU=0bIDjI+4U_@UCiXym z*aLlG5440m_C~A$Nod`AssL!ldY}~RfflR>8m=Cww0fY;%I*d^qt@IAo)lU+4^&w_ z&|N)11}Lo_Kn#`Dyf~SA8K)aQ)K>HI0Wow~4jA`2X+3}#TCE2V2U`LMl#8i3 z>_<`i|0)F3W$#uMC5z}OaFjzP&)#^hvR|sQjy!u8r3g^UHCCU`Qb+~h4~pdvAU{-y zOQF9zD8HV?MOpIJ#s$=h!kh)MdVW~0m2A|AW4#f|L)O1MukH!UM!meoO#js=A-Snp^x!50fGVJbb}e}UdxYQuJU}Vn1N?+sv-Rp^D7DiQodDf( z33}v`FGYY>vs6VGQUXfNLqt$Z9wLG+@(>a9k%x$&m|QYMCU>l%N$%M1`BDeGH{p*? zF16uXeqww75%SRms(Yeb>h77#mCJzNHIFN=sGFxcCdz(QnkbizG>X|au6($t{ntmz zD@<+|MU3g$+q}2+*2pcbH>XtcN<2B_QyVKSLABxYszP;FVPT#6`M(Ne_2;D{gM3u| zrLb@sg-;%9R~!CJFNwR}bkybJHdIvip4_`I8%r!u=Jn0#II($lEyRc)h#6 zb9!RBGQCed_vesrN_=YPlUjRp8Xvl>6#cAWauG~Le{-w-ziF;Kr)zeK?qn_XuIZ`c`_xCykmt>Re17BC zkJ6oITW&PT?mtayxn+Ilu+>#A3Y(TUr|}IBJAe-RNf>ie;p>9;NkU&7k5F#OAZ< zHlWJrDaOuh#C-7E6RDkS~+IJxspL1Nl5%p3GO&Sb`0U^bL8r zPzw3tVR9NOlYGfA`4m6o8+7@=8B+;)(-1iwe<^?si6I*}ZptXguNo#_IU4dk!{ovk z$Zr`YUojT)eZ%C!IFcuAEyFgfJPZZ0!{jT*Lw?V2`Qea1sLKZ~iaN+28YY**khd~9 z&i{OYDU-3`^knsHRWmPfEx5hV=Z*Joj8>PIh+Ntnkd}j86K{89hE0?Vi>%rSCZYIQOy2G2uzk ziLnXsqkE6+KZ2*gCrVxT@aXv1VexUj6#67FDqYLZs&S9ZRA;LcB`miEI|I?mn7`ZC zTOKb7EEl5}y#?IvHU*`l_>up?^kv~^ix=6FG`(9e^v!Sa8udyM9R+Csujjw;^~ zxp|Nstmho38_nxZ0AMv=!R+PpR2yr^y@$csgvXKksV!H}cDUQ|S*TPobF`zm+i|n? zOum|i&=87QL73I~deF2-}YIL&V*ROzop zrB#L8yy)q%lV&fj57*U^9=Yzp=$FU!npEW_zRc&MEnW^RVk~7$kZYyrbbF~)Od%RF z`L~#>l#A{8qV9K1rJ~5Z`Ot>~^{pF5M`lf2aYop%pC|OpkkOxBm>erm%1quc;1L6K zF?twRaB;Qs4<)6Jf|Q&5)~twc$~lEP=E;9kUn$k(B()426R?Q!Y>ICk-5e-YH+)EO zZ_eJhVf}fl*PkcT*_1yZPyL&Uy{s}&q$9;~g^U}ymDJRDoZL^jR#aL78!34F(3*dv z*US#J+Vf~(L8+acE+$5iF@J82uc)$EPf9RX7;3b=u%ZHobWmHL&esU17#_@f1~|~h z=;Epm>YwQuy(s0zpI()AxfHYV{$bR-ipa5Cv*bZeQ+|0?uai0I@{FNsgB)mMbaP`4 z?g{BRy(}6-e|lY7dpxXy%3(Zod&o^a``fOy2dAUVfi^}D7e0iys8FX~TC0T9Ytvd( zs=DdZ9{k8WJUVc&1M<9H1#5tRGSw8|KpUf*(cl4Qs3WEq^zykT==JFb1y%W3B}OLH zPQJufW#{Z%{)aN2;Vov~L*yU88=h z*Q)(ibEx7`9B5;7a&v|{V|rOHfkx1uUW3*S7b{jij9NS99_--!{K_F~^|ShF2J-;! zm|oRuVZBjPduj?wM{x_Ol{Q8v<3ar~6~CsJXFcP%S4XS8duo{5B0Akp%>S%|uD_pO zA67~$t{ss|w$GZuJb=HYH}qOq+sohsXEX;wnE^Ld@F4z{Ccdc`rabu5E7N}zl=ZP1 zjMT28gLUhzL)KZzYO5X01N$PZSeIqqw5(nBCOBfAj{eitPg}U@=s3iXMYPAk} z)rVG(#9aYb;EIEtWEXcIvJ!?%49@_m@6);a5(nT#mI0zz+m~AP@pZcBsqWvy>%am}r7sq6ub+CfFmIV2(&Op0GqT!4S~|J46!< z5KXW@G{OAP1cO5p%nePjHZ;N5&;%<(6O0T^urV~jxX=XKLK932O|UF9@pSo^1ORGF zrlbY50=Vc+b^vNjCJAr@#Q?OLOr-#n=1dg?YN8+O0YCw&fNH?xA`}477c+@~9dH0n zKmw93ummUtyg)hN11bO*;F$tI5Rd@{r~){dzyktc0?dGgKuxq_9sg7I$YcGFrs!jP z?<1KgNJ2>lU|{MJir0s}DtMUF|b^EJ-0L7ImCX4j%v)Pz=C@jaUMB0UuBa z$bbS=0oA|=0Cub*OjpTi2LYz3F9|9U2sIxu2|XVX zdOo7iVQ8tD5~2lw(hr@V1Ze)ySxJD^j0p7~Ix7hyHP(Wc+FwW5b zdRB7BN82kpgt2^5(#;v}%IlxHpy%UmAnh!89b+GI2R6d<*boulI80<7F7lH`k4Tm$ z^x3yuJ`rBL6QZTxz0IShft$1B(8v>6^k=RX)MDE*(e|P=d~J zQdfk!5W;E z1&A3eVu33Li>m~m1rttexq!Uy8Q)VGJRfTr;W(! zfnziJeYJ!@XNpN%HRGi5v-1TAX(x@gtw1|zw1iFTftK*nz!0_3`O@T^z;;kJRFtHX ze5j1h^x-0VZa0R?Du;^#!$rJ#{i&&(P!6FvZWw1zH^O8`XEQy@W z+F+=$O6$0BCsKrU+$btvjBXjuj(n~ixn3#5MK(EKaEG&2>%3n(FHji; z++&r6v|l_YQty39IBEi~%VIfQePO7;teq5gvOdwY`7Lz2=z2+bE$P$FZ9DCtDYpw} zN3JCUB8PSd(Q;{5YTTACh)+F7z zlYnj%dz_@tMH>oTr1>c~(X*&p@4>)E_hJnBcTf0kZhzNZEq6BE5y`q*dTwvMEw#5nU9h*Zw3bu5Zfd!) z=>~-Y9&j0VbLVx5>y+!dclGYf?2J-?xa_sDYx!&2)bRXjU$X7;_~q`)J1AcxMs$X&zUPG2<5SUav^SE8 zL?ivvveRPIBG_99>hY~5SCWr9*Gd{{ z%LGS+P}xYZbP;?&pl>Bk$g9{nT;w{N2H$;)ISY1%_+fT0P!1semmQ(L>%`IXfcC*&P7F#Mu!M&W_-3NjqY@*%7$Sj<9TY#8$E+jFKG@lk5nNWJeq%J0c$0 z5zokuXhn9!BC;cLmK{N|>FKdA_09hh{)Xgd(-EzO1x_^#{THY7v>L7U9Hd zRmolEQBA)-CB*=)5(O9mSaGR1fpT0gA)vI2Pzi{*PFz3%4J}Oc z;6!zWv~K6aPE|jBq-0;xO-F)uNhk%%03YB7f`9_p&1AZ{v-_IPt72D1uV^Ea;@HIrvd-#Grjy}hulma_d8|7Ar_e%m z#T467YV*!AIT>EsySVf8w$rkw#!lr=Z96%Bvis!DlQJ>HBF!$y%#Y6RpBJ6iKQ}w4 z=|ttk#B61@dsb`)Kf_%gpWbE%2idTG{{YAbQ;-z z%IcD7BaR!Jc8A@KF1M>wN=OvA)R}gMo#~=*QEy?dBjf0%Af^d1Z42AN)?T&u$53fV z5xRMf`+2Kx1T>n#j*6h7!3$F^$L_=gI`Uf{Fn|enzo*2uDAfOhxk7zJ<%tJ4*``q9qOs<>2Qcq?enKZgUX_gQ&c8(IH+vu zaGWcnkg9V<6ddPDC^*g)P;i_ppWrxGJc-EvxZ+8P1(il-Dvc;Wd>oaf<#ZJu0JUsV zyivJirgF(l<&xr8DY%rAR7!QBsLbj@rTQ1MuPt_Glu8D*5L2%vtyKJ&>En+TyZ|bH z%=GO?X9u8jNu*q*SSzF`E2W`ADW)+yQ;JQ@&QwOULB0KPS5h&l#P*yrD&4wJoeM7| z$j(KpLUk??6)G1E2qgGob-5XHTJ7C?Q1J!*`<1q{+Rl*GmQy^X7HFZWvb_IMfp%e4 z*`OROD_%*9A19n!BW*n~8>TY;RaLeuN<|cIFO^W(;Td~VQwfF6UI3L)=GK}l~6L3P;zbvKn0Xc1r$1A0aQTAR6wEc3qS=F`gZ|TK*>}<$y7keR6xlF+S^-Z z6*l|0sGQ!k96=Lg64(jy2%H2(1PN_`B!V;o8-bl5pTI>Rl;h>hB*-B!(7T#OU?s>T z$fAP0Yq=h!GW~y0uv1Zrya7;Aio5|(QHqV80aTQtOB_H&sZ2#FI#K~tl*&|;%2bph zuK`q)Vq0neiqZ-2O(K=0GL@z1Y5-7KDpOf1Q&}pz38*NQsVJ4HD3z%wm8mF2|1*Gv z_LPlh_w6Zr4-5Z~T~^lbq<>%8u!L^2@CvyAX8Ke8RN$%hC+nW9cv5__{)zAt)+ZVt zk38;v{NyLUWO+q)&|&P$jxBNZW^Jjd>CADXRA6q}SGCW#ul4ep%Uk!>>OrA_PaniH!MeTl6JH3@-)8mU!T(tUK|yK^Tc`h_htISD^2mPdMH-?B?W z;%YW6EUsb&%K%>zJiQ!nXa!)&NYB3gSK(ftQDY$Hyuw%k-n zr<2vIU)zY&KV`oC+7B#s6HfmW`(x>kIGw6qeSDKRIBEL$mrRd{SM_DSkm#IrH!3ak z8)Q`fwyEn!g~6KpPsl0y4bj{rC*iQMm$@bBuoKL$N!wqqsq%D$~zPo?JO>5FvLQ=qC54qVc|fU@1ja#kaKTe|4k zs<~g(;yXZMzbHAqPxuB~am!{{l!w>c+J(+4g@#kPi z7kxW5H-8Q;?5fYL=_}m)LV)yTu?edXuZz0qxma_*p~dTxu6l|zJ&)Q~KDjr#s9&1$ zx=i|mcK`Nj{(sTjmuv246V&VWb=6m_>9gKEH;MG6E3d$)E4t{}uetxA={e98s)T zf@{_Hue+vi!D|D1kv^-EzP?v=(Q~!t7Ws7^?YbRP|J+R1*_3$XN&LK5J72f`@xRmg z4E1~hKVPby@4YnmDV@($&nNQpG_{d_`O=E-=zNxPK599fApPx7f>euR4Gzm8gLEfM zartrl4JNoMaU^drO1Huk*9aVcTW6HE;7G-BJN7B}}FlKO^?(sek_;8?K?9&wbz(=Rxd;i9kq zn)||jgI{obr^de*9#px-!t9~^zxJn0Y`D0)dPdAqCiM}uvZ%s*mujj z6`%a>m~m?&%>-5_B*o6I(ZbtAQ<-4tG+DB-mZa|RBltyITYK(GOl8U?rJ^!jK2 z@TL{Bc2=%*ArU-c!kKkkJ#qN);MB=rE=7AE1$!viOABuYYn_{wU8c-wUb&-k`Q}Yq zx4D+D32$+U3m20jWe&M;c0Je6>L~ita7Gm70h0uhWd+y5s$+9eezqx=BBTftH?jIZ ziJ1d8@Jr#3eq5CrwG`#bEFCUarn5@RXOii~%t2>1{zol2%Jtn9ELN~Y!Og5OSddd1 zvtYv5^x*HNZWC9oq|Uw+u@r^%z;x`ULbKHfE7{>ki|tEHv24t<4sKbweC3Lj%Kg~3 zd5ivrZ00I)CH;61+Uz_={_6by45?q6`_j40brUya)yGNksCg1Hr5CnNHNY;b*Y*0TMy?J zt`gVNj|ZXVMV6w`twU@e0t>t|!isjTmM+&aVe5a?TB7Ldub?kZ-X^SJksNatE5AA4 zID6ZgmD|(+I&NZI2;2T+2!j-@V|2KTg^woXDh4=0*W4~_KRBy(ziG1cdonT8? z3A56HZ7JC-_){7_BlChY#?G8Mar(5S6FQ<4J9|FAj)iw6ES4`g=M*I$8=YL(OWqOB z+1cVtO2^APJ2=JKB`wg%6wvccQ!pP~>r|~>MrTH5ZVNA8kM9=D2A@onKE`CqUAr)$ z5=Z?;qcjfI8{fu+%GEG$@zZIew0E*evSVW9otRL09xOOMkI9ttA2&*0-D#Afm{2MF zXp*kQWXhJ?jZy?=EsU5@$-Xm6UK~%~3X>Sm!;0gjMyU!DD($xz6QrM?W$)c&EV6IA z!(DYHzRZ={mw5=j%t^6dn7urCv{=g8pXoW4x!yv?`#JFe-^p`Kl+oQNJ6I8h9Fns)$O}8=fs3QlCq{nxZIB=D?%)W z3vpJv)}>BmaejQn8}mwQuK=w?x-dzr|5o4xrpp`r1Qa7j&r zmF3+crn7hdBHC&~7JAYKNR}9@suQzoLa=u5mYBu{Uf@k*)#rOn#27{~M`I7133*o3*`(Tex>?Dqa$!QK{NkSalRxTU{qY zEA|jNC8x0bJMeP#xi~dVmP92lVo5BNCFQXN7kE>Uh$P&y$I`MwmbizG{NdEOJ1@{} zS1ymyIqm0CpFg@#jL{X8Cs<*j{gM*tz9lMk3-t0d-Xh}jh(C*vVz#~3GTs5I&(r*wuWrM$_ z0Xy`wsy~@?YeF)4FiKjQGrOc&LZmD#(ky1MiBWH=S4$t_XQA|Ik#>x(F{CDEE6x@a9$-mKSu4zbQm!9vuJhf}>TPZ*xWz3Eu5?R6b%L<%qBq4u_>_J{110!TCAYZp z8%3^W%|GOiw3$7MODV`mf_0qvzlM73uMEUJY}}8QjZK&S_zKJ?xn?`Eyvq_T*$+nf|2jZ2oBG z|25xf>!Ck6+2U9t_vE}9${#I`3R^GEX`%G=u%1>&$ktoWA1A(#p10T>OKjSnZ5?j_ z^u%nAdCVVmx}z@^n4~%BCg~#>_}YR)beg1^RFhPQTF`wxOwtI{fL?`huf@qG>GM*P zv=fIco1~+t0eQS8=@Bd`8UGKX^cNWTTG8DkeT^k0yJ5rHg1^UMySn@%qx4LMNty~H zU#E*q(uS{%(ob%av=4`)(dd=#fq}2VE|hk7o##!v{K3P9kdXP4mSp)Dpj&wK9A}HdQqxe3ReKdtNKP$UJHnUt}G%3w82fsk=xVuUHjV`O5u-a(xdFE4#rlw%JEA96j|cA|l~f6dxHyYdGA^_F8T*PURr7h~Xv<=U33 zPh1tN30Aufw_VwAu=+q~fB6-{zNWpkmsRfZUuxOi5<3x%?FwGvy14DahMmu zFKlnxTDzq(;*K;|x+~jGioM-u#hy2w+8(Pm_yzx;&lM{r@irudvlwVlep}TS_N>h@ z-PV_L>M6nJVWAAiQrmfYzB$9OT<*ttS}K>tW@I{M+WK=&)6vhvPG&lm$pbjAT74Xx z<(Op~$T`jL01vw<%Q4?JNY5u{JHocXdj67Z=pMp(7EVsFv$NUIJ(P2r?jatw((YJc z8>Z(^+Z}6c!}a{^9LH4Kh%Wqa4|_PrF+(27c{S}NxsDk&Kj*YCM|#-4Tt`q2aGtg1 zI@Z}nai``j;9-mNknGWV{ttOb_82`sG~Y2_9?N+(*$?L<`^Rxk(>>P1avezacs+mE zfm=I4#~*Pb)f2nW6Fh9G6RDoWdG#(fgR@QMoEGFH*n%uTa;E6{+5*P{c`E1CXy+9= zCLeJ)Otxv9*Yr$<9v7lMUC-a+LL7r#_~{;&>_!|bIIqU>VmF?K8JyE}S9sV5Zp3k> zo}XIe2-2D{tsi5S-pAubjZv>D}(&}Nh#n6bX9 z#(-+|n{n@aP^n6?n%yb=QetOk^R$rN*g5i?4yW?kuwrD?T+V43HOIq#Eyhilr{}kp z;Q5)a=RYdJ%~{ZepYLI#yW!?6ti8pN$c z^_*8f@K^S9OtEd?oThudhkf1?HLs0&esM4GoAmtay-?fR%z0J!)ZWlt$vI8;W@KS+ zhgPSI=ubNPIA*foulZ@VE&7u~g9v3S=haXi4?3pVwsB4iWh z3h2Io^Q!KPW;iCYX@^q^qc5N?IUC1^s7pq0Bz$3%u10;*P46`7lcVuo{~2}3Fy8C0 zP?x+E#$vPI#sJI&lQiHDM(HIOj9ot7C?)=2kl0_0Qt>!kH`XK#M}6|WZw=B$bd3Ch z`s6;m)6R#C(mkkCjvr-|{@HGjF0h)$Nn#jln*AoJHw?xKEt25;?1@2F8PG(0EAGAS zRFa97js^HX-~|;8*>Tgv@kFB zu*}(bX?N-Q=xjWuQ9b|7Y`nBFJ-=cO!mQ%FT1tF42Vw5!oEB!4hmD^L-Iwb5CyC#q z=ljgVTY8zEzhNF;)4g5z%RKDod3a4P=e+uwZk&(2+Q&I9E|(+E=i@cKLeEcJfVk|} z^QRWzH9f$2=3a=8)4>j>@_l3rQKnzXIW4Gz9`?&ZWc49Ezj_hs3y1amJBu81Y}I;x z)MC5~HJn$ox?wTGyoz&Lm^B{OZ3&WbwVpq^1iG)$^Wsv+Eav)GvLQ2e_FDbv{vqV} zkuLnT9(GL#InFq*=D0EJ2->dWoE9bK!Eirv{HUIPGmI!5)APfYIVv*zylg*vJ@=v3 z;T~Cra@{b}AYJz!#zE1${`{*(X;zv^YMWw|YJM?DCFos$>VQ$2fS&cYhM1(4_zwJf z1$Gh`jP@pa*6&5RKJ`a~)bdxOv|&7o<(G`o?oVJ4dK}u2DAQ-WWt84SdA<(Ek7!R` zj_*J=j+;@Y4@BAif*VGoXQ5pGNI+wj+LSm({bAwzSEEhY_b=-EucY3xMCf}mx5@a^ z|J_I6|3~`>B)QNoj$wkk@+U?8lZrn}z$)$Z7^b@`CvEDVEcH*e`p2&R$x;6(jd*OL zpt>CDAEg-|!&G@iOOg7Ac5$0y^7xlEg+t-CP%LB#)h;bx+OQvPu_{6gTbapjQf+as4dGBHWa zkz>1ozfIcvdA*0_EXNoAMm>MUal2@S1=qAo-I*xnT#ud;}tLNWa;g~Jg zaUM2IitKFWN>re3=A5RZ4lTBoXfEBtd9}#zwF=dVTRErsy~V?>T!rv%)AMImA4yN9)|hK@V+{ERhdt=`3XRmU4^pyO`NX*%xmuzqXtiN8nB-?Y{d zmha`fs-s{XO2_*+r|G!Y!*;KOj{Eie7wb?=JfP=8>rot>;Jn&?dT%{+*K= zZGi3v_56Js(8ha+^J(5QEMB(v-o`13u)sH7RPfaB|8xnDh zl%MM0l!n962--`hIH!gAl!u*-AW={2`R!ZOK1*A)8GV)uu?@~Y&~Ds^HlrPVmiN43 zl>FEV=M|JKYbF~d`DcT4^*Yo$QO|q?b<9a9U;c*v$~EY>{0{BL{b)DlnM~3hXgdzW z$n9$%8>I!PXMT$M-|a3S6zUIiMio@U8nB=P8F+rLh3R z%$GQ($!~LBi{CEjeus0K?zcT`?JmbW+i5-j=UsT`8)}@%w!iC74vsp`W4|uQNoM|& zP9y6Xb7acza&OG{G0KTh%rRDeuY-#WciPztF~s40&S`OY57pi(-02q1v&IqddutUM zysezm{I+UCf5A^)D-45*Sg5P_+(c^@Z4u&|{SKqfx4zYm)lo?SJumqqOvVqx3B{z}kzq zKlL_~bUohw9*HLD3B38!(YkyWt;=0s8zh*C4M;blX4$viC_RVXqNRS!1w;#T-_ePs zM+|;JekbnD@6@_H`yo${n)YvZBkdn?PD}fT9ya4rr2S((|2%m46V9`WEATlTvj=(o z56)>iKJl1pX>Rhd-3J?7w1*o zr}v`H@df8J-T(5i5trkc{!-81bvfDaJnXA|NaNR> zC%-Fg-*Bhq?Q0MF!xf0aw|f4({b(hA$9XlVyY?ff?>VRG_|C)R0|@E|&a039?gNf- z@{b){^8v?N+rPO}yYxp7n{p6u?@ydp+x@Q{L~i}eInD1+9_G8!vB>s|p1#MDA@K2Moa|qVyc4y_332?rwJ4aR zF1+YvDRn5A5;(6u0vFYxwVTK}E#L$%YpFxz4SIgo&5r4`ag$ao8o3X(D0=l~M_x2z zX`*x|x`q2qLw7D-@}=k+7EsJzaj{9V;i$_uNxe|aKaLlC@@JTvi*Dgn6HU^$DBcfY zo^CN-^hYoxIrVa*^Z|nGD#nxzJ0@WBh)N7nx-nGQmzIgqf^KE8_P=eU9lr_&VX0oCFQnc_XU9J$T zpJB{Wn5e>7+Q_mT)*n(%4B!j1eEqRJp5~V|CHMuE53Niy|!WY93~Y zVxzqyUltfsY9fJ%uhPA_WkW4nddiT`VwV_P8(WvuEU_-CnID+nKCf5@w za~tObX1C9(n^iGOoK-(FJkvU}aYkfDV=xk|np!idX}o3ZiBUm+`H0$~mcfmKB7@w6 z+6UAP@bwR$=jz++YcCJ=cJ*v2t@YG)tA&-KI(LP;6`PFJO}8&iSt5@;cAdd5Y&b2l z6n~1dCS;;1bCwk0tf}KOQLzTK)1J3DCfkxYr@fRWFT3Iv$8wvj=g)wblR2+`jjL|O z7c+%(nvP^I`{-7DjZ^jfjN9-*OVjf&f|t`d&wRIIFx1SQn%ZX-M0yU+-*cW_EJm)wnVF^6-SUb~m=xf@B&<-8gP<2{H&9_KW_xn8#V9>gJE&!4^r zMZSactn%Z0JDYzmZi$m~nhuATJ#{a16zKW#`=Fzc^XhHA|2{NaT%6N%6ndHMe%w~K zo{!xR-9>u-+xs00S=%raoW=T+{ZF7yTf%v@1b+Ag0`A5+E#ML_%c;i=?ylz#6YtUU z#s?h>^SwG=RhS|O%w6xuVo#rN7#VxeQRt}VW$BsHE*E*d?2QK<1C%b=+s_!J!RVHK z_7aqtINru^%o+#EOq8QB95z&%Yf)(~Pc}(Up)8$@GW9f?%Bv@!tMvy|p3xnfjWYG* z_XcU?UX%1Pn#zkX(fP+QM(HSqWs0_;3BJ`N4MAD@BD!N|;P?o|=vJ%AE1f}8`3f8b z*fkbQQ-nRn+eRP7i{AM6PL*a>V@h$$WjqyBzd%*@A!KV0&S}|N=4E$2XIzkn^nlG1Nl`aiVzn=f#DcrIE=hf=w!c*up8pSzHcfiXUPa&H|>-qjq<5M?=^Qw-=pGNEV%Fi9i zwz2$#rf7_p6+Yvb&Ds{HrrE~nPY!KCgJ3-8)raWe7JMWpa86S+-pevu5u=HEeqSqM zG>P+Sj8Z>9C3-UFG#!(?Eb@V4o}-qJx15=x_wn%uj>4$p^#tioRF(&#U+kGH@$#Zy z?A?E1aU1%>&fw)f*ux}c9xzF@s4(}&OWug_)=4|@f}=IO7L{hh1T2WdcWFh4oNB#p!IPNPxU*o=L5zpun#3|hrmRACN^ z!V@=E-*P`H%n`n{l9JT4K=4G={X+B602mun)4A0V?{LB)V<%TyDi3fGxCx2~iV2h* zUTKP)oIsFR&2IEN`mi_sj$s{^o3=7*z|ogY2snDOivx~8+=-_Hj$zopn*9=RxLC=k zPUlvQa!gJW8YmC~?BU8@9_1JxcXh^S$NU8B6wG>$ag2`Rw~WCv_52ug`*fs><&6cm zVXUL~l49C{l`LV)52Fh1xR6M+2 zFx=oy4W@|fnfD#Ti<Iq!+e!>>$NuU6(53BmyO%rNIDRCcHG*IfNL ztoaZhhiRNsUm9Vmm%aKSN|Nb%e&|Pz6>^aCs*Y11IcD1`IH&0ddRfWG&@n^LU-dEi z;AiUjq)#w-GK=%7?#n+xr_OB7X}V{5*;k+7V>yTOtl}Sz^|ra(sd<~@Wv~4MQJAOa zhy4>{Ec5mJ1OJ5D1)OKrPoZ`pcWP=Ec-f&(9jk4N^t|aabcrt3^O4U`z%A**FZQyg z&rrZE<-D3=|L2amwh-sEFqeASU7w>~9Ok^*ao^)#$oXZQ)BJ|L?5cmEn{BzCPxu1K zUZLmD|H83SUdeg2%K7sb(7lRtn(mcew(Lu!eYKuH{iS0Ci`{{_f@}0A`?nzj)^_37 zc-b{=$bfa6*DCw%@VlOKTEOePY-KwtNE`J0JK*JwoL6-${u&L2O`OwoZ1l3HzjiEQ z!NRn{=<`c3mFNt*UlyCB^*GM_9c!{Nm0&2Q5tM4#KdOqhg z-P^sa;(O@0K+nHO{0==o^al**?9}u3{DAaa$a%E}T=pZrTNiOo3-dxRJNzSF_>1-Y zuRr3+zeLYh{u|?ryY&3u|BZA;Ij_DE3w}bFG0tgWM!oErpYT1a()0a)hVI>ZzV2tF z^HM!;{RI#Ho-X{QURL=FUXsf=PhSZ;``{PEWiRKnxLoFC<9|i^FaJ%xJ3IZWqn~Y` z{-pa15_<*b)zSK!&Y+&XpL1FOS9n>%S;y=ng{da_06(YPkZVUfXV?yMO7nied+i<0 zMYbz-G|Lj5VcQ`+zfW{7k`HrU&GtkIs;fDtsXpvwYb56iTaBK7Pjb#w#&d*!U?3;5 z$t0cag=Hrg%qbXdl1`xNIs)y}CbUVHpz8W1+N8VxWRx<|*IS48eE39k&tjU;CbUl_ zOc^}58q<3*qz8N>*9e)XJRQgfzT+*Tz&su-=Rrp%=|~hPw4qu zT+RiydOdG;Jaw-eWvZJq} zaXRZb=G>!kT7}UZi_;|Cib)#-@U}mTM(UEuuvLUf{(Fz1v5H3OBmXu?6ESh)^glZ{ zQv2J{Lxs|O0wxB3`kg`AfkvtUZ#+YZUW^j`nbAfm^o>FK$5klNi_mL@;oDn$m>Ad} z-BHh>fy#$&tvjmc(5TMlE~7f9X;jC8jTP1H0+mhS({E09o5rMJQ$J2fMVCHf-C>`~mxO|A!1M6{*+*p3a4$@mcA45Uq-2tl%b$P^(u8JEBZeixN@qS zVgA29v=!w$I(Hu1vb1QUOPkuGUK3^Qz_Dapm<$r8?vFb(Ni>)uzybySy{rS4*E1nmhuYWH5TwP=JGqF=A zo@{wMaMJo{?Zf2{HPi=BwA^3GsvItRa`T;$J0iE$+*)@FbKRTfO=&z9ITk)zah>Hz z6N}#9$TzqTwH&Brb-jxUi)&z5pfMKM<+@n7uzqKFr*&uJj>r!8j^+!hF7RDYzrAuR z#tPq+Gb-vggf~RiR;_ASE`*JCs1+CdeAA_H6c)%FdQyD$*xDyzhvkWnb9G`1Y$7EQ6cH2?WV$B9P7*KHH>Dm zduJvSY-X~1XC}LM=3)ZD1rQ0y1e=-WnPW><0NG(Pi+Z)CfsG)G zAe$hEAeVs5vLTNFZh|5LQxK3&U?s>TuoDy!6cdOcfJBf;V2l!)2$BiX2`mH|1la^` z0x1SaAV?>$5g4lhCW2f78e=pU5)=_gwEzP_CP5*Ai=c==H~~mFf%$soL=sH|Nd$I+ zd;&K?LIc1=kOI)2XT`Pv-V}?T%FZwdU zmDPsycS(|6?=449LZ z@wyaO1G3MhnxACtZxwVCP0ab1g0&}$|KQ!1D2J}JUfFoC{XiW%e6b-bqvGhe{>%BJPD%PPbEkY#Dh;uDKv z3xf+>^V{Y&%&DFonpHkin9&rhonAT3Kh-j&Wzva>u?fNPu5oQ+8b(*248P_YD6;C; zvkLOVsn*m$N;@nYG|N@8Pi{@BNeU#jn;MMOtaYha*xx5z<+=$yF5VB$^|%x_#PzDi z&OWMdR1PmjEBRy>{!uTxp%|^?$2hOHlG96^(`}D)PAQlL;W01UT!IGj6MFvL66Z48 zlX||Qn{$c$6zA0j^6TBuKt9#MDHG>=V^crd)11@7JB9xK?g;N09e>1w;2Lx^+vagD zu{G-Xk349nKg)Twb9cGdImPxI=d>W7#hAF)x!m@=o*z)^TrR)Bc^28}%wbQII;YuQ zs&&ivdXI3BjMc(30P4}B#w%>=#|Dxy568~2{zpbxx7JVVLT^0VO z_wi9*=ZxqV7%sUa9bKLnI=LD{CdFwO2Epp<5sT2}xe%*n(53oW9y&%aY$D*Oma*Fc zhD>h9aLFKaw7i7Ql^K{H|Lz>@y6`=AR+w#)_Tb2Q!6@B_O*BCc0B=1DG1$YAo+GH-5^vC+@371$oqmaTVn98N%n)OO%X2<%b167V|bz-6xl- zJ(;M}PEcyfRP}LEttaJnSoYhWUeR%ee-EjrfXa6XO+#wU(WfzwK8<;uKaE}eu^LOs zDA9EC9ZSj3G>is^4|$#J%o#&(_R1;KI`+nUg_p2bkC&{RA1P`sXm&K_x95tvHTHnL zIiuAk+A6G~wca9H+~!DHRjN-h-Qr8GOKL#dz-_EctVj?ORJ$z?O=!AdJ(9oaUG28h zAJ;QE^hq z$@DyEM(-2)9gxRq3HVo%)}8vgk`xui=pFH`&B-b3?8lpi>!?2rIqzz!5KKqb<`l8E zaiT>mV`byTvS=T4eBq?EdXdlvJzWqpNi0%CxoxRXnn$V9bfh+n70S|+JKWuxU?;60 zE)WMg#(JFdU(^I=S%>!|^qBQQ9~?rF{o|pjINEV8(X~z}ElEr0AaX(UDC%%pV(V~$ z)ZxyATho%JWTGHCo@*laWYwM9&B z#l&T`t3o*qMxB04MvV(I@zBYvd7}6b>I}cG%b6w?vrX%B7K;N}^<;5TiZjK(L~xo3 z*r_R^lZDsiT&sG`W7hRKL*Tz{Dz;z@tT_co22( zbW5*{HPk;He%ktUx&qZN;~K3wx~_(AJ~VtxII@B`Kd z-0Z7OIa$%xx|+JsP3f`8n0_+Rm{g)kJKCq9I3x1e09@d|G^Xc zT$fc>)x~O}tuSceyCiV2?;FjUwvxJ9AhBl9K>xBt0KV#U1FHN%crAYx{ zWd~=7_h47bv!im~h`O4_2Y%rfylR z#i8$@`rc`GACEY#3&9VMlF0A&|Moi9I-y@SK{}6N^na-$6VXk@TdFq#nTPyw+j;(I zYJbybN?i1#^c4T5uWURWza3HvQs8#+6#S=8jjAOx~D2o_SZd8|5)A0=11BeZhR>6P#sJf`|4XyL>{QR-*h8l?P+N!I|t6LA(paxQZMd)(NWsQ5>mo~*>sDsp8Y*B_Y+P2k4>NhuU zs@qtzp?qD_>Z;Yg)y?Q|X$m(jZCc#8s9{0FyvRKFJnP)x?CL%<12bb4?qI{zhRF>R zg$ecJ!{e>v8plS)y2mQDkTI>Jn@3fR@{MZtSNYpVu)qO`xo2e$ zcaP>W(NojSTGCh?C~9}tyTUHAWZddFkr&Ic*lV-O8Cxo@?R!sl^WK}$9TU@9Y{~=} zZ8ft?X~e1R&$Dmy_NUeZaUMEZ-r<~9;d$H3o<9$*+0%M{a6j;W*Yo%HL*w~f&a1k6 z_IFm;-s7C6`&~>U>kl38>-oe1;9KiT!*FYB!caD|YIyfxPN(fVy^on8bQFEhd3A2?n;|@kKX6Xd_B|%Vgz;GX zsORq{{@;4Oa2X!OpE$4TzJ8f=64^r3I$?h1XSGm%@-lI`(-%$tDp9(wH@2!oN6bU$ zgc*UO8FN<`p%dmG=!CiGWus)l)|NM5IYtk3#=JP+C{5pKl3LLLQ<;O=ELgwHu-2-Z z2U{>>t<^}ZUw#$KF_vNO>bIEXaw$4uQudgnV_0idhUFNKU@3+l$LrXiV5x|$EkDCt zw(U5KSdt-x1fihM-XBh(Es|ao*AXMk6o!cFS-vZ2grk7U$(X%R{Uf0=4p)Nuhi!Bv zjVq+S2yjaCBxcVIq40^>^VC22q4n$mSJKh$RKFV=b5o@Yf2iQcAFAHrPrCXC^*lDl zo%F29+@jDYjYUbl6Hm_Qp7gVky}r?Xnzg)FxS2X&mWvpZeWqaQ(2%_?JC<$9##bt< zAv2iSl2Mrq&6X;Q&(dHHnniPcx<9=sEtJ-lT9;bEUU*+F?Gs37 zm+GVnNtEivuxJ$!Y|#X<96loXl-8-YZ4rG*rOlbOH;3jUa;{ zlOUTQm%u^bB5)HF5nx3)Evx_}v;b)AQ>GD5nZ`L~8r_s>OjD+jOqs?nWkH|?Ed(@Z zDa%p9bOH-OCSYt#d(dbwQ>JlD*+n2)05pUtn+Q?~(g-pL>;(A)G>$3L=%t+K0>}hr zf(!y0$CPOZ6BaH3(PF{`KY)fXVcimtLXb{iC7{tu*tG;u=bh{#ppLtah)O{)Mgr=} z!x9!i8i9o%gCLtAmmrUzfS?c%mE9x?AwU9wfj}lmBQO)#2r>z>2mav>VT4jRbX=*5J5K zzK(t7MfU7h#u2&8HV)Vr!%N-!OYK#mKdu$RL6+Mjjf&E1X`mjGz9N1?8X56D=gdd_ z7sK+fwCh6E*G&5`n0WUp?UR6^cmQqhV5Y4V%titix-Z}heFacR+ZmW?YXLKDePE`U zR+xi8CXY`ng)jDKlhiwenH11&M2{urI$(g0=60Debqyow1eorI;s0~fiMa00le?7Q zI!~!mD9lScDK|?75yOtoHzZHgY%52qTm(e~)({|zAeSJ$5?~=HB9LMLBSA5NSPL)_ zq!5@1ENuWAK@Nd~z(tVlLW=ST5<&nIff%5i%%QZ>d@M6fr84Iebe?>r#J%$zDuu#y zFE-{)Y4aeny9q%Q5oGyEB|$EMNXiol3R+V683*M3@jWTCf;=%-qzMCME z;+t-P_YxPt8UiFV0rE%%?fYP+Ega0W$%C2pYA~}Ue~~6mNT^U^mFhw>E3X!P>rV7& zB~+jVhMooGR6+GvLIg=n651iQ=#IxX_N28d)B`joT+6*N_%`WJ{bPqg5ISmNI zO!<-%TOpXxW>>TsD4u4DqMMSM8v~?K6xrQ>m3nnE+YkrSe(mAQLNl?$kpl71tfbgH5H~A z5F`>92xNjZf((Le0ylw+^3Gkmz5w@$B9lNM6QmMk6WANpv--cmRM%^NlP0Z^P%pr2 z*a~gNlo3vIGJ%VL$_TR)6%(_7xl6M88q1h=B&&BOon|1}0O&cxhzAapci>`K?fZ7) z4j}+m`L;AV3sYc_n-b-#ksy_TrN1NXUzF6c9$BG=kV<#P6qh%tlsE3!dciONU3#jg z+*){YG%OSh=!w^I%mpQ85qI5$3B*bsTImsBwUh0A$GR-I{dRf=GRo%(3F-rs8AN3u zw-TROH$eitqmTf|1hghorj?W^DF9dn$yz4c%aZbOXHczJ&jy~Bh9t;nCRw`M^9ZHsRhmy72p=2?4C|S)NN|tknlJ$xMo#+Cs zM3wm|W<4!=ZTxP;@qgXX(Cu1(KZ~4}dMC7nTrBXe!)~OxkyS@o=mtj_ z3ptFL8O>K#U0HuHd@ypreZaTB^$PbD&Fp%Iv6zf@+nB4sUev8>XY-EQ3o0(CJHLH< z-S&#@;`aJ&;cbzvbz3U7R7L75n>V{RH?x4#=t-|wEv^o%YG3JF8Cl_8!O~yL>sMH} zpkjfzz&AfU&pNMhZe*@|ZpECc*}mDWvub7qX0@|ZBV47K?kUZat0p&3YMt0Vp>9IO z1aX3IJe&5Vv3ElKh(;DYlv8Z28t5As9$+01=wH##bzYmVfxSGUXMc9+E7-5b%Ghb< z_UyXsitMVaV5Tdh&Dy~3xv8XZS^%>{>XIvx#pL>q*&%hN3R9KQXKXdp80r%16T%7B zghnYM(XeWjVtYIMiSvrv&`qZhduLgDLDg>3tIZa1GDf?stefgp)X@ z`8AcY+BInL%6dL)En3sboL8Fb*R6Fg&RvOEWTfJZD3Go3B!Og$kjg5LB;~W(IS!*danssuik(Q+ysMR83y<{Ux>Vzy zHbp_c4zc~fgQZT_Of5F9vQC|6Hm*~#L7LwUYDJ+3Fi9ZUs^C^(n-FI1>oYT0uqMT5 zP~%kfnwUE6zg>9^HP;nNs400x##;@EqYjfpH7TDp*9+<^7z&ri8MxIxsCQnflkN+)R z*<7m{uklbKqDoD9`uFTS*nt(~alYspHs53{=R@@m``|fT|#q293 zs{W0%td!WV4o%M%`dZ`~5j&e=xms4xs^C^3!s^#LVS@4g%)~-jm{~D%R$%nxr4uMI z%Ci?c>*RV^Sd{FhBt=mYt9woyDHn7;C*xcO203sJ_IZz|xHBrX4!PLb!Va(Wp)w?s zSJs$bn8n_^q|_LdpGlN%-er`AZ8A!4UI|05@4{3!wn(YL(H+N==#!g{zPV41VM!?Z z=Wm`5N`Br*wl6AUVc-XR3T2u2Y22}Ti&AxH}X3JK05m`$*p zAc3Nj_00+HfiAjl%i{o3Dyv-C0Ivb z2?Dwi3?>*)u#jLCfe}$idd+T0LQH}b9d`6;OF>jlj*HD}RtmX@U;x2*f<*+06o(vw zz626!Odv=kFem{KmLDLDFo99f&?=Na)JOi zL4Shj1ak>C5F}g1%7V#xJYR{Q&S4Pn*RrfW9L6ND`cOqk4Am{ISlYg%Zb@KCI}1#6 z^|HF=G|xWQMrxi}#R8kNiqSinn`#bCwoY!G6q)3n)I2dV(an76xF8g;1{(blzuVtD zvTCGtWFy;LVC-dW!`7G;1H=LK{lopm{`LLBte)uFo)taCp7lM#J*+(%%OYiNcJ_Wl zFKe(!EUI^h-Bx#_E8=py(5PFAKG7vNmE>71IgR#+-ED8quFCdhw`SF_D{m_4Wo<}{ zq`A|YQ)#AZV@f2&O?wgb>K()+)p{u`S*1oXBD%$96dsYfBV%twL9{qYD|x6u39b?r zHL|=)G!QKf=+B|?AFNG6rv^daR5Ri$_u{g!V>#Btq~xnh~2vFOgJ2ILcz5YT)vvxNYY#+c>n z-274*HKtHBhD9^L6bDTQ!?Jb|_h4mK{H!d+U*}m(3e|Z+nL^QYEpw8KvX>y)51ZItS(KjiboQ{6Jj>M?Gi_mA-g-TbK zK&!KRR9~(b9=E)7_T|lG{h|pJW0CHUnV^`UAO@g;MJ)B}h$MEDRt zTKs%xfEU95;)3hgSJ>!Mxx6c5TcvT~cF0*!)VQ7O8)wOk-~ z0=d;rVo?rWxTUo(ySnrYnEOryP8hV0imL}~2TOk=+otI(h9LeWY>Wi)t~ z8uK77QwE0Bw~vN#%`_(45r)buBgSf;^on=|oo)7<$G z%|dPqkcN6Y0#HBbQjmqViy!q+W-mmvmsHs$5Dsl!fwDCqIn|l-zpdX%tYVK>q{JMs_o9+_ss=qUQr}fUpJ0f?u?`Xcg>h|W_thY7Z z8o~5G-!0*rtv5H;Me5vj&9$vJwI8oLUU58pqxDAj4Hehd9jiR*KH7Yp8><4`tnJ#m zYb&m;yQcDL_tlZB+*d_v{MDAjjfWzK{8zRgtUFk7P&`#aV zZgp*Gj#Nc_k=9BdI&+#f*0Rk{yU$ChU0#XZCM}_sB_~+jnZ$g#9kct|<}}Q%W?u|X z^4Ke<`lnbXw@j>=7*P7xl{tRn8=3pCH>Yq^2CVP@Zd1l(6+&K zgDVD$gX;%{2U!QX2U0!K+MoH)W@S2E-!X8(*;*^VJka4-Ic`_jVu{b#%IyAn%mO@*zuq)tv)r3<(o>aF{L@VD!E1u$Q4O0 z6Kfe+;)wFD`0WeA|2T;-o0aYe`O-OyW8cQ>T!)p2W1NBu*tU zb2^FBNX!b7IGx1o3KFM~SU8QuAc@`?Bvz1EI+Mg1B$mx0aVCl7vq_v4ib4*|A$c~@ zqvn!0hs4qINE}My!ucc)BXR!%5{Hv`U?GVkNIbZR#E~R6E+)}W;@4jO5ps6Wx=<4_A`di^Pvsk=UEWk5`lEA@Q>iiG4`?ehrD`B>u3L z#2zI6x`MEFke)3yFm!erF}o1<_RGv61X1+M7XQ5s9UlB&LwqH;cqn z5--XoG0hT%e6gKm>TpWBB!@&ZiMw)1w2=7cJQA%WzL`(r3KHLSkhl_}sW`z&@+zVe z3rJi|qM?w)H6$8cBo>o6$W3Aii6e`mBzGg(Urb_m5(6b9dPp4KjYKbr6S|Wq<5nci z@{pKJ;w4@ZQ%KxZN@6OB(J~U#NR0I$F`dN6dXi`+v8fk{7JB}YntPLMCHjp%B-%*) zteixFLjFo9N0)#FpnU;~zbb|oxrCq_L3aWVftR3^pp2jgK~I8V1i3-zEFu^{5De1& zpQpHSI_ZqB9PWV-O(ofVNghPB{X7x}lbF+w#33XO>`&rQ5(f<+Q4X#_-X#-`O(7g- zBb=B)I5m@Seiq?^Y{G^4z-ZED2RSO8gb^>{6{Unn%LtG4AiSw3VQnwMy559$_948# zobUl3;fY~{FApdD%Lu~LBMJZRCwwmZvMe8x zR(4{?B*aP}34tV1NXSJJi6bGml*G9YiEt+%3Br{?VkN*3u1MjgK<$=dD3=7~=mE9b z($b6Cy`KJ_9@sr;%klqyX0@^$hxB>9{{QFyQ{wmTcXoGnW_DKEo%tR_!_t5d6etMjX3t1PQ}Xu^7EMQVj_MV{2;#mh3w z1Iq`NC6~#|a+iiEHc5)j`b<989$J8@>cIS=d8v7Uc>@=uE+Df#w(2u?b38pOG;3&P zW@cdK&ySHg6JrxC6LV)q&a|A_Ga)iToY2EZb24Xy z&KPRXvU24#^%OE##qMmv_x9OmY(KNv)G*RhDcpM zBM0OmPs$VU47gKnpL@WSbopHQreu@cly8hR%4DP*YY-cH>O=Knea0Db4%KDq0(C7JZK{q7!vJWuY>$ETs)-2Q(>-Pcy)$ z>oK^*W;FlkNLg68eI^N*bmgDmBH_MX=b-&>Vz2kl_NX@ANUuNKiAFP52!Uc1Jwie*4DE~UmG|ba6|b>e zow>4WPtWDKXlnNW*@)z}<+l!PNp7}m%5}y%<<888WH_^WaHW4m*Yf_}Up(VEPn4Q{ z&9XP|$+0heZof3%Xua^wN9dvK!{3yQ`RW0C#_?M>U#a*vR{}$;5 zU-|^z?xj!R?q2$=4E!7p?@3QV4?%>_dr1Rl_mUQlSEMo%sDsB9Ne_qjk^!z(BnjSC zB$~q@n#^E1lawJE;+4FH%!8=)#baEBEHWN4wLuOKY1$ag!IKGOgR%AjolFl@P6D?pz4d}yEr!>h1PPT(*)q-bZ=tP== zaV=>oRLA1dG+3ug=QM!R8^Lp%!1M5~EX{zTzckYW&XPgD7YsCmvs=LPp@t>R(SUQc z;00yiJRLY+4=yl(3ng$7l&7Q%O~kozrE85_T#mFQh$kf=TP4jw@}D!Hr(9vl-mf0&X4yZV?8FTSagiGF z1Cvhh#(MCk25^5PcykkYiwnHf4c_JfZ~xhfiD=r7fs;TF*P8)Q~|zR3BFPVzFG~w zW(KnsFjoVVi#YVen4@K+Y_*EQg8tl)2L;D6b{-_?Tu#{vF#9r$}E_=kF;T8}?AAn8xg@RUAk z;^!Z9K^Ss_fA)ZXk-@)u!M`z-cL#P*MoLOoR!A1?(qy=4N zpj!ue^q_12y%N}L1Y1ntm~wC|RFI|CO0ca890zrAsoe~oVFAa(hyeAV0b`+kf)#0J z+Q5lWzLz>`K_7JRrAc+*WG8r5J$N?M@}((_;M68?nhQJ!RteH{jO$D1V$@tZ4^tb` z4Dt*^KOzEY*;BZC(60dl+F+a(v*GYqI$sCQAulKND`EgIkidCHaJ~s#0F`}dVFkFT z61))l`|1T*3_X5n3Ctp-r4}$)1BPHhAYEhwFNW!WbV)6Ese_+?SsjGs@E0pxRu8Ud z09Q7Gt6*Rut%gm7w8jmt^?>VSFzf{*&ER^GW(A}T8gQc)>?{K}>A=l;aEk%lDuLUK z;T`n+vE2k=2e;5rehu4q(mV+LieQ#O+Ks6oDN2rB=vTxHUTy*R)PPr5iE90?w3P@~ z*-M10YfFS{9K%Aq{o1-=sr@=qq0pZcq0p@qq0qY&q0q?`f%+Oj*3v|m5Na4oQhEBql!@Is)|tPv5HXWxM+VWLZJgILZKfkLZLe=LZMeH zLZNdjLZOceJ01x?+;t+G8BBZ9!Q+XCx*zO+z-WHJe}DA8^szqn z(T?)}5>vfD+FAa&s1YUh!S3?53BOtNm4lD#!@{c*M1B^I@HSz3&qls#Ayc5j?I%p@ z{qWHg}D{3FmX7|nP}Gex2i6Z}RqU;%0XD_{fc z0A|gN4ggc`1A#Xw>&;+;ucO3KpGTM`pvi(eF=WKtBor9yLw5MM7OO7?>hWbq(Psh}+t%1Q+&5U9s& zfN^C}fC*etXet$4s(`Pw4N!`aHkK2qqYfXkv9eUCDix|r1#_ujDHUo;1#78bD+v56 zb)&s>Q*EihJ-rkz(8jvbEzVK_YD7{e^eK!`STI73#0X6oBXnPkb$}D72O0qA!x)>+ z2VH<0@BlL41q44q1T=saC{-%>CV25NwN4#InPH!u*nO27Yxiz&h^b5 zn3I|lm=ir;hVK#yw*hfn|6Ae8RBQ%`qXFq+drs1Uo4tGvdyK}-21>`x5}Sl%bQ8b#E(jOD<(dD=@pqGB zv)^7h{?hoyjxB=4s&-+0Cq!FO+yv2H6gNYxEs9$pI*Q^}h;>B~nza^ZQ8Wi>Ykg51 z1F=DU-VyZBs-&wucJ18 z>gw^2&|=*+)YNl3Xuo2&*3N@i?AF=^5Q|N%T?Db%)Y`=mi%qRv3bEMKTIfU%H?`Ig zq^-rK)_NcgH?5(M2Q6$1``tCXAK!N^HSPu2v)H)i`4EeZYhDPk z*tq5kAr>3gyaZygam_)9#l|&5#e2AM&Cui?Zd|hrakz2KQ12dYT=P;A)yBPlRO6bL zpK5clam_nUwYk{1<`Rwdxz1wl#l|%^l{9W~bFp#F7j;lki;Zh0wQ=T`+iG>tB)9Z7 zUpM~!GDbcm9*#%v9k^$RJb=ZHCQ@C8(|2|s%-){AZGhBz#9J&k%lmyd1#S#s-X)&A zA$5IbU(ep$b@^)tt{J*oygGSh>I%!AR4fyfcl&nvcLcYEw?sE3Hl{XYNGUuQ&aWF- zJG4ezV_7Y)@~sT42wfIg9wUp{)FqjVdoId_e8E6`Y0qN$Lf@jyf}Z)=3;O2t&mQy( zv&=K(^L*z9riadnP!N*jloZV)_Ds%A%KHX7h9-&=EoaITeB%RWgxd3Mq1ODEftE;f z%$x9ZxzgmPD_fVRsk|Y(Xt&s8tFIpU&m6-`z55W!H zzGk2tihyD_!30!h2^IpM`I}EOe%aOO1mCcvbmqPbSpPwK4f!~f%YC$576rUX<1Hq^fkXaZ!Q+)Sme2V8&` z(0B+EPzUIO1QQ^I2^D}nL8t?o0I7>m3Fx{BMxeU;5~3BWPCz$EFcElz4wttH=`v7; z#*+X{-H|pP&2=E2%<#UAq+9RaCa;z}Xif?x&92=h@2Ib%K4XvzP8FmMYCu(B;&!<$ zfN;~Kt&Bsc-3^lp^Qd;Z9OTqu3~y>1ZK-Zf5E{}1D{U*Nd)D~3v-G#?r^c&C7KXRb z$RyrgBa?XRjZETgIWmd2?8qeE&ZS9lQQ*y9nnu1R(f%Wo_$3*c#4pguB!0O@Ch?0m zGKpVGB`L1FB@$Rv5WE$@+Ba?XF8JWa;(#Rz0 zL?^cxleft$>(ov)YU|!@@;1+iP8Q;QW^`AJ^RA|xPwj)e}+Pj`@!b-kZKRcyIUN$YBdtIh7B=orCYr$Q_nD zA_pzxiZXT}!;ZhKbGQcfTlVKD9!KEDp=2f*N{Y#zgqZM=@9NYIfg4!=9S#@sJgBLv z?7lK`rRB=p6|pPiD+XE2<(R;tl+O0Q>si7QGd*Q>^6Jn-U*+tL>O^q99^R)$9hsI{chQ>nkB-ava$utjn1Eg~jkW-{>;&VgO zB-!L^8ff%2Mj9*)x%ybWT%UI)o%yxcP6&57qQCGK@}q!hf=~#E-8k z{CbJZ@;EshU$CLAoP|$N$ouYR$szf>d)mgP!oE~?Vk&E3t#8??Sl#-qS`+|9Um~=YLq#iGG%wsIO0j>sfSAEYo~^HM`*nv6k(jFfo zwSsU57YYg7o?1yL?8|p1Gkq4jPj5|y%Z{e+Hpa{7Smi%0u_HP3^eDNK;1STIRGI`9 z!W>RNY^8@kBAvRdOrRd9q)8I3+&H`)Iy_2-R0FEd?7}7wmerzJ5~Mb;{ zn>F2}vlm*VSWo1bVDdMsUCjNqO{YCoE72}|e-3IT@+eXGcyPJ!NpSiV7Sgyt)y9%q zsjv^#IdM`e@z&uxm9`QNgQ>`LHuO%lgQcIQ zPBk+v8mM*FoDdtRQF2$cIoY#+s5h}!x3{@?^Y9a>y=)xwyiZ1T(VvJqoyQ~45$=aY zH}g=Zr&~@S+g9qNRyOf{(Xd1#pzqM9v{ecc(mb*B} zGNg$bfmvR!w(0#OEYPszFGRXeo@pp&={;>`x<9GfrB%KTcb1op#r-^^*Gm?#=X_KFcACPl{j_-+O?6+^)EU7R#jQWqa&0gF#6p;Z9dTy_`f;zl%>ja;rA;11y zd)075RZ#`hn}~|SVlPn42DO{i;LPq+*opniq!BH1;c5B@mHd=W<|MV_k8FQ#fH6Z~D}!Zbu;- zD(QHi02(V zEKk%q#+sGf7A!gcqPdIbF1f@voR{!fpJqIz3uQujp~ebi$m!9bEuuoG>Z zW=<>TdU6Ss`?bwpUY4*>LDon1D86_c=eYhuezlaJm1=@}1gzn_qTq3ejCRbz6>#K4 zj(r^Gy8lCF=x#Nph-}!-qDy3((W7RlG%B95OcYxH4}74J zv*;-3%zCfhP;i~a0=*UW^^>XbJp3+K?$OWXVumTB#$okPCQSk;ahmBj{|jAudDUZS zcYM^mR5w)~N^9WRl=Ad0y_(fL;d;$sZKW(c0w{4>g;t7m*4n_bV;l7qb2|52ary3R zOT3J=sE5-L_^8<_MY8ieT%&mUB8^e=REl&aW$O|^iPIvS$>iTsk>Fj-bpDRc$mPQY za*tIHMrr7yW~LO#dQaI($nKTKY#A)Fyxz9&BIjf(d9*(oqN6oHK z0Dg4CDE=p3V&l|Yl|uO`;|BZy(G3SybCwjU??Jx8{*N#pOCn%|+>TtEqs~1W@9%ahBW)>Fq{+1^ zotN)nksV|0Q_ohjDO6C+R;geu&&4&0N{@`6)FZ?53crpwo_zO@%vI+3P2n8N+0I$| zu!Ndm5A8ag=Dvq0mI4LDe1ZJEEq+C>`6c;!yPE#u6@)Z7e4G4Ja^gnL-d6v&Uh|h@ z6kvg(V%F30i8g~~1_fjIHU(k`_v$r&xWJ%ElG8VHtwD33Q_?iOPfpD4q*VPxIG$fsw+vkD(i;Rkt;lCbM04$z!!9VFl~HORm$})s^aWA*EJbsV}TdcZAmpjv8urMY|y~$wEm^ov>D**8ze?D3%oQSK%;ZAMQ@RuLhZ- ztC}eBBYW(A`JDJd z!ER3fFJOUSx26g8fE(baIXO9ANY`VJQyril^}kX`bNb@{g{rg2{qnW(uADzNm`!Jc zSs~l~TKF~dYuQ($uX$~pNoD~_)2$AxX0X+?T&VPy8FJI_;SaW`=9N4*8l9_GwEl7 z&j`| z@PpA0o;=B}IlHxKSl?+@-5_IKYDzR7%3 zf(_i?XkDIpqVF-%8GksO={lZ$aPWT5efeX_W4>eJy&d<2DPUYIC8zRT$u7*-_1qb` zGj&Jc_MzKyx5jP_aDOnNn}=>1prEoLni}c5A$@&xpMS6Ux_^mu zR}GC5zKQ+etMbBHRn3HcCzSbTsG3x=JlH{%(`#jMZEZ!Cd!iVNB)E@-E? zpq=7^c8UwyDK2QIxS*Zlf_91v+9@t*r?{Y<;)3pl3)&Vg=vTN%qk_HGE4#-+kHQ7b z2^Ul)Tu_d1K^?*c1qc^Z9$cj4!1vXXYJ;*u`V7hnX)!1(q`RQ3kj8?tLV60y3aP6o zE2NX4tdJstvO?+yg-z-Tsjw(1P+VcX@;Ix@GPp)?IROs<9hTqs${){A)eGon)EG^ZizdzbhR83Pz9)32J}EaiJS?@&|pGb zdL;xi6bhjILU|Xu5kCWz3Y@Ak!tl0Y7lWRRUF}qgwn3p2)~LOZ6lMeq--SK;qI@-` z@xCrky0D3^l#V>Z@gCx$UZX2UfaggDdSJDhI)EUdg2W0cHjhMIC^(*it7)T~nO~Bx z&^MM*H5*y>CE2O9QVVBSdnVdyNWFtU>O`sDDW&b0`DJ+yoAPz}jNph;Aiw{$lGH1K zd%vhWW5)Nr9>@k?@qIn>Lg)qYg$#ukA9^nHT;QuB1sC^ydEnX9vw>$V&jg+x`cm#G zX8Oe4cEP}jd`8Ul93Obd_u#+-vHMfU0>_5#&D1}MVN)8c-cO*hT z7e0zE8o0xEFhJ2olehY~kB7+3tm;sE|E>yzt!>jxsKNFd^2pMR#Cz`pZ}VfNXU3kMbk7R2Vs7xc^#&yNH`{s_5^4b8|* z4^5ApV>xGlqHV}iEN97+^S&W+I}(^UG$F-4n%Oef+U*ux!Nzp`V4dI5W$(9k)FjyP zSuGAR%wBs<4#aQxuFvrleXCFTxa3=%zTY3|+Rne_;WS`wg0GG{2fhP}0$c^C!Yp_U zC<@J`LQAQj=^ox~4*Uqj)r021pFmN7LjhHo503(>un>*~iURj9P$=9&xD-&gEQM!* zq5ua2MFD;Wib74iM7jhH2h>fM!0$j&fa3vGxD1{LRAD6?5EKRYAt(xPL7)oj;EA9p zc!!1fxQ*~Xpl;eUrc{6*0(Hw)_!v-yC|nH`1$Z1N3h*+Z3Rl6|Kv9670adsTjs_rL z!fxC?xEfG5-2h($s*r%Q0adsW-Ud`*Kb#H}1$Z4$g0X_*-;i*!m1W&^$fx6{scqLGUFT>-2D#Ux?c|etV z;eenh!1sVEybR|9s_-hj52!*G?gv!ib@(4pg>S$CfhxRJS1P~{0pCK`f800Wk3ik; zo23p3z5|B@>Xz@oBY`S>7mf*v0(=sv!uR2nKo#DHR{~Y|5!@1}!jFwyP$rDW{S=M~ z)J;E!e}bX_2L-Co4?hJ(0geh(;aBiiP!!;>Kox!qzXe4BZU|Iikh~7Wi_+hOe#KrM zcf{Y|gh1WzZ}38(3jc&Nf})@=5k7%a0(HwL-eIA=4o3ckE$vOP^)Cu>*!&kI82zh) z4BP*r0ONmEXn_xaq5zYBRcMFhe^G$3zbc#wYkyVffVsaS#D(@rF#A_GO@j4*QGofs zDolYFfT93r07U^-|Ee$(#{WeDJ^+e>wp4&a0NTQ@fBQ^015o#y3!eZ*0geDvVIlkh z6opc^01M#+K;06A7XVeb2yOsW;SyMA7X|nPP=9~gFM(G8b<<^V4p0=}BcLe2F@P$p zg=YX&2*WjiDy)ZZ09Dus7Xd{9J_1x>vmst8k+Xo}rfqN;pzgN~P61RQ2HyZh0WJcH zLa9H1t4jR=Tvg%^p#7>6JO6n5zEVT~eWm973Dtt1?uhmqOKtY|mzwF{Qfj7uOQ~i4 z?WLCaw{v5B`pH3Vcc`}bIxfM}+id+;pI^IBZ29^>o|*WX&MzEj5&6D6npgi{_`0Im z@cAZ|>5?3Gr!^Io7Mh{Jlrd;#?mJ|PD^+Ey6hrJ_mHS7`{|!-BE_{C7SbjLoZ}Vw< z(zX-a(7B^YaFF5=5_bzx=Cjn=*)KL3^_5GbotHLo6kDMv0~ z6Q`O>O?jf0X4QE%yEYbcu}%MUpPCIFQ~GfT&1KL|u~Om;P6}*H>o!j0oA)-<#uKK* zIALjU!^f!_I+URc_{WZ68H6Ue{{L}0I!+D)_uEo?Y zs1Md%oKfL&it@C9WaYyidcIkTS0w5Ze-wh3cW&t1*m+50{f^E;d8V#eH5Fyr+d7j9 zfWPxf{*<)q$Nx{amgZ4wBPpls6DHL-i->U9ky2KtcTCXo@ z%Fm5AsBNiC0#2Z|@d;ohr;D>wxQYe$Hrcn;Bs_vgn0r-Z$CZ&QI_F*!y}WbJo~^rg zm2?gdbhA`_kk8_3_DG|TdOBqu&BJq_$ax0mgu?l*VFSzUwe4ITr1P5ShTXgNT;WlB z3Nk7vOeEC&mExa8TiOIr;xuw@6?X9+XGoNjD&&G)N&u>)dML7^kD8TIv~qr=eH1tF z5NMhW{7$k>`|QTk=2FLxAIsUy*}}P-<$|udaS7iqawYy2poY&5AE|qes09J9@ zIHT7$-Po!CU~Ej-_5PGx;J8(LIXx15)Ew{K+b z$VIstpWS@g%v*VeXLFuavc8*TTE{ut&=$KVeNo<@-=gNNTQjfEKvpesHafc!p?J)N0DBVzc;q&qR5DBad@E-ZaZzREj+)o zIejJTR|s2Jtgf2WV^1{bFTG+*=M~Bc3SZo%T0)=Qe%dok$nMJ@@E?HAmGnv_5@~jAd4) zUr}?{==2+yeqGJoqticP`eiluj80#EuYRqOsp;r)cJ}>y^>gEUuGqL^>-sadC}&jp zZj{2Vg(>nGEh!DZ_r<@yKj}5$Dud=@3e9$FlR?u+Q}s_*7&Ozz8#LK388jFDUa$Gn zLcJzIv-IUF4Vs5<*K5vsQm^^W2YSs)nyLTekMx>r=NUAnf9N&$FQ&L`W0x5;y?@hd zF8mtJ`9Gr9Tu#&UfBB0+^Z4sFjr&GP^Hj*7IV)n&{N(mOeK$+bABzjmA22`B3!m~b zYl$CMvGmTiMhXEfmb3Y}_L^S(o9#v#!(-;R+Q+hv7mRkj0EN>o7NP`eg4ao)T>Shg zMUX^x;H~yKEb)S9>;2_h?RsOGu4|jnyKJ)Q@v^y}U0b7ZTz&(!iCk=xF)u9?UhDYT z(HC`Lp`O%AnP;YrlBJ;5Lr23)1(_rgWMRHwI97$W z5CvO$Be^xG7CxCms0l78x5vvxwl!KG}4tU zPa+qxY~9=SxoHc@1T#x8chRKiKECaLl+?TZo%)HosoDKqH-&HPNG21$#6Ud7ExU5p zckK)8<9=VSOOge0@>(BRA^WZwxH@%p;Oe2PCZlHQi*nd%TL}J>Czk z4Kz5+YkdRaeDm?(-XF@|9z&xrZd{o;D2%J}5NZKe5xv)q^Zu|*m%clAcRv$tw1#fXt{f6py%v9({a!24Zs5w>!5pwo~4j-x1p` zZo}M|Z&Peza)V_(MY9U$*AA>1SlzQKw=%aPc3Es3miqm_}!PsbST5MWiYUC`- zS-Huv$uvSbDLEVG(633KtP2Qnf;Pz!*i1?PQtR zrb3Ke-qei8*!_umJne>$nx9%G9Nxe)DP@dnT6&?^R=jfjjx0Qd|5VLYDb)(fL=?hA zoq+Xf&XQ7b{Zn2lu7CP7^>Er3A2mCrP*B~X@UWx!p9=MJHCN@*;TKz^ra@C-y^0>V zvfbmFSog89WFl#*uABOydIW98N6kSghnXK%H;PI*xEkuI8t1cLoHo}6p5NG!EY)ia zaou%eznTlLjq@5Ro+#W-lmx6-ady&+&d>w{1u=fZtJlxnHQW~m)Wd0CeAMjJsv!?2 z&!dz|UtCzM*2r+dzdUW8jXbxpBU!428e)+L%I(Hqsk!iqIl8DIqL3j<0@kZIH?of= z7#vEq=5!8M>(}bRv?o4lW@@#NgOle_%F|ctH>b_Bk>}PrlBc*{zg2TlZiy$TAfoU* zQ4+9j<1D!)xE?CMB}V9>{+F5!9fOaWtx~~So{MV~l`gsdi|*GOe|OqkWuD&@&as^B zoTYlGr~~c6jdr9^!DxpCKXOjPgV20^{DCb7&E$J2!0>W|CPYuLza{8@5YyCbKwvcsv?N_JVUsfyhfaM!RMZ)z*pv>RnJlQLr+%GTa; zo04#S1kys&ce&hI{5{ae@Q0ng8{| z3D|RsHDPdk8)pXGRqU~!k2SLg zs6edZ4XVeXjx(y*TVuwVsURM;r6TR)P?6|t=6OTs(!3Bj8h+Eo*4|9zng0e|qCXv> zi&rsDZ#vq&S7IM#byaK!Wj67JLQRwgR}JD636u&aP*P^GI|FXFVqo8YmPyan=5$r! zYPOS7HERU+;gMFCxR$-^r=7l%lxy_L`xw%Hn!{6!RXS1YVvK zx6&F)jPYao)kgn9H)Z+#P1ec_OAErpTPY4a>LhMa&UO(Uym)X#Wwt40F5#Z@O9Wwi zsleCO%gO~da2uU=gtc$PuKXZid(8K=i=ZeFp>EA4T>c5Q3@M1qVA;Y~pE#McO z7Vv^j3;6t@1=o~F$fU^u$)+sq%A!_TIFtp&Sj8?P`To&rfb!noS-6D0v! zpbXFfaFnVQ=^c@d(oXz4#~~#uz9?nIp`?uXrj&>{pR_=vPg>a0d{M6~8k9w& zvS`90o{-_Nh;|jSd?6|ejk3@x3!So%l!ZxIR4NN-3DeCv;ulNeEVuWbUo%KCYERC(vARzPqgGrmwsCu`+E}~v|lWW zTK2;qxBGk7*UJqeoBY%E^Ynt26tSXg=-Zw>%ztOQjWqCmPggq0x?H}6{p9D39=v3G z#6jkBId*biFY(mY00o4}Z0Xw>-f7;M-4P`ho_*UB+dH=RZ|mCT-!`~4y*0R1*xJ1% zOfEgMo1>dOoBK8;Hg#<3@9gUIcMfh$Zwzh}Hg<0aZ!mAju8*$wtnZ5?A|2%Hvn%Wm z53WnEBi*lc-D|^Z&1OSD48gX!J7A zWqr#N%R83$FY8+7Up9DY`qB;x%9L6bST=NNhQcz5m-bxZzod_epSfGD(Z#~zt_uSf z4sjJ&aZ%4gKbtsHvR~SLf&YTOx#78ka}smRbJFK`oS&T?oK0G>0U^-k_xQVK`DgXb z49^^#k(gngkv^~EyzIHbbNi=9rwh}&&hebnJVq zQ}nR!&K&P!hdvUkM1fU*q@N}Bvvm`t8CqXWmL1$LX^H&@B7|0ALQv<_nw(0-@4%ig2~cbKd8AzJR9Fb7JLg?-2UwXbU2|BSE}$Q zQ@X9F&8Z1)7n<0SAGuA~4f7Y07dNrdvIqMd6dsiB@wet`C%K`&~gMu_}?;%**F za@vDz&tEhF@-XqnUo?y2HdK)syrhbCsAA)YD$1y$VUTuxjN14>Rj61lISl7!irOYW zua>^{?ah>GE}mCMNlpW<(8)^1#z~Yqd?_o@V~ljHqVh?#s32i@yP2dWw&bsx7M&}+ zNGR|9(_b}XMbXgP@ORBjjod_sQw!8{tzx-&dJl4~rn|Y4g+JD`*Nc=(WuYX+ope0w z10QQ9n(#|!8!PROg_K)kvF`CE}cSNBu%QTFAU zeIt{&irB~`w(t#2>*Q*9x~{Ir+3fu^h=1~Thl3J_yG#Q~PWI3znsYa~sRUYO0KS@@ z)r=Y%>n+GSS~WJ%7rD^|xaoO`yLvC<-%T>VI=U#8ovWwC$hZ#QS%q{Dio=nhHTLNz znh9~IhSqgtEJ*+8JBMdrpd>3_Yv>?HiOM&_{}+WCU7qs)NrAfZfxM+J_uYZ_Qt$cR z9r#Y_JAv<*zn%M5?whf1%HPbtlYA%tcJl4~Tk>16H#6S|eM5dD|N2lalMQ9XY|m?v z*DSB)UX8sfznXs~`AYC*&r5?ZW?l@vD8AV9Lga;>-bk;dH}`z(dHMPL*OFgr_I+*O zxzuyvuXcQ8peNN6=o#wHbcecAU(P?1e8%_8z|*Ox1MKk6G!Ayjr*?Bi&m)mXdQKpA zaU{b!9?;aqlN7CZ=$Pf0@7@s0+>^U|=&sCNzN4g1+?6>LyHmb1e{kTo)NS&uq5Y9$ z++JQqtvGrM!UEW1)WlG}Y4T;CeoB5w(7vUKJ)4z16u z&qZQkIoz{0vUX^-Wp!@l00m8qEVnGjZ*nevaWa@%8dx&4*s>VE#+F671+fJw3YtjX zy62|m_RNXUXnSC`qJHd~8JH0{FGe0rhiHgBKQ%cuGo|P3{8QLVMa4x0c-%Gz!@EY6KDWjfDCwn zW}qcVXEBOVf(F23m$3{$@HV3nC!c1A6L@MJ~`OUCY4)L0Qm z>@g!kj~Nko%!pWHMuZwOBF0#;(GXWw0l_DU37F{F)qGTBn5sR)50Wq+Q2!3Tm)GH&xT@^DzysM&scvnRM zp{^7mKqp0*tKud^xGD<5Amu3n8bAw_0eZj)RIt6Q@r;E=*o_#Q0K60%n+e5iT96{p z`>_#k%0|2?8?`_gAOS`I?skprqk9_zy+6##)n#ncHQw25;+yhXa%OnXn{ujm#_RGE z8WMi{4f%0e9C}keET&m*b&b9EiSwkVMHYNjcP2Cc!aa+<`%sIM9%2K>+gi&#ZNb*W z*zPg?EoLUaCOg^8@0P#re6sSz%+qvFAd*uphkRxrS}nFM8wpEWLozlqo$J&?5r>+Bc3)D(fG$ zmwj-#U{p+P45eG2rx@x<9H;X-+KfmIVs80w={%#Ol1e$ohR*pTkxbL+z%%u z8G>}-lsd2%_KQd32-I=XK8V3^Qj$3_D#Vj6 zJ(ZHGwWjDzEYexOeWo?7Oykm(c%<+sV;`O59GzsN>uO~G-C6(JUiY^=n?<(dAo<~2 zxuyPR?4ECX8mEu6wddDjq&YlKYNnb0YROEf=pa-By}J*Hk80NSACDgQ91lJ;_+a|M zKC%K0-k-j2@R7_Tp-03=dLB-k2*R)?9Z9E-haa*$lzTAtp!{I|f#d_e2L|pRxUc(I z;@%+h+>^gMdAE;DY*Kdx?n)gE9346$AIYbZsUVBJth=^6Mf2v#y}rEz*U=RCr*5BT zAeN#ZLwZx(9igAY$WF^n-;M$LNffsAZAotqZDxnwEw8_LD3T3#tqZTEN0rrmE7L2Y zm-&~Qm-S!LeR1NVV8|29FHJ7>Ege{rS`uE|aiOrNZ$X-(SEMh9&h^hpogbdv5fJ=6 zvj%3SW)95o@wmY`cKA?TLv>_|WlHYs*x9+WVrR)`<(cIpw=AaEz|5+-J~cW8e*Tg? zes9VZa1BxPUi=uw8svt2eX`zHKj2I$#+mHkciSejrw)tD;%_AGzGi^#;AKln?qKsO zVUZ7$eKb1n$0(5rR_EF>04Dib17HMTajvZZDuHUi4AcNt0A}#oTEGD~fhNG^UlA9y zu-w#o0hn)UwLwA|0DC~K1Q-GMTGqn2Q(FbV4}jJJaJ%+|$%b{f0w8byggOAa2wM0S z(85?u>jAt#Ga!a>eodHG%K$xK0APHmH38)S%n-FzfElm=R-hKB1DrrT&c!fI6TaXaL-R2k;W8h(b55!@^gq1W0YOo}C%NwGmQDb{Bu#qP|cSe%&@TQielWoAOOTWVRwu*{^G zl$jJ`GLvFPW>O5uOtNB$W>T!iOp3jjNwEMkDYjoG#p=tX*n622OD~gR<7HB;yG)8* zmq{_`GAX89CdG)$q?m7+6vHi(VzOmYjI~T;rUgqVlVYJ|Qf#wKicywHF~>3~hFB)W z1dHw&UNyz+%A^=vnG{nila8K$wFW=}Oh7qM3DC8sA6#t(Pz}@ow%(-!^4c;3Z8mkR zRYt&jX#{*VJ>$-h8avIqas{oiJrEhb1^B|3Cn<-#b zM`xBswEH(iHwYWLXf(S!;*a!&!!(keSZ7|BUfV&V*ugdZtD_Xcs%w>JRrgB&%03#r zCiS`*lCSr(ckLR@V^NRU*?l5E^Oy8{Yc2h~4R#8DW6qAobJ^Pd_O{-x{&s^nmYZG1 z_;??APEnp&gLtwWk<`lu+E<7d;$4fjP>gwcZYEbb^ni=^sFRZL4s=oyf2kRHARGK; z`>qQSY_GVlqV9=T+>?^QOGKhl; zqCGqpCiRmFqs{G0auaYU*-X#?UGo|J@$bSEVtJl{!4uEeM$ zeR@=qMB|gi0}ByBTF5QcPk+5aYGc=oR7U7ox8jwX(F9PK~Sb;N&U zFqKXPQ$nh{E8J!7${y}N)OE;zXzYl(ovAg|unUD6TQmH^H)fMPU9S$6h9rE94zN7y@_w9+>g135Z8Qh<}sq4mY(vr+2 zVl-p>k5AkVUt(|YI?uI(S7)#4x-xu4$DV=9yJLx{FFLS$XqT|dyt99MYI|V&(6-FB z(6-dp>=p{uFhe>&-bdd*J*y(CETrukTPd&1uSn8>TzYwQng7zjCFYC!L*2o|(%_QB z;_eIk7nv9N7e?s~Bs5=~-!m^Vujhiq+~6F~`GbM1KSqvX^0Sh&e6x}>gEKtm4NlLV z6XU9{xv5=K!e@8TxLj)Tz@%ea~xKQqjLqu+{<|z(P~*Ry$BBtPreqKm*_gynxSZzQ9;0D;-?|E+tS#8u(R!s+?7I62|u)V>vozOw3 z26TRco~DDW7N8lB!UP-O$r4%sr)M2mUQYeKcbWw4iL*!rg6;gi_p*33HEgRBFi`uo z)&NFozg9gpU284i?O!9bmJJeW(`$v+Dk@d0h4O24MhR9b6=gsWJ==xW20+_EFach` znjn;?3H8whg5?oRd(wOo&Gc#5_3wL4Y}p6yHoWdp2o7%>UgVUO26csAu9Osd)lpXH zrAAqy*AQie-Yb+9dXG?6=naCe=xWncc2-9|@}^LYsLW<+&emo>N);s704LxEv|&OO zASMWg#CG=V2kzPI&+mKBHNm!m{?T-9?;k&KUn0hB)OLn_G{bvw-Ie!({W`g!V;;YIWdj%uXV8dV`p z_Zk{92F%nE9Cd&j(AlXw7+BK>-nwec?JCo^T54rCyZQs~Ql~_BHihh>nLFMxl_Xlc z01N%pyE1O3mMRovc&B)5r&geMS;ciBy93*>h0`N8MXUk!dmVB*gztTYh)(n~sbJn;C?W0}W#9?d;6@NnovE*+zB zKJlTR2O|$!9?U&J&KB>F9?LQ_d0Xo~LV-NGFxizm96Kx@3Xr$8o`cB)ncG9R$8JmA zD&G>gIkms%rsRzXh?I#B@d>cp-q>Etwc<4~GLFe#nY_|><-irGE0ULE>~CmyhIL+F zUCoxfqBFPnw{&&(ukQ#a*7U9PTo%1FdyzSqTN+y`FU>DWF7YiHSe#nSTp#MssS5^d(z^q7v8tT!n4yQ40lsjInIjB;x>gG3_d5GsL%O($z7hEqCsxMzt|{u)TII zv>dHf=GF9@2S8cT3gtg5RR65?m`&dY|FCpd;4QYifl_qjz?EdY(3X4B+k`TjD#weB zhQ6h_c^vK`XhG^IC{+6-xemwBw>npez`Rl=-ij+7-RmfszVM?g+S6{2^J%98{7tBy za(f&K4_qBWbsW}6`H(6G66pjLlt(S*t4JZ|z^MKC7ot5u^Yip`$ctM~&(oFFS<>c! zTBhyS$*ji~pnDJHA<>JuCN7aVF6&q{o09EwsJXFd47x`~X89iAstxq>T&sv0^=mB+tHs6r6;sxm(TQN*h>RF$eqprvmk zoi+J!yVcg}D1Oc(SQ|7xE)4|Cv!5-OK}43$+wB}Nmg9Ut@Ir{9TL|J^=OtYl07-Cifk?6!Zm zKd;kLX)Aa^*)#ucPsMpxH}PIZ7M}c`DDQhC`G)U}f!BSn=d!6+1FsIfoOwC)viNe( zOOcl>FXg@-cro^Z{6gya!1F_2%Y4o9T(&3r<Hz&_UXV5Mzb{_4P0LsyDd z=Jv$)1Y(w`yeq#mNj8*`ZN9AoTT)vBTZT4gHVlXG2do5>Br3QGD9e+SnR- zO<>i~%FN2pN^xZm8(1^O$7()vhuN94JW=-E%<+?;3#qReB9Ecsn4XqMi=`#k9BY=F zS=Z;fHWohK(h>^QM)>dCP>scsGY?efD+kI`<$>~;Ni^mSqCt75lgmcNQYVw#PxhRk z=^9}Wp+<_I?ZT(b8P$znEYg$L+(fNbS?HC8QCU*Q(Work%EGHG*xab@ z|6%V-p5V+aH_bhGy_ls0!NhO+o^S?Le zop;VFn=kIYv1DXqDk3A|#=X~*q8_Q7g`3#AO}Gia4&u;%;yPIt7?hw&32K!NeNn&pvy!1WORAE!g4;PGD@IV0znCCmB6e7^-9pF1kFm&rUa4_@L^V1 zr4pEwpjHV)C9qOJYB)_z3Tsn>P9@-@EWcg}1SP0bf(9jMQGzxl=u`r`67X^5@=9P* zf+{7bQvxf3P`Ig4VQos#sRVW<&?Q+h1|@)YD%BTisi?LRv?>AgQb{N&fiA7&Q-Ufb zFe^cW611=&MDIFFYF7eXj&VjMs8Is55?GZ0y1aBHXy#JTsRU56B@W896jUogof3#j z(4Yh@O3E>3%9+Kp3AL{4Pm(RQvJOZ^Y@oCxqGYaDJw)1*>$g(rO!?7cMt>@Y-oo3*+NBxpNNhcYGw)wW@t_jmAhWJ*; z*7Oz+onQ!T<~Bz+Nt==zT^ols_%`I|;DTj+e4S%mdaY+|c1>Unw4KYr)W!zAJO{!}Bfk<8B8n+j?Btd4YM{yyz9u70J1-xkGb&b8@r8vn{jZmpf<) z*E1`7S>Q76vgk}{X7WCN^8dbplw zx73}qyX-@fPs(+LyDVMtPDf|D!_$#%543abG}UcOwz^s$y6cPi@<;P}JLe`1F2j)C zr_WV}D=n4r3P(j+=OJqdDc;YEe1^l3@o#6(ZJ$pA|G&Sdjr!z_Z8i6(Y>Q6n++eo& zc98Xv06{0f&Zsz1(hxzlWhcobf@bk0`z(NLSe3| zPw$Z@$0l`!cr}jAkJ$H~IZPhg&(epWqL*wT*36E(1?fw7RL+jRm5MM$G-HZr#uSlk zq7<%Mlxd78L?7pvKhlS5@eHzv#axoHqw~ok7Bfq*%H)z&pUo*1U-V5>720#6+h#GH zv|MV&Jd@?1NeIt}I7~H1c@C4#B6f88$x2`!N4Okjq>3&#CYMSEO@uk>7!iK&V?>yD zE?kSkiYK2ekt)DMv_vpEDP`5Mg?Dfj>^``5A}OiD$kzPC1BF@YQZ`G~qW;uuRlrPD zz)V%ZOjW>4RlrPDz)V%ZOjQ`X^5IF-E9SGADm^z$RI4#jt;R&P8WYuOOjN5eQN;ym zilXiQDR)v3$={ME_4Z+!T1dtwt5jsoXiilm|3;p)Ouqhi6I;fa+v#GMw^B+>TdOf` zt;V#q8q?NlOk1nvZ#*_>MF`VYRyLcuvK*L}(p+(I!FV}lv1Xcg)}F3yh$i*wqi!e0TsmWA*DIZ$ zG7NRHnf)}lYjffr0yB!CI_`cJ^dQY0y@RoFhLKVbt@h& zX6$1sPm^{z^5mo|tY#gWuocjT?$u=3DSz*8bn`=PF4iH&3Q7p=Xa)AUg$kUd)dxj6 zfqh<;iaMz6%(W672H{3=gQ$Jz{5L!NBGTV9hts;+4d#a{?K?|RPiY&MaM7b~nLp2|O&c+yL!Hv*5l9<#`q zM}u^FBlw8@k>Q6U4`&{t**{JGVHX84CcnE6*_JhL*A_trY{6R734p{bQZ;ajOzA?Wyzb8#v zGj4Wf)Vqrg#iu(YhaA3tf=}-JsFN(1eI}jId1sKl0$nRlW~Q#Fo43$0F47z833mtV zKFL8A<%iniZK>9@ZKx&N9BWRH_mFhMkTqMMBS)k|<~S{z@no$lT;r+ctHr9UDQ`?0 zqVmW#zRUJ$-%noINFN0&^F<#8;ceWnWm``Fy%0O(9jx;z>rNfCh*NqgP^Us#G7LTvS^wvX+aQ%0>1Ih~jKuN6qPq^btgtGw1AS8ezv0f(c+LJ@4uZ%l-Copx4-mcoT%beqaIf}N%XWaMzL z^I!Dsx;6H2q4h7Nb#8Vnm0i-NK9o{1TOhy%M=QtH1xiJ7d|C4}dGGJ^dv`&lmEI^t zzpo-$#6Xi(i-9hy#z37_W1zsQG0OE*5Vf6jO1WEq~{gw5l6D0fy>b^+-LIQ(}}0OPy3&8Jjp!~eN2*vACN9px;wCoBkw94JO3#9ar!Z_ zC9-*VSbuk_59+_`z_D}qj{+KR7Wu*6*HB-qGUob(^<^eiy47NPNBoYUM{74 zshAP*UWS5&pEGp5=`B{$btj7$K3Bwa6f;sW(^Jea{b{u{rarAQOnX{oy147uv{Sh% z)0S4Fm?pH!FhyvUVS3Oi!<3p;hUqk`3{z=VnZfjlemgH`-Tg~L?exv7-Dy`b(_PG% zCH4`ZRIR?4sc;p=7>XHdG1FAcREE_&m($N)&^TiFxEe)FWieAz%$Vah$kP1&84W!J zDUHo+hJ}7)aP9p593L_&gHqvyJ;|%b3VM_-bTox7&AQrAL1*DP(wKQSO&;v{hi(U# zVQZSyrWcB%rOBzRT`v^L79Pto%JUZVPitfLZxDAY9M&o(2e>e66ZsoQg&s$TdK0J* z?c%B%$MtH}$H?V>I4bnXAOB!d+aCG_;8D|{g?z}3ZDRDZ%H)$K@ie|LRd2RWS@>{c zOQQe9d~(MzVM|w|dPTYdPk$Vg=vft*K%Vl$NrCOwqC{*CtW{(5v&Z65es$$l9Ze(s z$#P`z7ks09=7*E)@>Pa`y21bBhm$t&?s}ymVHx*UY6vvJm@ih7(xiVXg}n6F{N?i9 zKc2KlCVlx9`Q2aheS>rUYSL}|wbD28e}SX-&QDx8dY{Rs+41}H(GN!6cfMzTmwPAs zX7COB8^M(L`UpEmFTU!3CHQjiCHqU_i+>~7(Tc25*UL9O* zUp>4kvdXz?#2fRvy(253P~^ONWZB4)*pdV(>!#?)pnc)+0=r|u@RgA(GxKw9$?b84 z=OwSmlIa@PoB%EO4$b0bIWF^&zHXWpd8O%|OTyEV^2lcs4$ic6xjF+K@%EuMuFcWv zvqf9d&ABG2$+LW4@c5;uFz;ksmPw#HK9st#1e<-b|kKd$xLFZ_JgH8heu zVklCDk*?vq!*Xl5f2O=H+<)B2yh{b^q7NPr(ApyNn*W2v8dKnCTdptkk-ONm8iV@D%)Pl8kHAcjTJRk{%xdxLSId| z(3H?!re2DE*p=}zk=%5m|M~xaL?0bp|C>kj)%^e02XpJ#!JJ+!`HI{7fAilkl(V?1%PcdCCvOX)aG6;%i6v)|Em_LUCOtd!F6nTcfoss4uP zFe}K$L}uZNMKDzlZNz1w(m`0hUq8_Ke`$D~RXV(~vPwrvCMq3ZnMhvwU0nwT%wO0` zhe{S(IyMgSclP)33zL~}+ViphBk`lm`QZ7;ht3a2K8Stb{viK8W>lC>+20)= z_VL)`iN~UH_|e!S?nk^2OAqB@>1gzU@cn`NeD`|pkxu9CO5EkWi@z&%r~gjz&deRb zJM4FOPf7B}AL=_Ahi{AA7CRoh)pv_{OXiq(EORt?G(~QRE#u_v$Mx;<_d28r^0`{c zBG-MT@0^=opIGl*A6}QFZBxq{*XqEkxOd3Ic^oT!E27KOSLc>V%REcNOOlJTi!6&W zSLJ9|)I)QvB-wN$?awJDTPQKdJBOc>n$6EnUGBeJyxcy^dD+O!*v!nO(HTC?gu8Q^ z%jt3WrUs^jCwm4YQqE0Jh>rL5iG|tNaBrk=l*QNWuyfK-XS~DP5ovd}kF>?w+;ohE zZyjohHwT(rjTTLDcSKC;EaV*XV|_DiD}UT&uup~qWU(Tn3+n9JA(iKT|MV?CCCyUH zqN3r{;o+vpHdoJIR0wp!BJsIaO;hf360HY!mKDp4gBBo>uuRS8KY+I@vIbo5-w z-lY<{XhA|p!j&jG3eJeZ%iTQ-_<2I(@wE+n*%5z1dK?3pl6uWIMhX$>sputMuDBy72mP!{i&_RXt; z(%0CUnJ*-?UPw3?x?8$M7cyB$>1Avwdg%f}m^&y-38M#P!WQ2JgfJ#hma;W;A!$|g z0!eW?zAV3ZAtBDgm!-tP^)jI;xAp>38=HKLdE^3}$|%cUk;V6unv!;_p)X6zO@ogw z=~+l$_b&&A>_fxfk9^%YT~q)Juy?sqgu}Cw?#U-Qaia-yQx=g*?#lz;gOr7hg=79!Fa&6FS{qa zTVg9hf$dqJXIpx!V@rIKWn*}~xGuIju`2F~uZUkAUplflws?dzH(U#Hq^;p`ar2Uj zANE4?)Od%DHb zoNWw{E4Qd9S(0_G+9CP;yk499+m$`_tzT@Y-Mo{&(C?m7wAMppC4HfL20HsXmFXIt z6{ZhnW!bY%nH?63~pm^V{5rc zr+m~ZsX}%(?sXK)6j75}KJD+&hk#isl&!FhrL4(S5?fcwHit`MJBnE7UYO%0(T%07 zO{)jJxymMISFvast6od7NU36Lxu~s7w3urymeH?)D%4RdB9(g*wHJ#Nb4Z;fBDwu) z;qp+mi_MlEr@6PXG++p@DSnYaDm+OwMO&F5JSIiQXc^BH7VlbEM@?hIX=Uk#Y6!E= za<6xwb9$Sv(4H^RGL3R9x|t0gl>Q~^!tKf(jiw^e;9T#3lh=2V`N>N8fmH*oGJm?| zae2Z~z9+;hH}wql7pg`;Pr0Z9if%z#g&9r7>?V|om`Q_D5wk>4Dw1-fBva$_!Pk*b z-f)z^qEB$KRw*vtRxXm$s|OCvtW|zf&r$cL9`){uv+NM5Iz{$Tk@7%g=@{P{V%n@h z*k+=;r2}i!v`n+LRK&DgOGQlMwN%8kUrR+y6Sh>uv|?3JNVz1_{8VL%h$(fJikOXQ zRiqpqVd|ZwqIx>dNKZz&BV}UCv_Dmm@(W_>ox!@0l1z~?MO`(SqKUu=CLYLR92X-ZK;Uq)Ru~vuCgjp`W&XWOrq`Vy;EdNW4AP!URg3! z9+HxZsXD8vlp&`wUet(+$VguVg|qpx;}*W*5~kIwW>Z#)TA>82ij;nj=_9KmdD|`g zbStN>-k;bX>Q?$LMfXjYWaTT2shEKc8M?9( z!z{?CjGlH^1p!bEs0WB)_G4C3Gvo4VYM8H~a+Ke*Ik{=|C|9p!Qlfg5bczwXO6B4T z1G_dcg61v+~GQ9xjlO#83~6y zA&FK=)3-$Fo62#7yLsrQ_@Tf-*8xi~yWhFrz0YwYw|D4V%yl0lRF9)lL{H60pyv*zbg;A^|&XLI)Jjg(AoI+|3wynbA?x5jnK1-6l_tw%@vS zVOY6?BUmA(lY#`;(Nipl!ibW9L7Z7JH64|36Hty5x&b|aUcfj2mm|QgA+z;qI@aTn zlaI77pR8Wu7}k;nSRN9vNhd%LU4ZE!0mHq(dp2{XTjY@k+i&%$S#H4&pkhQ6){w~D zD*-bnDuKe612b1@x^>iEDNHgcMoVE1T7XF=GG9u7RY{>KO;i>Fx^%SvIbBKr~{Y*7Jvw-2Ur0OfJQ(QpgBwGEkX-O z8=w`?251L#06GC(0103xP-}WyHzYj(E=RxvbO1Q3C#$Cf@J&yqPYK|dUVuY-GJ;9~ zZ}dWSE<{)ZvKCNBU?O|F0i@+3-K-vM_Iov;NXVP=oi>FTjfAa$T%nR@@FX#aE5ZaJc#tPEwPcsG@FR%8 zi#!;k}hJiT-Ta2-$9Yzg2uUeEz507cH?xf6PlsAZoh@*K~d zFj9>j)N?0Wiu2ft8M1k*Hc5y(S>(!|J6Yt(o;%qwnvOf! zSQ|a5JJy)k}q(K(G@cl#Y|-}qc3I*#f-6-F%>g~ zXK=iOIv{~Dbp7L<8b?f5F(VZ-_F|^HnCU5IScj%wsJvrSV^{|l=Ggsn$5~IOMzJ1G zWmwOrGOPzw8P*f34C@h9M(G(j_NR1^g_zq|N2xOCFhfc+aNKRI=TxIu52`Y(Csi5N zqpA$+SyhJhuqwlPT9sivuF9~US7n+*=si`A^~5T}dSsPhJ+sQN9$IBsPpvYn$5t8E zbE^#N!BvL!D#N;dm0?4G%CMn8W!R8F414~! zv9UpoVq=8Lu(3jA*qEU*)#$cWh7BPq!-f)-QHB(b{V5|$AtuB|n2^e`p+;qtA&2GR zl#!&Fbrj?ChzUj5$fu@bBcRH#kx*sWh^R7bWKT8d2pdY(C^n?33>#Wih7GYQ!-iUwVMDIUu%TCF*buBTY$#S4HYA6Y{)daO zv005`W3Dz&f2=3+1fhUakkeaM!KEdBleix zZO=;yX{akA&wE|pVb8R}tHZD@VsqL?T4F8kmXQ)|NQWGm*E?IEsSZ}h5Evb@?Tl%(%4;tatu9brQSU- z@Eip<9;60ahqPLQ={JDY8ce?ltkz)qEnu|<(_aHtYcRbJtkz)qsU;1juk%o>)?oS` zux(^>K)H4OOz>KR>GhPk&@8CAl1O{!^cyL4S+w@f>33WxT5CSNakTj+jFzsopMJZ8 z>Y}xuzKQB$l0Q2*&`gc?yMqG>3SK-!ZMPojw6-&B1go{3VKZ2*?F?JNYHerO23Bi3 zgCDHcb_PdD+ZoIriq+cA&=T;wK6V2=#|HXCmFiQgKrg}oK{9Lq z!uhkrPg8%B`Rn1IjQmyp$NZ1QAK8EC{DJ#_ct7_K2ZtixkA0S)4gU;n^pDU6fAE`; zZ}5K^`6TvrF=J0V=}d|Dy#K@C2a)$`-LHGk`CkhS zzcTW&_od9&hF@?$?|shqOfV54bAkz4)6P6KOwK~`kMoaC|1BJBRNWIhDVizg;|OKjDn{$gkGOJ^9nz-IhD0Q;w5vI&0|<2SZSM zO5BUG zl^x8IZp8KgthC>1TF$45)By|xrd3eN71)8oFuRYwwN;Sdc&2GX4ai!6nZUH!0up+= zw4O}-wg!+mXK30Ee}AT(tq?S(LmN2L?q*WOFztb<1p(F_O#5KPL4b=xQxIwzLKgtK z`zD$g6NX`Tffh`OJPDJ5v{p*w9njwpn2SEB+L#_B3!GT~Bxoln{LuOy?21zb1#kjVw&P5H49xkBSd)krQ z+aT!xY3u|kfvmEF>;YNJXX!oB0V)Yhq8_9XWP=H$0H_AvQUkIsi}$b14BA3asQ37` zdZg*HLf!yq0^idNvISrRv_Uwb9b^Zf3;cit(hleb@Z3hu;y>Q584R}wGNFx*o_EIqKKP$LO}>!fx9T$Wg&nG zX4B8Qf!Q7icps5}uOp;A6(WCO0RGAdfeBCr{x{ViYXEiNa~9w~i4a&p{%aHP4=p~r zzUkj>ki)LCKzg~H>B|m~odjyl$*AH+&NzX$Bf6p+(Yi2^#tK3~53ws1>1oa@B8-O8OBP7kB+gm`kg6wJo*$(IcbU{diGLd#bH=qZ?38XK~nI^)l zw@?W%5ESY?VTutFc%2fUdrAW}$QnQ`z#PT>&$NIR0rdc~V$Ydolh!e3nhV39U!|vE|NfYgIwAJQWqz3c?F@M2k9|@Gy(+hYpQ|kYT|hRYauohsI}f? zfkXt<6PUI(0Jk*({ml@!09wKCYy;U2=m5W~3wVPBK{v=7xg?Q1pn|{@tOThC7zskA zn@phLtxBi@Kp)q1tQKS)zzl#st|j75q&ou&H zXoA27^5s^LZ6IIm0G{iFpbOAVpw>I|W)DPMj({gHy#s|})4P=r=m941=LL{efNDT3 zgkP@%X#x3{BFK6`1Nd(@f@}u)y%vx*KpXg>c90!_t{nQGA4s6>fNp?}bc;+ssUQ?8 z0S54YYa~=F{kL$fCBU^7b-@(*_wcPHz_*s^7jUjcy)Tjf0PkAV2NU@lxYrWkUdxn& ze=XBL!@-t74z}p}zk`b{0WP)#xY#oNJMSS<2dE@4eQ6*x_H#x^;AYEIQ4Q4B0*!SL z*MqFFf@}gw^EATxR$xOrVWH~%O*nx~+r}if;rw+-&SE`}y}`?>XNarepg!Y!V!_Gk3=E zx7{@TioE4~YxvCwDH&zn@V_CxkqD&}m&Q1Ml6c)sXZmC3oMa3a&W(p(jl61qb@-Lw zEB050U*=v;yySg}e<|^z_eK82)YrUUDlC3cJZmi)2AG54|j(Zo^j(fpCb5jRa9V`Q6WFW{-XGjAk_Tu1K7L>7M*ofcjj6rF`wHvvMpAy z1?;?LWNRq0)wy+eOJs|EOJ;L$bDYcq=Qk!cdN<}b#5TA$;2@8CeSTeHop)V+Eu2H= z*TmMi*W_0xR=Zc{S0z??SLMA4uh+|a6CN-5s8Ouw+gA)Pk1V$@AHF(rwf*YMvfwiN zvf-t{rS_%6OCn3`OEQati|vaui-Ms=c2eoWzC>!Fe<8onv0&uN*p<#JN9M=oJLeC( zgKoQf*rhnN3C$w5wLynj4DKGo;%OT>p07`kkDa_FW^t3<<%rp79la`yaSt7ZH&y}@SL!WnIYj|jFCy!=$PtwxR# zv~yc&lx|~KMv~zyTN9FX?D-QZE}XASN*=XWDJ2wwvP%_Z(XLv8*&>wDKihTnXHmcisZbe`y)^xM9- z=~U5MzPBuIrQh_uX?ZjKM&J$08_AR_6;3*m+1JCbJ6<0;7e41WH}qQgHOFh&SHrJ5 zUd_G|e#P-h_T}))j+e79g*TP?uzLtI=@B;UO>-pSs@#kF6WuJ|P zo^>$0x6(61i9kY148_B7DL!;IOkR?Q&V`#tyN?v3B;x;J-E^d84OL#G3$E#&IV zb9e5p=v|JxhVBg9X}L3bhv$ymspu)!sqF31+a0%OPliuAP7a+2pRkZ4G%k`1d%|2e z9`b~8x5aOB-IhBZJ?=O@bZg*N%dN>`% zI}V3$l5QG06gVUuN*@dyv>Z$y@Xs^h#`Ip_ zUT$xEkBdA&Ms7&%_L3z#Sic{+KE{T_An6^aXh6*Gi0yFh7``@mt$1yU4Tmwm)4ycc z7xam~)HW|I*T$}KUgO)!Z%u4*ZyDJf*=#3AY<^hCr=gJFn4qC>WPN14eSKz~e;vOr zvDUqIga$(AnvvC!)y~0Lo#VgBH{bA^C0D$ncX5q>;8~a1RmpLEo_~^u_l|39J9h0Z z{{e|bG_%;R7WA`_yGf1-y5_d=#MwEZfuX?gMs7cMSWYddvdZ7Tt=~{_~=XJSO`eH`yNDKd$luZM0Y|lC_c5LANGyKm$X8bI5^5O>Iis?B2Iq zcIR8Imn>0p71~BEMQs}tU}gnqC`WB=?Q(RnuA!RyYN?uExhlSw$8$gfLo+u^j{U55 z?j_6AbcO4v`IPI3EOApQUi2AUebMr4tfY=IEO`dYFIt4eGLI|6i#&tyS1Srd9+DGv z4Q=u#2P^6;c5!|=@o;0K?BaEXw#EK^`*%;-g;prM+bc)&EURdi%?oq}D||i}xH`fr zhFTf>k5m|z?m`)d_wU{z@nrK#E$B;+S`cLPrxvUqKno22WY4lz%}q)1rByMI|niwkdAvwRSrA7YY{%-x! zL(a1IY|BLpZDj>@mf`4Qn9Y5;^`b@CS?2K!`-z3HT~HRX4_~UbTHY;0|wqK|8nxc{Cb}n#oCVJw)M-irwpvC_m|6`oiebo z>Z|RA2>O}wx@I})A9s~-ttMl28d#!hl0Ups*CJ;#b%w61ckkQdy=mu7J4-sf9acjjoF;GF-`y7T)r8*r%%Jn$Z_xefX@l^0~<|E@uI!#xHa z|D-|p8YKDpkYyJkJft~2QFf5D)eK;hSS z8gyIe-|yELboahx(Dm&w=+f63bemTjbpN{DpgW~A>ZDbMX}Wh32A#)m(EU#j34I1# zTil@Ik~}9Jdgat%n$dp#OQlH|CO30$589;hFII&bT(nx(T#3MR0j&5_5sKW3Y=ty` zCh3I>3SH=;7f$-$k}_1d=l|O`Qd+y>;yA9ciL;QQo7_jyj~pKjoe!M1oKJq}`7rlE z^n&@&N;Wwl=(kWkx zOU08eHW`y%PoB%Y7Nv>U(5r!0xmV+_xG)VHd}v_&jTJA%?Usqg)PpDA)VsK6>e2X`%d4WPdAhkxu*UW_i;e(gYuEImA6;=5$0zP*LiEDBLdz#S=s2w2`13kf8a zSA0oj3+Zl=e@4adlI-6zAWNvvB4Xuy8pP@Uv*+RBGW3%hk1TyMB&7iV{bdj;?jbjp=RNB<8w5eTbQ`QQk z^rN)`$+cD}RJ3lKQnZq6+V54iaKXJ}FZ^#~65J?D26~uw<;l_Y@#LuN3Tk=w(y)Rd z^3qdW)<34+W$ie5OoFmIpRFcP8hVb#viD%F#-bf3ZdKXBZJZo?JNwiGN@@EwmX#LJ zSSrmrSo2BcznEm#{(SQu6=Tdfjv zC8(5X+G?CU=k!2}!On#8$oXn}Q#a9t)IIamY|Zk&QQYL7(#(ByDU(}Gqg`WquTot9 zN7Z)2IE8i-9qKE|eyKpJai%qD_8OI#H6F<{4Z2xXNOoL})spEZlqAztBiU_b$;|y) zGIlb-T!VC>vUHY-S~@hDr54G;Wy$7FDoMuGA=$fS$z~6fB%5tUvhhP@>2#Az(&;Qn zC#UWiux_7H5@Qw-^LbeTv!<3Ln^liwzb;EQ+fkBi_5iz1-Ms_NH;k&O>iS74Y6^wA z31IbVS-SCHwKq!F2iB;?jst7b*j})L#`b`f&G!xTg~ZV(I0sTqQ(tHE&~w*xBX!+i z+q5Ds1*@q>>O5dIm1*4uu$r2$j&o@GT0Q@$7Qxhf*-N0aTqs^r6Y4rI6m8d{FQs~$ zzEoN52Ie^(REcg?K5r%^GxlnVqDnekUpK8Jq3$x2r~M|i^30c%Bs0%KGVOPvC7V0F zBpG)(lFd|Wp(WGJV9B&MUpE`+E-Onn@6wXu<_Vr%ML%-w@ocSve4(0Mlk2J>zp6~` ztA~7vrV_7Z*lI<@^70G~kZ&xL>lz{7R3{i-}P`bM=QBA`ZSa&rgd z!7};W36S4iCg0f)`Qv4B-9*Tr7$c|WzkL!S&W?$o*J1$jc$s|XWXKa`^6gU~f3aLX z74mbceDpWtAbH579mvok%uZxTmSvbb2lDTh$#0ko`H#xv*Ixno-;~L9^C15zldq-s zfAqpGMEq@8hCOb`e^w@+J0J2d%H%h|KK?DnP~cepNbu(TO~FI?1HoW^e{f%(e6i+t z2Y2PK3+~Kc8{D4v1-Iq52Djul1vlo`2iN7-1Xt(1K~H2Qzd~FdTb5XAU*cSxx++69 zE!QmO;&9~haK?+;FhY#7h?iQ{5D3DN*|N~z9F zhr8X|Hcb18{^np)zJYIu)W<~8VmBvhQ#H5nx);XgyXU89SABR+WR825{j%W92)%Bx>A_1f(}tZXM{25n zihFWwAVC`Ek$!%Hb9|!5ZjW}R+I_8JtG`8T@ng5TK3Jb1tJ5RZ8PYG08qR) zZcx*a5Pxbubrl7PTUizjWnW)^NAWs}wL1LAJ%w_PJQCA2TMd+}fi8uWQJ|GG$himm z+vMD@Ybx#4+|^4~Ec32ixOU;T#T2V7afiR!tCqo5jf^IWsi)7V#3%eb;l|Q9ffXts zu92K6RZkN3X$i2rq_08(IaAlwDF5tu|0G%}+^;3D|0UmS!zOGK2drh-$S}z5l-&!e z8jV7@jvC1;r>?fQ2mvjt_&+KdZ2~RUqB*UE7DhKP49X+X{*EiXEB5c$Nm1&`eNfE} z8U3lH(drU$dfI+L0|Ctp>**8A9it}poNKSt@9-b;E2~wP9QZQ@)l(78)MO|Q*u>S# z{vKnS{Kb?3!^(X-j~rrElO{?$#j34-@K2PgV{2!6R+3U`4Wlg#m3y^~z1Kr(VKN%I z8SO-N83`*G8X2;@EplL9n|?ei;NYPHH(h&3QffC^H}0#ON{VY6Ev|+YL^gw{=pc6! zJ+=HmXM^l|N6-(jWkk=R10|)F-t%FtTs%;D?gQgYyiNY>p?=rmnU`&IQlaX@yID;M z8U3j_)rW_lo0TQ5V_47dI_`k%KHSkL$N$)CSbN=p{re87wJK_R?yDnzrgUr!)U#Fi zI));{1Kdv9Eb{wl2QyuvGjt!==|6D6;*YAuv!}tfi)uIxhO6qz{D-3I~^4f!amI@0uPT4JtuWL7$mh9WjZd3N}?Q5KQi<+LUhd(vH z(zDcaSO(}Q!=NmF-q+FX)oN4nwsK$Hs+Ov3Bo0s^-5k)w(8>+S?w^lulhb|ehUx`7 z=^faA6m6r_>A0GkGT=`wO{r5OD?%#6KUb&Q)KZl?T|xy*9MHs2jGf$OxqrXEcdQ`ANbIZ(AYK}rJ)Do0hSXj2!GE{1@^ujIkkKwpqASErs2SZ4J8@pos(4G2F@Rlk<~}jk4vFZi8XrzR_R8U268ijj6?{H-<9W zSQ*8rymwa@-B@wI%6)nFMN92u<hA0{>UtI! zbc3Hzn!h*bem>uzJMy_fCmt~9UJe>`3uqhXuW9>cf0DLvat7T$|FZVUf1r8Fl-2Bq zi}uCeChlKk+faL72*2RppM z3}Ta6b2#B+hRtz|L&UKN5eFhf9EA{Z2tvg12N4G!M4Vg@aWp{0c>odW|00zAMQHVl zP}&!voi9R-T`NDNUH}^Hnp71+x4ldVE%!1Z^xeyZP;oC4LeG6vcva#4p!Ys1EeN3i zUnYb;e3?+*KHT0-2fZH|Zr>FW?SX6P*5d>wKnEST=Ijb{sRaN+3CjpxZ;h z`v?pGT^Ll90Eb7cI5uL%SrID^h*)vd!HPo;R-A0G;!J}T2N|q%dZFm1wTj~S!f0C* z#37!;F@`cZnTx)#n2sh~C^e28T%Zsff~+Qw6BOg|r^RVJ<2UR$<02W~DPS>iH#PN=z8&SpVlm`sYm!`&PjSHm4 z!Ho-uaUx@kI8@K`oGrYJUZ{35Z>;@_6-S(i?4kyP>rL{SS#S|#phl^M2kymGAH}3G z@7Tjt!-Ep}4MQcF&F4xIwlz`q+Oq{y-p#}`8pHHV?3C6^spNNm&^|R(!ENMfnU|A- zBTqdE8nl80;yOAdx`gJ_LA!E06W*i=BrUOE9>WA$ULpE+BSG|}T?6g+Nb`sen zg3iTY! z_QAIL-peYdFXx)t90d9(L7i&_*F^s>4}aqPWaR6yue+I-GjE1xuBgRy=HuYU_K)Rf z?vozl^YX|&&0X@qQ`UNU&Qt9HdDEvl*Zf!{e>{K7$T9J#{YdJt|1cL8L(bdm$DQN^ z+D^-mi6dUJP%wPc$f4Mw)WOVwkzk5Wl4SOcu+t-vJGy=x=Ta9x%1#ypu7p5@tPfu-D%=psp;*J+ql z8=E7|PR?>&Hgu_PMou37S?6RqcScty|5K-7g>|SsOwJCnEzxFIQ;wWndg?j(>=*5R zTl4i(dydmE{@wqR4c`jnwr~}LHrM!H8V3JbZhx+V4mf4W5c7W>{x`CWUWATr6|PDL z49Au{5@*K_CM=RD`QbII3yuUW_!P~cVR)$}U?@~b*jP(_cvhF)FQv}>4a{1%K6R~{qRlPO%B<9TyL$QmBzuf%g4W>d%@CeX{*>F zpZ%Zoyt>uTE>zLw<$NO>2iqLIzpo6L(#i_4Vwao!h^op(wdEp1VQIN2qq$tvQ7*C< zi$drsc}_=NAnU)`Zs z3!+d_^VgRr>n<1R!exb3mWxc~qS|s%U6_oKjCs74@?;I=qNZ{Y462MN3+7eEh@?^x z+Mk1=l`+X+b!ChQCRoOZV31{usHR*511)1x!A=Vkg+||gm~9!84Axu5h&szfO`|_( z<=5OgRv=1RIZBFVRY2EQBps?m6?BgkG&sf-(ll03yYdl~-=2X{?}atN=E6(6V^{l{_%QQ)p{N&^=bb$H%0A&7G1g&0__yyi<~*eT<-& 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�W5}^Yw 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%0Akq*HL>7Wo0AdhogcgyAFd)nb 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 AU;qFB diff --git a/VisualC++/CourseBook/CourseBook.sln b/VisualC++/CourseBook/CourseBook.sln index e00d873..140ea9b 100644 --- a/VisualC++/CourseBook/CourseBook.sln +++ b/VisualC++/CourseBook/CourseBook.sln @@ -23,6 +23,24 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0210_MergeEList", "0210_Mer EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0211_Polynomial", "0211_Polynomial\0211_Polynomial.vcxproj", "{BA5E9196-08EF-4F25-9F82-D35296370F52}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0301_SqStack", "0301_SqStack\0301_SqStack.vcxproj", "{CBC87773-9686-4E77-BE7E-1335A673E0E1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0302_Conversion", "0302_Conversion\0302_Conversion.vcxproj", "{B1FD90AC-75CE-404C-907E-8D939C078D79}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0303_LineEdit", "0303_LineEdit\0303_LineEdit.vcxproj", "{55BB85DE-4B42-4EF0-BBF8-F5E03A518376}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0304_Maze", "0304_Maze\0304_Maze.vcxproj", "{38C80F0E-757B-4E11-93F2-C2666AF3617F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0305_Expression", "0305_Expression\0305_Expression.vcxproj", "{71331A05-F03F-41E1-A7BD-D6F9D2944D8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0306_Hanoi", "0306_Hanoi\0306_Hanoi.vcxproj", "{B92DECE4-A1D8-4A31-904B-C2441A1BB053}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0307_LinkQueue", "0307_LinkQueue\0307_LinkQueue.vcxproj", "{9ECA0672-0E13-4324-B2EA-1A8153348085}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0308_SqQueue", "0308_SqQueue\0308_SqQueue.vcxproj", "{28EB7738-3109-4B98-B312-1B3D1DD91DDF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "0309_BankQueuing", "0309_BankQueuing\0309_BankQueuing.vcxproj", "{C44F604C-F8CD-498E-A3EF-04FCF37AA303}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -73,6 +91,42 @@ Global {BA5E9196-08EF-4F25-9F82-D35296370F52}.Debug|Win32.Build.0 = Debug|Win32 {BA5E9196-08EF-4F25-9F82-D35296370F52}.Release|Win32.ActiveCfg = Release|Win32 {BA5E9196-08EF-4F25-9F82-D35296370F52}.Release|Win32.Build.0 = Release|Win32 + {CBC87773-9686-4E77-BE7E-1335A673E0E1}.Debug|Win32.ActiveCfg = Debug|Win32 + {CBC87773-9686-4E77-BE7E-1335A673E0E1}.Debug|Win32.Build.0 = Debug|Win32 + {CBC87773-9686-4E77-BE7E-1335A673E0E1}.Release|Win32.ActiveCfg = Release|Win32 + {CBC87773-9686-4E77-BE7E-1335A673E0E1}.Release|Win32.Build.0 = Release|Win32 + {B1FD90AC-75CE-404C-907E-8D939C078D79}.Debug|Win32.ActiveCfg = Debug|Win32 + {B1FD90AC-75CE-404C-907E-8D939C078D79}.Debug|Win32.Build.0 = Debug|Win32 + {B1FD90AC-75CE-404C-907E-8D939C078D79}.Release|Win32.ActiveCfg = Release|Win32 + {B1FD90AC-75CE-404C-907E-8D939C078D79}.Release|Win32.Build.0 = Release|Win32 + {55BB85DE-4B42-4EF0-BBF8-F5E03A518376}.Debug|Win32.ActiveCfg = Debug|Win32 + {55BB85DE-4B42-4EF0-BBF8-F5E03A518376}.Debug|Win32.Build.0 = Debug|Win32 + {55BB85DE-4B42-4EF0-BBF8-F5E03A518376}.Release|Win32.ActiveCfg = Release|Win32 + {55BB85DE-4B42-4EF0-BBF8-F5E03A518376}.Release|Win32.Build.0 = Release|Win32 + {38C80F0E-757B-4E11-93F2-C2666AF3617F}.Debug|Win32.ActiveCfg = Debug|Win32 + {38C80F0E-757B-4E11-93F2-C2666AF3617F}.Debug|Win32.Build.0 = Debug|Win32 + {38C80F0E-757B-4E11-93F2-C2666AF3617F}.Release|Win32.ActiveCfg = Release|Win32 + {38C80F0E-757B-4E11-93F2-C2666AF3617F}.Release|Win32.Build.0 = Release|Win32 + {71331A05-F03F-41E1-A7BD-D6F9D2944D8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {71331A05-F03F-41E1-A7BD-D6F9D2944D8D}.Debug|Win32.Build.0 = Debug|Win32 + {71331A05-F03F-41E1-A7BD-D6F9D2944D8D}.Release|Win32.ActiveCfg = Release|Win32 + {71331A05-F03F-41E1-A7BD-D6F9D2944D8D}.Release|Win32.Build.0 = Release|Win32 + {B92DECE4-A1D8-4A31-904B-C2441A1BB053}.Debug|Win32.ActiveCfg = Debug|Win32 + {B92DECE4-A1D8-4A31-904B-C2441A1BB053}.Debug|Win32.Build.0 = Debug|Win32 + {B92DECE4-A1D8-4A31-904B-C2441A1BB053}.Release|Win32.ActiveCfg = Release|Win32 + {B92DECE4-A1D8-4A31-904B-C2441A1BB053}.Release|Win32.Build.0 = Release|Win32 + {9ECA0672-0E13-4324-B2EA-1A8153348085}.Debug|Win32.ActiveCfg = Debug|Win32 + {9ECA0672-0E13-4324-B2EA-1A8153348085}.Debug|Win32.Build.0 = Debug|Win32 + {9ECA0672-0E13-4324-B2EA-1A8153348085}.Release|Win32.ActiveCfg = Release|Win32 + {9ECA0672-0E13-4324-B2EA-1A8153348085}.Release|Win32.Build.0 = Release|Win32 + {28EB7738-3109-4B98-B312-1B3D1DD91DDF}.Debug|Win32.ActiveCfg = Debug|Win32 + {28EB7738-3109-4B98-B312-1B3D1DD91DDF}.Debug|Win32.Build.0 = Debug|Win32 + {28EB7738-3109-4B98-B312-1B3D1DD91DDF}.Release|Win32.ActiveCfg = Release|Win32 + {28EB7738-3109-4B98-B312-1B3D1DD91DDF}.Release|Win32.Build.0 = Release|Win32 + {C44F604C-F8CD-498E-A3EF-04FCF37AA303}.Debug|Win32.ActiveCfg = Debug|Win32 + {C44F604C-F8CD-498E-A3EF-04FCF37AA303}.Debug|Win32.Build.0 = Debug|Win32 + {C44F604C-F8CD-498E-A3EF-04FCF37AA303}.Release|Win32.ActiveCfg = Release|Win32 + {C44F604C-F8CD-498E-A3EF-04FCF37AA303}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/VisualC++/CourseBook/CourseBook.suo b/VisualC++/CourseBook/CourseBook.suo index 6c1f351c25785d632b6df8611a6c97f8d54e1c8a..b5ff6163a702093592aa6a28657ed48b37fd573b 100644 GIT binary patch literal 74752 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 delta 1534 zcmZ{ke@s(X6vy9fALRiGr6N9?Qp-SArC?vJ(z=Nc=kysGOr~5Clf^h>W^>EJ{KI8`Y=029EX%S#06R2hgPq&>Ys+?%PwqMA zo_EhVH|M;_O*ztG>~iHZNsrS6N6^??12;}&k=@0Cfjs3301^AVmZ#4b~r@X0BJ7})r8Pj(7uvb zMZlTr%@)Q6QZ^G?2$74rorE1ip~I&aPN%9Tc6!x=bav=J&ij=r13s5EgwwxGW1`%2 zBAIVEBdE+IMR{o8iHsU!8k0%QdhC-GRHl#NC0eD=@9|aoDm)AQZya)a+}gGc``5e-JzGb_8HrkMC?faVN4F;|HEB#df5szA zct#DXPA*Cv&L)c_@hK-W^yh||Nqi$KXr0yGTg(vBLI{-v5y{r0)`aO02nhdXC0A@|wg zsEET;6UN?iPJa75U4QFLPV}w`)?qtZ?%L3(_2K?#4(%#;d0%Jwiqy6D$gT-d53O`5 zaQtbVOxPb>ia|;_rxOi|W5((qa+~M=^KEsoU(3NS zg$}fQwhHC>L%23%L5{-#PvK5Pi|iQ{(jsalzobciK2^*ZTY`%E-7$R*^FiMb#;DDV zcQ;u{mYEq^w;z$xAsjCDBHn!rwVPZRby|42+rZFLH>kc%3A7Ra?lG=cPAA0cc z(oO>^PpKk4Cf()~NixyL%k=B)B0i|?!I|nzYRydYzaRyqB~qibLE0z1CUxTa(I)f- zY`na3CHlhMhCbhc(s~OsbFF(h<8se?hGaOsz@1EhEyP&wKB{_Jba|Y|H@k~) zV9m74Avg8w9W!233c23apFCKp9wk(TU#q05KSEr2e*2TEk^L6xO z1ocV)`azw(*Pq&-XL~V~uRTm)FxHjFGT|6Ar-;ALd1&)?$3l#$C|~&nd!nA*y3T-| zb$ckuQa;jaHQ-LX8MnsmvEOYh9p;HXK7Oy1#bn0*L}bDhbID9$9nhZHg~mTJ#gJH$ z=skr~?deyx+gLS2puSl&+;8x9@1dDgV~zRDMvs||_h;wx3!gSC=)Y0OFAi*E(Sh^$ t`Ab{I4k=7YE~Ot&k(f;5bJ8-}*Yo=WN)|3%F>%ucmBm7{sf%kB&)*;v4SN6p diff --git a/VisualC++/README.md b/VisualC++/README.md index 7d2370d..19507a8 100644 --- a/VisualC++/README.md +++ b/VisualC++/README.md @@ -30,3 +30,5 @@ ![VC03](image/VC03.png) ![VC04](image/VC04.png) ![VC05](image/VC05.png) +5. 让输出显示在控制台上 +![VC06](image/VC06.png) diff --git a/VisualC++/image/VC06.png b/VisualC++/image/VC06.png new file mode 100644 index 0000000000000000000000000000000000000000..92f6c8c221c6e72a98fac8f062453db5b8a8dcd3 GIT binary patch literal 48953 zcma&O1yoeg+b%w|bax5}NDh+1&>%>6NQ2Vd-Q7wz4ALzOB{`G`NQWRT4bm_maR>Z; z-@X5}zW-hKEFE;S_c{B#`+cAN#3a_dh`GP-UO?rv6&E`aiy z5jl7hmK(fD`h%;vi?x%RwW9-o5dAp=ydC4QUCPnP+r`?_$_-G3J0b*c#d&IV`C$6k zmCnuD{sVyT3Kt#z8}!HDXgFH9d78R>02n$wJa)%?y1BKhxt%Gzs|%pHyD<^o{Oqw= z$JE8a+QAagO}P~bZ$tYx-rdFg1K{EzbpOA)Njcive{gUET#lr5!P`(DyJ=dx*?j<% z{h4G20O$a3r6n}Iat@aK?WlJBnPHCZ$zUTML=cVdtls!?sF0@4P~LmDI+A3*oLnH9 zA{tOUeecpT{h*)wYLRbsYJt5gaxL>^D0d zEs?Kq=iXY;`?bt)yQQ*U0*hFGL*xB}&r%%Hx!%jc)hnvEc5iC*T zfa?#p`;h^J>0HLklkPQQ8`iNA&P@P1_bx_lKGRBqHU|kwNgX1q63lXem$}3qQ+5^R zucqEUNy9S{HxSkfR3b#frRf_V$D{FD4XzpW5{0dX!p6An+@+4mQF9-zi@OFwaYb8- z_wANiRY5%E!|zFWt)_OhSy?Iq3UsNo)jrD1*8|k&_gQkWLv@}64*vS<_ix64)8u>; zE32}p>`6@_n4RS~dR39mBFixOn3oXKE#72*9P+f8U_HWM!$igRw5Qdx`YIH74^qwp zMLYWM>%-@RCe-noqd#=a12q>gK6Mao#{G;#2|I>7A@yRg0$n_OO)$vzx!tFq^Yuv~ zb$S(b4Z<&6*ixF2h~do$H+{Fja{;D7{r9d zkaG3KgFGk05xKOVPwPLibhH4mHO$||>L0dkSnzWwj_aP1DW<0jTai$m;?HY#%~vw* z#RRL)Q3UHXK7a3@S+UmGZixAB@dR#$yKWWQ;RQ3{1u(5tnhPn(Ja)}~WmWsK5CPAF6_z5D5)oCuJV021-e3hyi3(Y8gR$D- z(irGwAySWica46MZCm08J>7Tjppjy?Ys!xD8nTHr{hPz-Ji-JRp<_j|iO{ol4*k+c zv+Jl-!Lj>^_-|O0RqaPU&=gx~Vie*v%86V_?O+IFed<7&a(|k3TUxzq?J85+7`dQQI=E z-1w7CXAwIwke(jA*z1a66OsE*C-DDI3H(npwdoDsK8Ow#^a7d-atBA7pEwT!>*45M zexej%PN+M7b0sUSZ*Ph?I4hJFy4GixeC^#%2!A|ks_fs1m3;0vWiuC`r~_WI7ND$T zK!6;TS*^Mj`R=ZWg?aXX%d+v8AZKUJ#KZ*CzE!74(T4(|*Yke9O&_t*@}#zF*Wk)7 zD29xcE0$Oo>}=5Hfj##l(fsz)!#kLd9cNA#{QotEP?$Ij28zH7%xMHVW1$gRRyPQK zeCBpHXQ4vXS0Bxv3$^&;wL7;jti(1mB!Q*efNgVT zh*X0he|=ElSvru{7t#Lp6}ytDb$OV}10B=wu9%b9&2aHFPM)*Y2WlPmJz*f|N`Yu51p%h}lY%75Fk<4xT^Lv5C3B!A zbWVNv8%1*y4A*K;xEPdm-P>=T7Zuf}e4Neq4)uFc5sS{4X>VD6UlUIovyhr!r1%K^*Hi*o( z(8mGz*RxG1S|wE>1G8xNl;s9(n57@_u(*}rd;M<>Ya5*6)6%v->*rg4HeS2YY;y;P zpE$GU=ys2fvomEWALIiQ1_#&`se1dmiwErFOgzjGkv8T+;=Zvf=VbJcUu#~z-vM!= z;0_L=IXRh;Y>bk4>C0!lJAD{8S1|8sdG+S+FpE-gtt=6czd5WPR<;@w_TWh?{m^Ri zJ=rybl5N_vq?G_qQ7bFPupHfExvvF>MQPO3`B)>v?>&xrrY!j(Bhp5?ll`wQCtlxs ziXV|&BYE9Dt6m*M!c?S832XBQc$|j9v{ZAL8G;^FG(gUr?w(L7L0aVEp`)OPRC7No zM8XD4GFsYs{=vXP14JfLHIxwAFRXcNI>D^R2JTqlt1bFf+G;HRNa2zQt_sl*KDGYe zCgjD%FBE%lS!Chrn8^B_ESKHH!TP(gr8m)CXpvwe@4wa3u*T5H=v$vBtH^&RU9LIs zekz(WFuO82Gy}w&?rmhqk{UFjcAkz<5Z7}YNvRcgiKez>C3X|MwY?>=`p#H|I5{-m zrd1>#Dp1$h7&USKmT2o!*VoMy50eno*V{I!atT zwdBKla`Rj)I(2?hFEa#8Z1RZdXhu|^C{2!&MF|7Wx{1&9xVM3@SWtL40#=x1PD4Wm zHJM6IA3qsccQ+J~1c1e^xH@02hh^9nb^@`vo&~<1PjrpE%`F8j=ql^{IjR+VnbT)5 zo0FYtB~Saq-OzY8!DkhC(ZYl(#O=mU~{xy1x*Q5o`5)1doeUl>=#`~vtJAo9;8r+DmHbKTBB?r zVd~{^d-NezjWPZGi1L&%$e3i=*)e&k@+W}iu=3XV&&34t8GUBN;=zL;eEg+y*O++S zzIC&WmZ2Umi~68sa|w-fS3PSnF)u|HCDU@EuY$iM-CgjK#n*2Oy1IgrnQ>9x7M=TG z2u5o!YIF%2(i{xFrW0)TLXM3^A;LjPP90_;RW{?~S&e^)=oPEgjWZtq(>{7(BP<+@ zj%8{E2zYBiq#I$+zyI@X*OE>ZhtEaQ(zIE7DF_c@L31wg*{>~yh{B|~1AdQsKIC0iEx6cIRpC6Ey;fR-< zTr~8la~?-=X@4M|((7io^yKzzOrZS|{<*PRnh$Rj;P1E{!5L5P4tx_k;7xRG>CX0Ts>d%(iL`4YUwZ zebAA-XpMXE-1oVG9eMa9gVOiV?<@?uqTO%|vWm35dfi`=GPXt~@AVl_;Db}7MyK;& zk5ijYGO%^Ka#;88^$kzig5@qyLcEUXHn4SR2AA2ctxJ$B?|VnC?7YkZRhIXyAU%4Q)>!UJ>Hnd zd-hi&R-Ei6rY0t%39_G1fk3?Xrf37sy9=-^*D4)TJDmLr3#1TgCgE^nn(B4cmmPC3 zVU6CMwC@rW0q7bMsPA2z@QNb$(Db|;*Li{T1lAEj*h`QnoR>L{8v{ z+fZ-d-4OEm690Xdrwi$}so-AV8(@HteDqP~$8zOCuA8q^Sqlv~i!`$&*T(5FHdkXd z&4_2z%ZKU>`djzN($Y$93wVu~^mF@GS6^$cJ;+%Yy{uL?1G20{8*Oo`NH-Qi{^poz zK>0HOC245{snQp3w>~jcY@2;(Adj`P5=k~3(xjobqyC1XH#H3f@(YlT(00)sqJ6*r zt)Pn`#HVQ2D-hH#iD0`~w!UA%+=x@Cs#|3#{T;0N!;fK zQYk62cNzV5!)^miUq0_|p}pUf9(;a+I<$);UEx*p4yyYyXN)#I^Jf*OgNY@^7FW93 z8{%!$eI278TEYGOHzX+~W)c?GSj>b!CoLSORF)EF#ss#6q>k|_uHG9Xu^{XfeCzu8z2pS}N)A@yPbk9> z=DYCv9eKy{U-P>kS4=;ys7ZXONP`2wgz}vGHc>f7(ZS@*t2Y~6?zZnil*qXxeA?Vv z&JK0niKi!v;Avsf3LWv(l68?^H`@dO%xy(OIHS-uJWK{@w)J1V1O@ z-zyx&jiTh06Mh?Em%Zt$@9%h^IJzKploAR%asIrJNI&bq4yg%8rxNzE+xKb3`o47Q z|4Pd!eP+|yn_y;=41>k=;5V4|SSw%ZH9Ptf9@k62E8IMY%|!E?tHbVT zgWE{(hQxNn2MB{B|1Q7KeXn!0H-?~FSlc#P zv5yKNZRnx=k@an^aOMevmZ9Q(CqFu4Hh=U_tAcklGJy|tdA{#C>kW&`tFHNdgi~QC zs{{keB&sw@C|znZ>UPU8OS~=={f0r$?k#zHOO;iV3d@3EXF4H0Dsfd#0Zp#-*agQA z9Dhs>ny{qED1_E51$&tc9=F_8WSlp}9#KN{h#~IS*nGb*-Ppo59dvcrN?DnhgC`Bx zQ;k@Q;#|e8IlsGbX;+q&zMho}PM4h!Yl}*Dm8eaIgLY9-276+^ysd2Te1bNP`~{#u z==x<&W!kNE<K`_1@0TwOCnSg+>l*P{F)s;B7yPPItRMnu2z)FB+X4s~>TuYWdY2#N5oRFn}$b!+t~SO{+nSN7Q)& z0lH_xo-2#aa2aZ|m|oWD@ZlRwW^RF0NTt9ZMR6zBh50W<`qap0ilgwiH1W@x)Ev*_ z$pTYV;&Yj@w!5g4^$IAb6;VS}Ss}U(2+S&JNrD7lozO}k?x0ny;!c6}Po()tH#o74)9OBRD$6T@kzEk3D*zW^L;^ z^s@tm&m3i4o+YLvJsXhMFb}}JFb!9U<ih5m{zIAyPr{EqE;p!Gh4e5E-14mf&;(cQH7mcP3~eBReM~YegNGb z_vS9ggc&lLJZ=tjj9~_HVH(;sVaGDD(@jmYi<|)*tOzT0c6Nd8S&AOZh1XZ*pZs9u*0%>9Lrx5kWYWPZS z@PC4NcVw>HKU8)b{~blgF{_cDfokE=@8ct<#nn==$*c`z$J-C?a^d5vm2SGUvcN_*_o@Z-QS#y8dz(0!0lb5iuAyQ7 z-kuHpvloxy_g;!uUFO*K$Fc3A!4vB*z+=Weded?5{aKD*ZSI(CY;3xEdZz!Pdumc# zAzvS#@x{g1<>h575Ko@8A!puUyZb)La=>5vU+vz6!^6Y6Mn(yUW3Zm~3Dl)0aqSbU z_=F|)u6}85CjIJhC~0hL%o`78nQ+tFE~mr+b=_NT3kYFO7;f|AgX#-+EiEk_ZT(GG z$t_+xF1JUIr42Vj6dz{__IL-onfo}rNg&0O{oO0T`nDl^SrF`SHQhJI&$lu@K3=kg z8Tw;pM(c4VjvW^y4!>Fu;4kzzmb0n7Jq|u=>3qh~iqovf&(dzP-g%_%ERF5$zjjBT zKR&?5+S~iJP@rL@7(vqs;~wJ4V#%}(Bx25Y`9d)12;sCtyoOZOrKj5?Pr9+g;3j`L z8t#X9`tU?WHC5BzA4jTcK{k0$^lyuWJE`t*AD(j?wiAwM_b@*$&m=Ew>7!H@O$VL{nqnLjaYaQ^8cWgmk0*;m-z3LsHn}XwMg)YV1`9Hr5gARTROFpX^k>)C9j zFOmv8UG?_aU@!t^mIZV)N45LX?irw_Sc0dabm8_qs7_>_e!c|XWPuw`MfqzQYUK`W z3J)SxGdJe8^%r=&h;o}AdBu=FCeT$J^H<>@H^AR8R#f!V)@v)bcCAOupZE+Agygk# zj$j~opY13WTSvmqj%I7GAnKVrY zZ4#+7%3Zel&dH@JP1N@=+*(_kWgDN%|KO?}y)ap;4Tv^=eb+p1dB<^?b+Sg90dwrw zxpSOz*6ch)t8Bd! zTEMr>{oyv4;N>5Ym}ncCdxfD3c4eymP|NM$>jv2O{^f{6UE3B|OBZ$G;C2Vh%jMTP za>Ac#$Ft=QS?>CIO8cwjB0}A`wAQHTBJ!!vk%L^bb93*n*P5>L)m#?A*F4+U&4oiw zZiul;O~Zj>Cv!A|{e6}s#vV5i*m%or-(RcwKhrC8{DEejR(JL80(XC_JPpZ*?M_55 z|18B0GKYK^cu1fUY;^v%eYUf^tLG}Gl0CLf>5%^Ah`I--+8V7i?kUk)qS5 zd7Pu@^LYTeLN=jWG8HKAosN=HF!`{FLxio3>Ih#GeW%l0SPALc&!7}UD5{CQ%cisv zFIAtZrDQ7*pwx7tNgF_01H#fxj@`MFg-sy<9M;bBIoI8e6+uElyMK-PKh}0oRMLGb z3_#xl#Pw+9T(5Ji-aQaN5{nn~?qVNsAQBISf1zW}zr(ZjVKvcFL4Kl%exkG@=?t$y zLP&tplX@Q17=Y#mMh)2s+YkXmE52q5)hQ{b2`Yf*F6cphQ|4)&@ek8H@T(m#|QuqkHP!5A*QUT z6GduYj(i>U>#mb9FkSjs?*p<+&zzr4R%52@2{(7huG!gUA{pwB5nU&h{2mln3i<_p z;t1}LTge7**J^!t77Q1qrb_2*OQ*Gv_>ad(E?ld=6Brvu!fz7j1SY*wjn!P>i{Vtw zAZW&?T{{X|h`kPX5-WF<+B_e0dJ`5ncC(#5TzhfVb2CS5Y+?4DDL>f;+6rF%_EGjE zsG|7N9$cLc$Iz9AQLns6KT+JVGqA6l1LL@z?or9MLFl%(*CAxi>0(c-9kw3ZoSJrl zK5vwCE!K2iZ>me~%!F0T@3f(yqZ_If zWO9D4k=~zp)tM6I5DP|@C?UuJ^ySfBYbmnneEhr4R(H=$mQIs!%i3N`72$M`+FILz zDnM3yf7umsm1-OwmDff1-7^6Fy2cZFO-mf-H<8~7{&h?{7{S2BZdn_PgoZ=qU|#lM z@i&x)-&0LVF`LP5ER>-$l0jCv2+UHJBO3B6YCTbaZ)8MHeEz~Utn73sq6PriV^)qq zEOw!gbqN?R&%yx-dn^Na5@YtDLZ5m+PNhcJ$3}d&&PfZhp%^FJ=!zs4;1B3rH$IQm zGJkEsoh3S7_WO(4%GM3Q*2ajV3>d4EIWu?k znyE4F@DzmGM6+n26^__Tw(MHSzprX0Rd1~Bh26UJvk$=eqEVPJ7J3nwAL zZTWVZl*-mwS?4x_hhKp1aCaZ3zi0N>S9%X^lYtGe@pD&7g5f*c$?s_Q9oKmPcz0`+L+CsL@keeC=38(>Js_Y>W z!>x1bs<&4H-rx8!8=8$D-^vgfPyW`jsJao>=m%E+4F6!A>Ga&>bHKyhhf2I&8z0oL zSaodQQ9GLfiXwncI;-N~Th5}PQyEq0i(;%My>RQ#HUkc}i|^TwXOnJQVpu8wpRod5 z4MyZhRbyHB4Rge*ZG_5QD_0wE(u=b)61q4K=;%Dx2By+0&=)lk%9|ZnQ!mKv+zdHB z1S&&;g_2M+#LzzllmZT`k7=8;F|n271^8!T7c91`8=l2!dT(fNzmYk-$xrP^p?t^s z$)r8}z1i=iAvkMGjZ46J@fo?Gq8uO(ePt+49JQ`&ioDHHlmEev0L$?>G`Jk4XZYPP zu5mg^Rm{ULtNo__ay&_ybMIE3Bu=`x_mS~yE4|#BEyQA=X8jU4dfoRLrkm2J|q$`|E9P0f9&^|6K)r z568_WPtKI#&Es(?TvK>eqs8Zfb!&TDp!M^`2hhfg+WnUh?5+`TWzI>Q<#cilMz6C8 zQNvs^C*(t<)HKa7Z115ys-yHCwL|3=+r=0wWXRGu@~`Bp7R}B&z=v1M31@%&6 zNd+!bZ*TIel|V5Z+GV@#-?o+@wwi1fZ^O!I{#$UAF}A(cMrND4d?Vk<Ujw z7%Or~#Btv>d89L2E;x;!J=~R)8w0w5kDHxJm zWYJUR=Rp%~v3j)>%a({pt8{L+h;|{0>mYdOf3^Nymp0~Db^5Zmr@D5#)7N=( zEnD!EdU-B6sws`szqEe<<-sQ}a&4EwW=ecI*}gqee=N3>wPPOTtJSY#UK>6@&E~@& zw5h>u>szLHBRiLMzBp3^xn1Z5sO#5kY7%DwMJbTVxCHGRKFV&*>zK&c<92#wa@Nnp znri(=@)X~F<(_p4b#932oQ+|tZR$8VdL`xfNIlnI=77J&TRO^Xg)D~ zdkg5-xVW|ra9W+wu5ZJb2H^(Kv1Q+HkxuPLzYg%5=c>*PAQ_Adj!AJ+>nq0aU$789l%RTH_1jtG(eW8RnMzZU5V!`YrCaYUiR^?6D%C z)j+1ln>V9Q){;8!m5TMJ$H)aZL|^$)jRjbeola!l{M8#=u{7NOeh*aDx4(E@&A;LZ zukTjR-u|_N2Yvv&4x`E$g5E>qyzgK0v#v-){U6#aVK@1?gXsfeUu&!#w?*^R=Ty0= z$ZWLVypox(E0l`S%&fGPXozu&!)UDQu)uq-y*@n03M>i!Sf*s@b7ESGNYV(844n!g zHs^S_?{{m?;F0!mrb^!YIH;kafsBG;VfqF%*1NaIs;#Ykyp`>^J}R)%w_n?p@Ngf^ z47T>Ud3d(7gmnG~)yD&=)gQKA`aqoLl^)oC9%9&UPOf8!^RO6Ta1T7*6f=bW{CkhG zJRUl*_J^z9QD~>|pwn~pl(qv2Hes9b;6&RQxR>4%Wazb?xEvd(yfaQkuocK~6wqeoNdilJP+2ASZABHEhajV|Sw`+1u}W zM=eK$ic;X=1Ds+&at3gMp&NAG%21&KA2y2weJ+7{0UOp-j=DQ2pr#}45iw`-^sf1; zR@J(i>kY4)_`t}cBVR01f^@?ew}MgY)FAFkd9#H)qKsBA9qGke;RABKo6S_i06M$ zd^}KsEooFw0f`*+3l;(QKRsU{j(r_O?7SJ5f?Z+WHzeL(+rrKg-8^D<9Gvk3j}yeY z`-8_eiql0SgOwd|?0v;xJ-El+NVrw6bGN%`z9FOj6rKsDn`Cwd$0MQcL(Og)5$%j8d-K-_R3eU{hJ?3lzZZ~LaZ5M$1tzW)` zz{7pGUDH<%IEwsBqu`-tw;FI#tZUz|?c&&z!^d9sEhOXNPi)y=Zl&p+Ui(>C+mnsmTkidCp)FfjbTW8+qmzQQ&f0lBW*&j1M;Ix~Yn>yP$ z&fjO=zg=FZEf6eW6Ujs)j=_P2-S2LHXMex<^wh=e=(Cd$J@{}BUfrAT3Jfe22#tzD zJW=NA-D{`4T}6W}t=t)&A1)AIy#J~_n;Z=&nCXiV0Q1eb$J32c>50*P9J32bx!FKeQ+|1nfsE;|IXy8UU3x>zx zLU>*t4Ls??h404X*s#8Gg}Lk7Z+MH;zJbeWwtB|3Ry=kWALv-eH+PQ@SCK%RKyFOf zo>bs7zq1#9oNbx9vn{_pc#Q`Eq7Ujeow0#Io(8wijBHzm4DUp}CN9O!1z^7vx*}>j zH|RwP?9J^GYDL2$@9!jm{u@hUB%L>S_joHKe(_OliQC?fgrGK6P~EQ%UxCYmpM-qG zn1n2zAIhtziFaOYpqN6dGJs1?VHi`+CS{!LO0n^dl6-4|sG5(-Cw*5`@p&3Mglr(BFk-rRbXDrEo!HipeRoF zN$JS|+-SY9R5ngYv(K&hAE@rlPtXklOg#6UKN|hU6$>6t@5=b8 zun<0&U{>fTus*8Ib-PNRfGZZe4ToW`14)~RUX|5T%C#@|B;Lhn{$G7R%F=Xv_1xGt z7L6&I$i`kdIytyPEU1+Y4iRn2e$l4D&c$`+^@4uS%=8Q6a{agu>uDSRF;Np5ZUBHa z99x%|Os(6p`&mhHTZFtn=X@SE0%@8>;m$l>(l{~t8cHHW-b|!ox0_p&m%$xH@5J#u z>lkeRyp4K|_%m>P1g<9#TOHQnR!r{?WGjZ(oDqZ@F@hHj`D>coknzk!@OBXoxvg-F zzh$y{MAz4lBe3XQCuSnTak}s=ZCBzoW~vDl_~ib^=VP{5Y|$>tn;5|lmxZ-lUhiJV z*Rtn8J!uc6HqGo_^U(JHWh*^y=*!-bQ64haG3IjlR@hvN`}H)YtGYMdwjw7$Y&o!P z5+*tDmm}{+&&E)C8v9WNJ9jYQYTu@&qN3tP8lk-jiS}NAaE~s4tG~u)O&5l}R4M=a z@N$bH7#v1p>~Tuj&S;4gU1ekOn31W{scIgD8{K#peN4kQJN>pZW`GXASY6cif=OXY=<0mPclU+kySy2p@m0pb% z!WQ*P%bU$__?qC0m#UgbIyH=J2uZK2G505?RQrgnTB){(QRHFos+Po0?^sn`Fo;-G z!IwznN5nxELS>ot_%-1Svg|E*88u3wGU(DvT>C}?@O-;J)OGseQfxA<`|S4mOjlR8 zJCnzf;EKUOPp>CgMKroM5_f|zAJ(^kNx*NXTSkWZ>mx>35{DUxI3jsOw5Alf>3LGB zP-Dyl*)MtOEaZZ$IxTd=T5)JKTBB+KuRhZRDxX*qF^igo*f$s(27q+yqroXmRY@=b z8x0=nr%Bk9lo3o(EhXWV%KpwussMWq`q7|~EQ5(o)+H$#W4-RTsOXRIiwTUdazs^b zo>xe@7st|ujvYEbqNB=O`OgeHHq(i8bad+L>Vjw=V1r(#L(KJGz91IRxZT4B#RhI~ zLE1VxbM=iFtk_zv#JcZ92#J_v3>6gKM-j;cTeKy$O#+SH3ecqbtn0|3ce;83|TquP0Zet1UCTN%n(SXK+%P|61;^e39Vqe|gTlWH~1S9Yd zyNudKT^b+$N)+1&;=QUIg>?P;eeWn$#+0LLDQ9FS64c#@&*kWDYEzvk!kA`hP8NiR zSh0(|L6u>H-ydNsLt)U1BmXJV6cc^)-B%@n$8v~$2L~?b>>8Bkv-i^PIFvRnWUP7F zhYdsMai?4#$>f3O)NHvFvw+WmRftYXJ8H7x^g`A+gk*4Tspu|t32_q|7sEb&Zr?&Z z;k!XBr^%h!q&$$i;x}mUOZ7&LDZi;Np@B>M-oy z88W{|0;jvUK7|^5yLz0Y+Hv{55B*MD`brby!RqfRTwdx1?qrq&O>aZDPYZ(Yb9qTa zdEcg3M_U^5PKnir!y{-smFYg7^4$@eeUqRak7BNN&DFMe@~-zKQ?V$?7uQqdL)xuA zroyTmA`K1I(gTF7al5*ByBVtCx_>3(-$~c2OGxRKWjUEi009M7-7HykpD}HvCCSz% z?+WJB8-|y{4||*-0~Kgb1(eDr$np_<=L#8v=Tq!JJIJ42)JX)TbK{@aG2+UlZt_`x zHdq~iI-p^KF|Q^;a+Q?X5_$Wdad8U+xxryE#}rX@)MUiyKk4ff(z0!VOFjdQ*4N%l z#1R`;6id2@v^BDkZc0{Jn1%1g*)iL;pt}17P8>Vh_+S?94a5L#ok%yfGNRaebJd$% zA9V3~{sP-1God!v@ANqzrx@*ZUj`#l18&g#IQf%gmn7^D`8lyf10SveX;nlnrUycl z>B#Z;hrFQGbj~>Kf8t7GX9rr&zCKRl#o-$SV*=JKT`{PP0)0x`LW6w zjjoq&F}!#;sRAS8otvHP)vtJePr;Hb7Fz!4tru5MH9s2rquTb;QnW;|dqE#xUjb3q zsW?lN)SW_1fjoRY#{rFZz+Mm26K`mo<#C`zox=2U;^t=z6POLD-(dFBaWq^nuRcId z;+omCh(x~E-Pl)74eE>!xFTm6&+ll8!^28;lKSaa5zPeC zj#7v-D#F&esPZd_3vox zQ66F8*uug>j+HduKdqL-@G{c$XpM2#k0Vid74PcMG0<0PyYta`7P&h4MF5RRuL#q? zM#BMg2U~tFRax$JwO^Y?Z0b@K#Ku%o!xrpm%xf-8eS`pf{6k%PF33~WlOCK~?F+A8 zhCQ*N38SL^2nJliQ9|soPD-};8qQhi<%b_ySR_=i|G)96;U!yK@7{ z#6*=5utWnRyHYUtJ=TODfzKYFA%B7f5w>>n->tT^2<_%pd%BDHo5!142|o@`ceP}U zi9jGmY+5t>{G8s68?Ipn$OTY0ke892lVaJ)kQSlxfxG^*M@Ir-@od!_M-dVQ#(45u z-G531mr}m>b(0Gtr+YwNf;7fqC15I?l~#{s(?I8dnhlq*sdD2t zvZ~8W|!?$G19@Mw&38QxQhPX z(h~eU%|Z>E*=mp^FN4y=m48nZvB|t(o)LbCqd;04`^pH8I|ba!Jga?|&JR$9So0UD z9f~e$3nk2U+o>Vvp$jd``E7i@%t7Jiz&!5s-VKk0q73Tq}o z8+yS(&jAIWY)Y%7N_^|$KU@;RSKG>KIi=Br#D2c+i*JWJN1R;nZp2Qr@;raow4RH? z<2~cy_vB&X*(Z10AWH{m;vl=|73LQK%BzEiwJ6@C{0ca%P^`85$^_S$;CG7KGwPyI6X91$;Ui|N)~uy zH&jTw{QKNANpzhJ<(edlaL|QGC0mYam}OS#;_$nHs?zvx)GX3Q9Y7l|;iWwjwBmMn z(r(7)nR z6SU_WIF|I*`U#owJ3gc@FkNn&2q|dL$*{u+`AfJb@#q{_HeR~3#Nf;ufi(^JsOHDL z7oSS=3$KHj>)s6TEH^L%tTQFFhk`1t>kLR|5g@pPR%(xMp5V?|5)MB3mQ%g_{qO z&<{ufiakhc>O>{L5HpPkXh$4`vB(CUg^HCkL4o*8vrV0OYne1DvETLu^f)(ZX=D>Lv^;6g(Ekam=0&c4 zP3WW?kM|= ze`rYUnIz)%f9-nKh^>TME;Y2^@CY>v{O~|@Y4aC(G}u%;JjlL{S{U}&*P(TCZgz)6%&);McIVv%;arv+K;$3X`nh{3R4i2_*DP-P}e+9XgL*TNQp zoh(g?c?7c1b@qDNITd3|zfHgV4;<|p%Q>6s5!6^CO!0@=Ad?zWG^FFhg<=IXB(|v+ zeaAr(S^$|rAtg=4p!;yP0e!;tOqsR{1Sz>4Mc+r|vS$;fKW=Osz*3!X`b0h!(PYDl zwHP#!)OymOs62}O9*cXxunt<3D2REw81V!Ou``M2DBc~V%7 z&MjaLKj~d^)#v{pSE$AuG>Rz0;hV=S`eH&t27BGn`h6Y#4R+D~{A2$yEFARudZ&@y#+Z{HFNst<)4=;KI;U3u^T8@=peXWDyvoSYqXbP^@BeMjn`6aZ^m% z53;tpH@E!X*Y0V?yqL^%1=xon1wu6K)+UTa9K1oRx|0aPtynWoCQ^x7gpX;c31vtx zq6%r6L!mnRO=ik!6T#4{U!MnD#EARNP>5#%>T_jqNOVj#D*#9Kti#W>hT6hvmCQe% zG%>eTiP0jIgy!Y%Z$fB5&k0Fw;f7GJDY)Csw|WJwgxWlNXWq;=`9hO>Qx>mD=~42Ie-AKS0aN9 zPUlr1_5T8fMo$V}C`YmOA_6(O{D32Q|G~8q>Q5)*poRC)rhM0UTgk1eAp$J z0K}%lF*Rod*98DOcFgXLM1@A}3-&AuUM0!-k%gz+9X{j>+*X)lZsX%blPC{G2olw_bxJnjM zPyW|YH=*$VpCfdhlyIxkbE3>s*f}}*IB){bRHX+^6I*F-P{IHC-(KA*bP;O??Vnpm zUisE;xb3Y-Q@|tewNb+9W^Kc*JOuFi9|ppr6Za%LbePT#HzFJ77G9zj$09{215$If ztyFJ&A5-yoAHACiBlKM&L2R;=67PmP=6OgO9N=%1%a4*f)O`eM8-lc5$vp`RwR9&X z4xfX>x#xz2Szt!Q5&8ZxtBB089lrne>2O}?M%n6>WuW#^H2hntZup_bC7E>ua7jjw zE}R>!xKv~^AhEiHqaBhXER|hZ&y{-_I@h7NLzBVWHf*? zgLaZC*3$bI5b;oBwEb637JY8Wr`zhL`L%^8xggl-=@hpBZgvRvEU81F%{%?~iM42% z1ZjFo+X(x}P&qFh;xe|lrc9?zrqZ8Iq(UjL}k z)Ja@8GU$+uWnjT{AXHFnHo5K>eV7f@SyRq1lH|{#dL+@1_!t~Wr=3bQOp!CEk!ON7 z$kdK^-z`v(N_`OqVr;!BMwI(`t81&*R7n903kxVs(0bbYQsCH!@f`3{Ll2*nXEGcZ zLTFVkrRGML=Z*iRAKf*wC5=`PxcK(t7P-pY7XW^kT?N8oQz%w(eh(31kLc!+F!3`o zL;!0!jlKJ~^YF}h8Oj;Ay}@`6iadcA@QNEHf7OAJqah}Px=Gvfn`*))?B^Hp7jaKA z_nc0626~Q+%t-K-*b{XUTe*GBQZX#ohK=b!Gy7GyqfV1{P;;KOSytMZ4RDHiLrI=8 z^W>Ll$d8cQD!;QhOOYf+LOl9sjC|;8u)hgFEFuJe44E?f8K)-P!_2CW^9Ai&+eFI; zpP$(gv>63kKjQMc_^G##xNJq^adXuFzdg)7ZDEFEtXIM(E~1`qpu|wz>Ca)BqfE>@ zo@QsWIyRIS1`Dq?$WaMF=qm|NyE@$nOU*>3a>~S*ZUQI%fiDi$=Req486L>+d8mb{ zjnp8{dp-FE-8k~zT1ZnBGkBjdgo~yHLTv=2#WNmbn6}}^&DAtRwa8_$U_|?u;dM_H zjxL4rDbE+RM*pzC;%%ODRqBfavA7rNdR_LVNbnRoV*k;QhahCErH&Uxy)Q(})SQ9= z8(}@-RbKs z`PLVZ=6%Az0QY)PVv3HcpIbqm7#vuMk|U$0Ag{piyI) zq2Aw$M__)EP16ciI=Rm6@B{ z59igUIS#|!%!bWjM*2OAxmx3GPg;Dn^uL$QT^)t4E5Tx|ZK1F70Mn)jTJUOrP^Q)R zOOuSCa=vArhJ7Ch3ZOXzgORlYNgq&Q4YslgxMmDhezX+&y;s7l$LGWLhAntx$}*M} zYuyd8YWlC?Uj-odaiY?mvg+&ftfOnG6=$5ZaF^+P9@30ispOLvHSO;s)PZ1~w+(UL zmC0#S?|m64W2HLGn7;_>Krmf_N;PJ+%``>b=buQvJiRlovps^SPk&dxOLuLE_(ev zY_5kho;No)S@y|sJO9jzvr~)v=0zHCKK@x=Hafq!D6Fl;6&G0~|KZx)X=%eS7ZT_@ zw>tZJ;*6fX8nI|CO^Cq9rrp-ME(Rw|)1+Ma%aujBR3+KHAbgX|j2C&)e1JE6glya4 zuOGhnn#)K7L zZ+td-=<39xCa`KBvtvi1s1^|2A$T@B2mF`%_?%EO1C3)w8hii9wSj--!F2Iw8sq>q zlTs|EOz-P)+LK5 z3tOZN#mz$UdPp*ZD@bs2Ha4n#f@^K9qqlqJS)87%_|NQ#k$rEKrBLtHda?@mKiqgn zM@P*NpJs@6+zKZXJDZV_(f?xXy~CPpzO~Um zdZ-El0s;yIq)R8EN(qFHNDIA&4k9h|-XZ4+@4LUVuj{w>`Hp`?(8)aW%&c;+weFc| z$}=ciPZ6?6CH$K3iY27$d|IhjEhRugIMe`ctp*z%SA7X)UG+T-@1I#-C^cH!mD8W1 z^f5K#+12x+17FH^a_f5eXtM_H{T(i3McoL6OTbk9=74m`cnV84z` z`orYygInHM*M}}^6QQt57xoD|$pzDO<)sI&B`yc63nqEr<9vga2T;P_?5`E87Ahwd zuav;Gpc%460Y25s!!Ma+pG*n28Yvi3!~q#AXm;b_yHdStzB-hYt+>PXYzT-uK8qjL zCfg`nbU}6C11pKI?!@n&Jq`|i>1 zN<#s0;<^LTlFFydj%9b{NTOwlko+flp?7ra39SOz3zs<>=$@bC~7xYm#_E44QDZl z1E**<8z$LBJ}fB%y7=~PZMcQdAGiXr0(Z@>Y#n&se+DB~3q1Vc`TiWez(h#F^rIxV z1BT-yhg(F#SZ%#sQsN#bcJKb_bx@d$pT+un&tqA!!|;vYZFbXUE6)?8js=s%SHqKK zj_yf^S*&l;1fFY8)5U(4xfXM7YG26XXO?dLuVEiQSMMjc#n%zXc9pJacFuG;IXPt~ z3_VnHaow~u*F|gqcuW>BqKDz(KPLy$k$YHjUUs3I?$VVxdeD@ZH%H0&XHSlc#_W;m zwjMWOykJT-3d%U6Pn37*`ab5J|8S0T%U$Jm0{Iol5B-}8R)2aUuJ?5^R{tfxok<=l zMK~ockHf$4<6&zD#ybt-Vbs4K{-U6Ipnm(&P(HNj+dWg^Z|(2$ZSRC%_%vozdX@gV z>+A0!n^Sd zD7K88y@hX;NxjXYhlZZkNaoW~*60;0=*u~hD?cm+trlQLA%$TltjkL2Mn;eyn)S_Dz zP+E~We7nIPj4Y#6fCNEK>1IdMr%rjfx!L*F zUOPF)1N61~@>0MCF!a(ZKsJC+MADMo>73p6>_Z=YEgA^DRFW5m)^@8$Nli`u4!%aG z0A`Fov}PG7&e2@x(R^j*$GL4%;05X04L1m)mFIoswcBG(-0|49FGZE*6~iV zE|fZ>K9wEfiO!}>JaPP<3rTUR`a%J`d*>Hz8p(Nm1A{(~i7n>pRp){}W8#kSQc56m zZ`;G#T+)$7hdH%}yw#^W1^BdZX>@66Y2#LRs*)ub-EN~j&aH}cX3bIRnalLFukbMI zKCMixWXZ4iJ45ygG33+%#f`PYUfu6#o4{mNX10#92DxO9j{{t0IH8f=xSzO3PYkIs zxTrp+^mk4+vNpc2K_f3XsQXwDZ=2@P+H3L zH{+j%+q3Ux8suQS-y&#}6@m@7M4uFdz>AMVzQte7``djd!^oV2?E(liB`i@Y2hT94 znm;_ODB|lQy+!SDTP-9m)BTS>{q`Zg)+k(ZQ%U#Scu1v32HbF(PF|;BoKm@TF*L=+ zH87&;va7E90zoY^j~V-eL)dmd^J!l!aEK1olm2IZt5QV+_O4|sb=Vx3Og9eqx{8=c ze4c#N-bEOFcmETUDe+IXPKfJc9PZUP*TAU*=dj!I;&e)Gaa)?&cmjvdz}|2zcIfw5 z@9qnp{rGbrklw4T%xUqv%!*5|j4EB!!L$U@V(bC+!KGy4LGn%ozFGs3#2b7cX3ey- zyt6<15N>_+m#Md@xwQJ^arMrtVy7TY-IAiBRHRX(Bm0K?QVgc_q+c$02?q06YA&fh ziDC{mk=pLZV9Mf~n?*;~WOj9`cT6-1DYl2%_}6Cgg!Q<5O6|OB?$G$kQ(do9;^C!n zX^U!&isAEs$cW`=sIMmgHs#66^71y9%lbpRYPotzC>){(*kCP8GMiu8L2TKq04*lrkx4bs0T`gU+uye4rlT_f~o=dRm z!*cKPiGk8xi;>~s*n`-s$-q!SovAc;tt#=7%_}Q_$iXc$;J=FjGY2rbPFli`TYgPp zvhu8ZX=GB?j{Z#I*N8)!3qcm?xbXtwk<1u3!TV&@cIc7ze*3UL#&Xl>w5$cRa| zt2M4Yq9>+Lo}?uYmK|^J5jfeD!xv~|h)0Ki%q`$}%>_;Y$sTFWll8UQ^cW}gu4CLD zA>KP<+^w0I>qFdZ8yOjSdnYyO?zI{Q1t#Fu+<@F3y8JN4q3bw0bEH&mm>*5dZ~)uRVm;_)JWktY~H* z$8HEctXh{n8lYY{F&nmx^qvdaQ+-(VgMP%i+W6tZrD|i%<7bZTtE<(A1AmxGPI^@j zn+A3Ew$zEPx4kGyi)zsrbg9dG3ShzX0MPsQ)}Hj?!qxHN*4vkskVtKbm0P4nVKXnZ zJGq?l^YSd=E5AbuIIV#7zwfEFa}oGYdz}QO^<`a&f4!c8Eq0d8cD7&4=d`LbQNk6r zrT5-((=t6>KiegLDk7*Bdk_xs4*%OHuPGw><6S3JNcfftO;)S~l}2mT3ecaPJLklJ zi?cHnaG6hmPEI!-un?kUhT-^%+@-_zOFt{}D{*rR7PYg{27tqufJ%Lo_f?IW(cWn1 z4BkAwoL0q$jNPrQf`}h-h_MUk=nwTU%-(c0vF*$Xu7Zvyk`5vi`y-xof=x_&O_UO zs;@h!xak~ST79|>W%v0oXn$!G2RgHJEv-tt+4+RzKlLtizS_7$nRb_w|8CwW7K3py zm$NXg&9NgIzm}0sr1XvavU%!CcE`#(SIdr{Z40vGDq=bbu!@EK8dcNchpuL3X7_C-uGMSD9ouyi z>4(}T+G>%inEz%`((7G~aS3Nen7b3rCpUgtk0*4Re_nYO|4HM{ zGrG7YS!pS^n2{i_NW=Q9YA+h~Jsw7ug{WqKa`BZOG1te*BJ(j|&rc1&!|X*8+}7_5 z`(OjLH;3-LGn-xARWB!5R@cfOQ>%k2N2Rngt42Mqi(L(g7ExfM!EwpK3iBi;DxPfg z7d1Z1xxIJWT*y6@0O*yD>-e56GXawj|D$k3hGm9iaZxPN)gup8RJZWdj8Bvh{16T>ZM8KQJ1huw_+wF3)m>p@<=*v9@GgtL;Y4saqJt{Zt+M)lbkCYXgDugPl zzbripi%6VBDxe@GiSN`iQ{Fq`muy_@c;eHr3B_e#l%V=RUlz)<1sR~`{PX<~6W~kh zZr*oe?n!F6<6+mSu7jat&q>XP3i(jt8$1x!qvVK}N$p2>mnjo>R@WO0z0h1L87M?L z2QQRsh4L?@gK|1o-U!YbWz*nPJITS@+^qYYH4K{ZEx}Tz{7s%FAffS>>$eJRdYnfR zZr2R4G-abi$34W{`{>8MRM`d8i0rahEmg;K-0~c{kq`lXIgriB!0n)5CRL00#&0!{ z@hv2-E;jVMMU053X^vB8;Nz9ADw+#|p`m|8!1siR7B!O$duC7Vr@cpIucNjhHKc5|fk zmXrh{PK!bln2--b{=xG%c5)KUY&qt=c2(p%y!~@WQZPF&|Mmo?#ICsr%8;BUsOo;U z8*}{&y5h)e*j`PKarh$$dIqTwv{?kviSBsRjKeW17x7qG{U9~&Le~Idzj# zczG_LTa4Xrqh?}O%Lv`clL5Z3OO^34<}UCNFJ`W^#kvh_NZCoZI|nj)U$uL#Zdh); z>YJ~2#0u$UrK^Ji+TdeGjLR|QofJp9h#?)|NN&(|2&1b=wj4x%hI-w zZmr5j-{t72gfbECEF2cUBc(Wh2^iXk;(#f{h3~ojsi&!ZiHccrIZ{gWVA7!V-Z}wk zHsH@4USG~ar>frU+G}0gd)gjdE5F8s8{@_&uAPL9C@zlfSfvq~w|C<5I|Ph{F;htPw%)Fv+bMS z3dJn-VVI&~{yJMPRY0T%F6CeYe@MpCYh_&^yi*@NebR40QTAOXkP+xnHAFnAPHV#f zk((QB7@;JhW5mD^kFvqj{=))Co}b*RkM@i_uE<8a(9sYcp^T1d2-) zImoM`m7$!@W{MuYZWZF4QKa+DjAyA8E(C4*${Tc_9r3-wr5CELNQa-gDXxtcAg3!u z+68v3hRgmdl z!_e7((eH@fnHS(DhAZ33=~b01=ed9f=szPppku5>unZR%t7d1ERR+KGQ`iBVo}LJ? zoYsTVrSow8){!q5(HlZx<0<4Os<81vhTpAdg}(-9BOyy3U0F3(3$&p+kuf~EYzAsN zZ>}Z+^KWsvo<@&DdZ12M{kqz~6T;6L%J@tMm3aRb;Khs~r4+4f9tIjsr*QQX(;v%o zzMa=fpWqxN297y(Y%&8nqGP{kR(A8MQ||CDLjnyS8sK?^`j#!E65%Af&gDA~=3Bn@ zw7}1TSSWH0q&QQp`?*-4C3Gk?YDby=9=u1|?rkGf=%PrNdZk^Ty365Yr<$&TGLz2x z)qb_fW!Hg3w0mZa<;{{GIeGktci+bc!xsmHB^QbCN9_QVm{MbPW0t356H2NcgnYZ) zTc`uGAa6Z(rcu{H3)`mNzj#N1p36`B=1w$NIR|s7r)239+M%cL+S+K9GnFa3F3A?tuH$^!h_TC0b=Hhs#wYtn zYe12AVIdFsavo*e1xr2pBKT+CD3`ky&~3kXu#UMP^kouXepC1-^@qcuSY*@7(r?0U zaE)Y6K!Q@gBDGbsgjEaLPZ%uXUFYVo^~Sr(tF`a>YN2#HIB zkh5~RR+TorL1e5{wGbxrHVkpHD$O1KapK6J&DYTWzc1evWu}C;;>^9@O+a4c+#3#^ zyAa)j=?Uafeiyipfu3-^Cznoq#|II%&gCKm3};rq!H$n>Z2(xSy!FN8VT;gC@miJJ z)CKP)S84QK^?bcaRfe{J7`sLhGA1BHM8u;_ZhJ1nxlK>4)^8Ve-!7`G*+T8DgfsI& zY4dh|@)1hz?iNbZOT`Y+W?;KtJ?1hB7d=h@*~h`E-H~`{kk~A<&+&#_^+uwFe zUP82stL?3PCvQAMIE8S&QMG$-83Oy*@m-8d_8|QTg}=&;rEA&68AjliapKmU$)ul4bHS$;Iu!NK~kJ z`Q=yDn;razWLfDF`tJfOyFAp0$3P+l*TyT=eG1aZaAE6t&g@aM3Z#%|>uJil)%|}; z`HjE15C@LdN6b4-)&HH~rdDsrpNp%$ZY4+=YCZWf&ZYdQO7ZdIin=Tmgtn-NhpJHK zgEsD#kWa1uxQPU43Uc4=yedyv_|Vnitl(4#kGtJaZgTdskyA(is8z7?Iw1ikx0vyj zH+Fb6?sdGozog}b0^LRUn!8TX@b5zm2NSN`kL-1_fKLb)IsE3P}!qTWEk-Vy&-62yywIz!pVC}q~;0jmhN8wy+q&^?Fj?N&XRk!fY z-|)L2jVFK$Oh?B?G0>vDs5XrzW^hynSB061n%dU%9TE~p84P=wnk3e|wK8gCmPL_k zJQ?cUD?DiUYi8<5c(icbHH;32wX6lrv%ui-iRW~6gu$xIZo?HiF!Q+6&+VoeixoPz zb`jO*KnYyHlRlyEp=vK`WrI>Rx`7$c&0xD z{(h&cwnRR!qWuZh_nS778W}sMPH6Y&m=bO=F^i2wwM1hr@e_G_dUIFmEPIYAH9K09 zgj5=C9jjlcvs75W7_IRV+Bkk#fQtE*8MA5lb5hbxE?F-A8uD&3kBV;*Fv3>{_1UPe zx^X({U-|MpBXHqy^chAR59z7b#v^04bQ*T`3~04{Zrj_dL>vRVDnV|IE2G2FZ+1ZT zBR|9Dc^iR{C-FddFzZ`Y1`P`ps|~L09oGYib|l-kn+&sNnPM*-qz#UbO!I6OOBe)W z8%(9wqT0|2u3z|@tnqPba`9ZsCUh#$*$nar%CWc}X|ufcEETki{&z{GU|MH$_ykr2s;gCsTfNBm?CmL6DIz5o#AXNI&YYq0kw!Za+V`R|D$bp>@Q5!zjG~3q|`b*y40SS$i zsP^1@(#g2yfovA}q(LnYK#}{M$mJak8}~mutFGO`ZHfIJ(7Rcymb6-kw{r6;jC zm(cE>HJfQq(Pp8rfs+~!iJCC}rnUz!Pyj|6{F{$F;>#+U5~!s1k1!k$6b41NY%dM^ zQm24GS=!rq;gZ@iN1Y*L(o<#L^J(sr9?X(W22aO*RcEGq)`#xJu;J*Vq7|&!!{&dk zys=uv%{aSzjyRoPLAn4j`KMfQ@9;mRigt4jj))mNb6=(RY8I7qdzSPLcl9j49rn+j z!zjFLeBJSUouvzKKncmpM|m7?G*j

~&JZQl=5_-ske%rM$GP8)(j(6xjfx*4nru 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�=)H^i)YcbRk5YzWk}zbbGczO#vv- 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 literal 0 HcmV?d00001