From 1a99a5919f740a0ec32d18e3ac97d84313c751fb Mon Sep 17 00:00:00 2001 From: KimYang Date: Sat, 26 Sep 2020 22:33:18 +0800 Subject: [PATCH] add MindMap --- .github/FUNDING.yml | 24 +- .github/workflows/vuepress-deploy.yml | 48 +- .gitignore | 120 +- 408Exam/README.md | 2 +- 408Notes/.vuepress/config.js | 396 ++--- 408Notes/.vuepress/styles/index.styl | 4 +- 408Notes/.vuepress/styles/palette.styl | 38 +- 408Notes/ComputerNetwork/README.md | 14 +- .../Doc_0_0_计算机系统概述.md | 48 +- 408Notes/ComputerOrganization/README.md | 12 +- .../Doc_0_0_数据结构基本概念.md | 248 ++-- .../DS_0_Introduction/Doc_0_1_算法基本概念.md | 266 ++-- .../DataStructure/DS_0_Introduction/README.md | 22 +- .../DS_1_LinearList/Doc_1_0_线性表.md | 84 +- .../DS_1_LinearList/Doc_1_1_顺序表.md | 406 ++--- .../DS_1_LinearList/Doc_1_2_单链表.md | 366 ++--- .../DS_1_LinearList/Doc_1_3_双链表.md | 74 +- .../DS_1_LinearList/Doc_1_4_循环链表.md | 78 +- .../DS_1_LinearList/Doc_1_5_静态链表.md | 62 +- .../DS_1_LinearList/Doc_1_6_章节总结.md | 86 +- .../DataStructure/DS_1_LinearList/README.md | 30 +- .../DS_2_StackAndQueue/Doc_2_0_栈.md | 52 +- .../DS_2_StackAndQueue/Doc_2_1_顺序栈.md | 86 +- .../DS_2_StackAndQueue/Doc_2_2_链栈.md | 40 +- .../DS_2_StackAndQueue/Doc_2_3_队列.md | 42 +- .../DS_2_StackAndQueue/Doc_2_4_顺序队列.md | 108 +- .../DS_2_StackAndQueue/Doc_2_5_链式队列.md | 90 +- .../DS_2_StackAndQueue/Doc_2_6_双端队列.md | 70 +- .../DS_2_StackAndQueue/Doc_2_7_栈的应用.md | 298 ++-- .../DS_2_StackAndQueue/Doc_2_8_队列的应用.md | 54 +- .../DS_2_StackAndQueue/README.md | 30 +- .../DataStructure/DS_3_String/Doc_3_0_串.md | 50 +- .../DS_3_String/Doc_3_1_串的存储结构.md | 58 +- .../DS_3_String/Doc_3_2_模式匹配.md | 52 +- .../DS_3_String/Doc_3_3_KMP算法.md | 112 +- .../DS_3_String/Doc_3_4_KMP算法的优化.md | 28 +- 408Notes/DataStructure/DS_3_String/README.md | 30 +- .../DS_4_TreeAndBinaryTree/Doc_4_0_树.md | 60 +- .../Doc_4_10_树的存储结构.md | 6 +- .../Doc_4_11_数和森林的遍历.md | 6 +- .../Doc_4_12_二叉排序树.md | 8 +- .../Doc_4_13_平衡二叉树.md | 10 +- .../Doc_4_14_哈夫曼树.md | 6 +- .../Doc_4_1_树的性质.md | 32 +- .../DS_4_TreeAndBinaryTree/Doc_4_2_二叉树.md | 40 +- .../Doc_4_3_二叉树的性质.md | 36 +- .../Doc_4_4_二叉树的存储结构.md | 64 +- .../Doc_4_5_二叉树的遍历.md | 80 +- .../Doc_4_6_二叉树的构造.md | 70 +- .../Doc_4_7_线索二叉树.md | 88 +- .../Doc_4_8_二叉树的线索化.md | 28 +- .../Doc_4_9_线索二叉树的前驱和后继.md | 8 +- .../DS_4_TreeAndBinaryTree/README.md | 32 +- .../DataStructure/DS_5_Graph/Doc_5_0_图.md | 10 +- .../DS_5_Graph/Doc_5_1_图的存储结构.md | 8 +- .../DS_5_Graph/Doc_5_2_图的基本操作.md | 4 +- .../DS_5_Graph/Doc_5_3_图的遍历.md | 4 +- 408Notes/DataStructure/DS_5_Graph/README.md | 12 +- .../DataStructure/DS_6_Search/Doc_6_0_搜索.md | 4 +- 408Notes/DataStructure/DS_6_Search/README.md | 10 +- 408Notes/DataStructure/DS_7_Sort/README.md | 6 +- 408Notes/DataStructure/README.md | 28 +- 408Notes/OperatingSystem/README.md | 22 +- 408Notes/README.md | 364 ++--- 408Notes/contact.md | 20 +- CMakeLists.txt | 24 +- CONTRIBUTE.md | 84 +- ComputerNetwork/MindMap/BookMindMap/README.md | 14 +- .../MindMap/CSKaoYanVIPMindMap/README.md | 12 +- .../PPTMindMap/CN_0_Introduction/README.md | 6 +- .../PPTMindMap/CN_1_PhysicalLayer/README.md | 4 +- .../PPTMindMap/CN_2_DataLinkLayer/README.md | 2 +- ComputerNetwork/MindMap/PPTMindMap/README.md | 2 +- ComputerNetwork/MindMap/README.md | 6 +- ComputerNetwork/README.md | 12 +- .../MindMap/BookMindMap/CO_5_总线.xmind | Bin 0 -> 104043 bytes .../MindMap/BookMindMap/README.md | 10 +- .../MindMap/CSKaoYanVIPMindMap/README.md | 16 +- .../MindMap/PPTMindMap/README.md | 2 +- ComputerOrganization/MindMap/README.md | 10 +- ComputerOrganization/README.md | 24 +- DataStructure/MindMap/BookMindMap/README.md | 4 +- .../PPTMindMap/DS_0_Introduction/README.md | 4 +- .../MindMap/PPTMindMap/DS_5_Graph/README.md | 6 +- .../MindMap/PPTMindMap/DS_6_Search/README.md | 4 +- .../MindMap/PPTMindMap/DS_7_Sort/README.md | 4 +- DataStructure/MindMap/PPTMindMap/README.md | 2 +- DataStructure/MindMap/README.md | 6 +- DataStructure/README.md | 24 +- .../Src/DS_0_Introduction/DS_0_0_love.cpp | 174 +-- .../Src/DS_1_LinearList/DS_1_0_SqList.cpp | 446 +++--- .../Src/DS_1_LinearList/DS_1_1_SqList.cpp | 428 +++--- .../Src/DS_1_LinearList/DS_1_2_LinkList1.cpp | 314 ++-- .../Src/DS_1_LinearList/DS_1_3_LinkList.cpp | 238 +-- .../Src/DS_1_LinearList/DS_1_4_DLinkList.cpp | 262 ++-- .../Src/DS_1_LinearList/DS_1_5_RLinkList.cpp | 102 +- .../Src/DS_1_LinearList/DS_1_6_RDLinkList.cpp | 138 +- .../Src/DS_1_LinearList/DS_1_7_SLinkList.cpp | 108 +- .../Src/DS_2_StackAndQueue/DS_2_0_SqStack.cpp | 432 +++--- .../Src/DS_2_StackAndQueue/DS_2_1_ShStack.cpp | 354 ++--- .../Src/DS_2_StackAndQueue/DS_2_2_LiStack.cpp | 258 ++-- .../DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp | 232 +-- .../DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp | 238 +-- .../DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp | 240 +-- .../DS_2_StackAndQueue/DS_2_6_LiQueue0.cpp | 248 ++-- .../DS_2_StackAndQueue/DS_2_7_LiQueue1.cpp | 260 ++-- .../DS_2_8_QueueApplication.cpp | 266 ++-- .../Src/DS_3_String/DS_3_0_SString.cpp | 700 ++++----- .../Src/DS_3_String/DS_3_1_HString.cpp | 54 +- .../Src/DS_3_String/DS_3_2_LString.cpp | 50 +- .../Src/DS_3_String/DS_3_3_LString.cpp | 48 +- .../DS_4_0_BiTreeSq.cpp | 62 +- .../DS_4_1_BiTreeLink.cpp | 276 ++-- .../DS_4_TreeAndBinaryTree/DS_4_2_BiTreeF.cpp | 74 +- .../DS_4_3_ThreadedBiTree.cpp | 484 +++--- .../DS_4_TreeAndBinaryTree/DS_4_4_TreeSq.cpp | 72 +- .../DS_4_5_TreeSqLink.cpp | 80 +- .../DS_4_6_TreeLink.cpp | 66 +- .../Src/DS_4_TreeAndBinaryTree/DS_4_7_BST.cpp | 166 +-- .../Src/DS_4_TreeAndBinaryTree/DS_4_8_AVL.cpp | 74 +- DataStructure/Src/DS_5_Graph/DS_5_0_Arc.cpp | 106 +- DataStructure/Src/DS_5_Graph/README.md | 6 +- DataStructure/Src/DS_6_Search/README.md | 4 +- DataStructure/Src/DS_7_Sort/README.md | 4 +- DataStructure/Src/DS_HelloWord.cpp | 16 +- DataStructure/Src/README.md | 48 +- HelloWord.cpp | 12 +- LICENSE | 1322 ++++++++--------- OperatingSystem/MindMap/BookMindMap/README.md | 4 +- OperatingSystem/MindMap/PPTMindMap/README.md | 2 +- OperatingSystem/MindMap/README.md | 6 +- OperatingSystem/README.md | 14 +- OtherExam/README.md | 2 +- README.md | 358 ++--- deploy.sh | 48 +- imgs/README.md | 2 +- package.json | 36 +- 137 files changed, 6955 insertions(+), 6955 deletions(-) create mode 100644 ComputerOrganization/MindMap/BookMindMap/CO_5_总线.xmind diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 8c614c1..2b96980 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,12 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png diff --git a/.github/workflows/vuepress-deploy.yml b/.github/workflows/vuepress-deploy.yml index 8134b28..ee4cda5 100644 --- a/.github/workflows/vuepress-deploy.yml +++ b/.github/workflows/vuepress-deploy.yml @@ -1,24 +1,24 @@ -name: vuepress-deploy - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build-and-deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@master - - - name: vuepress-deploy - uses: jenkey2011/vuepress-deploy@master - env: - ACCESS_TOKEN: ${{ secrets.DEPLOY_TOKEN }} - TARGET_REPO: KimYangOfCat/2021-CSPostgraduate-408 - TARGET_BRANCH: gh-pages - BUILD_SCRIPT: yarn && yarn build - BUILD_DIR: 408Notes/.vuepress/dist/ - CNAME: 408.kimyang.cn +name: vuepress-deploy + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@master + + - name: vuepress-deploy + uses: jenkey2011/vuepress-deploy@master + env: + ACCESS_TOKEN: ${{ secrets.DEPLOY_TOKEN }} + TARGET_REPO: KimYangOfCat/2021-CSPostgraduate-408 + TARGET_BRANCH: gh-pages + BUILD_SCRIPT: yarn && yarn build + BUILD_DIR: 408Notes/.vuepress/dist/ + CNAME: 408.kimyang.cn diff --git a/.gitignore b/.gitignore index 56ca25c..f856250 100644 --- a/.gitignore +++ b/.gitignore @@ -1,61 +1,61 @@ -# Prerequisites -*.d -node_modules/ -yarn.lock -package-lock.json -cmake-build-debug/* -.idea/* - -408Notes/.vuepress/dist/* - - -.DS_Store -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old +# Prerequisites +*.d +node_modules/ +yarn.lock +package-lock.json +cmake-build-debug/* +.idea/* + +408Notes/.vuepress/dist/* + + +.DS_Store +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old dkms.conf \ No newline at end of file diff --git a/408Exam/README.md b/408Exam/README.md index fe9fbaf..6027db9 100644 --- a/408Exam/README.md +++ b/408Exam/README.md @@ -1 +1 @@ -# 408 真题 +# 408 真题 diff --git a/408Notes/.vuepress/config.js b/408Notes/.vuepress/config.js index 23bba5b..0637561 100644 --- a/408Notes/.vuepress/config.js +++ b/408Notes/.vuepress/config.js @@ -1,199 +1,199 @@ -module.exports = { - title: "CSPostgraduate", - base: "/", - repo: "https://github.com/KimYangOfCat/2021-CSPostgraduate-408", - description:"2021 CSPostgraduate 408", - port:4080, - - theme: '@vuepress/theme-default', - themeConfig: { - logo: 'icons.png', - head:[ - ['link',{rel:'icon',href:'/favicon.ico',type:"image/x-icon"}], - ['link',{rel:' short icon',href:'/favicon.ico',type:"image/x-icon"}], - ['link', { rel: 'apple-touch-icon', href: `/favicon.ico`,type:"image/x-icon" }], - ], - nav: [ - {text: '首页', link: '/'}, - {text: '数据结构', link: '/DataStructure/'}, - {text: '计算机组成原理', link: '/ComputerOrganization/'}, - {text: '计算机网络', link: '/ComputerNetwork/'}, - {text: '操作系统', link: '/OperatingSystem/'}, - {text: '留言板', link: '/contact'}, - // {text: 'GitHub', link: 'https://github.com/KimYangOfCat/2021-CSPostgraduate-408', target: '_blank'}, - ], - sidebar: - { - '/DataStructure/': getDataStructureSidebar(), - '/ComputerOrganization/': getComputerOrganizationSidebar(), - '/ComputerNetwork/': getComputerNetworkSidebar(), - '/OperatingSystem/': getOperatingSystemSidebar(), - // fallback - '/': [ - // '', /* / */ - // 'contact', /* /contact.html */ - ] - }, - // 默认值是 true 。设置为 false 来禁用所有页面的 下一篇 链接 - nextLinks: true, - // 默认值是 true 。设置为 false 来禁用所有页面的 上一篇 链接 - prevLinks: true, - lastUpdated:"最后更新时间:", - smoothScroll: true, - // 假定是 GitHub. 同时也可以是一个完整的 GitLab URL - repo: 'KimYangOfCat/2021-CSPostgraduate-408', - // 自定义仓库链接文字。默认从 `themeConfig.repo` 中自动推断为 - // "GitHub"/"GitLab"/"Bitbucket" 其中之一,或是 "Source"。 - repoLabel: 'GitHub', - // 以下为可选的编辑链接选项 - // 假如你的文档仓库和项目本身不在一个仓库: - // docsRepo: 'KimYangOfCat/2021-CSPostgraduate-408', - // 假如文档不是放在仓库的根目录下: - docsDir: '408Notes', - // 假如文档放在一个特定的分支下: - docsBranch: 'master', - // 默认是 false, 设置为 true 来启用 - editLinks: true, - // 默认为 "Edit this page" - editLinkText: '帮助我们完善此页面吧~' - }, - plugins: { - '@vssue/vuepress-plugin-vssue': { - baseURL:"https://github.com", - - platform: 'github-v4', //v3的platform是github,v4的是github-v4 - locale: 'zh', //语言 - // 其他的 Vssue 配置 - owner: 'KimYangOfCat', //github账户名 - repo: '2021-CSPostgraduate-408', //github一个项目的名称 - clientId: '0b51066b027f4cb4a5a3',//注册的Client ID - clientSecret: '4b816edafb10d7e828c0faaaa18df1e7d08585c2',//注册的Client Secret - autoCreateIssue:false,// 自动创建评论,默认是false - labels:['Comments'],//Vssue 通过 title 和 labels 来确定用来存储评论的对应 Issue - prefix:'[Comments]',//Issue 标题的前缀 - locale:'zh',//使用的语言。 - issueContent: ({ url }) =>`这个 Issue 由评论系统自动创建,用来存储该页面的评论:${url}`, - }, - }, -} - -function getDataStructureSidebar() { - return [ - '/DataStructure/', - { - title: '零、绪论', // 必要的 - path: '/DataStructure/DS_0_Introduction', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - '/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念', - '/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念', - ] - }, - { - title: '一、线性表', // 必要的 - path: '/DataStructure/DS_1_LinearList', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - '/DataStructure/DS_1_LinearList/Doc_1_0_线性表', - '/DataStructure/DS_1_LinearList/Doc_1_1_顺序表', - '/DataStructure/DS_1_LinearList/Doc_1_2_单链表', - '/DataStructure/DS_1_LinearList/Doc_1_3_双链表', - '/DataStructure/DS_1_LinearList/Doc_1_4_循环链表', - '/DataStructure/DS_1_LinearList/Doc_1_5_静态链表', - '/DataStructure/DS_1_LinearList/Doc_1_6_章节总结', - ] - }, - { - title: '二、栈与队列', // 必要的 - path: '/DataStructure/DS_2_StackAndQueue', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - '/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈', - '/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈', - '/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈', - '/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列', - '/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列', - '/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列', - '/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列', - '/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用', - '/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用', - ] - }, - { - title: '三、字符串', // 必要的 - path: '/DataStructure/DS_3_String', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - '/DataStructure/DS_3_String/Doc_3_0_串', - '/DataStructure/DS_3_String/Doc_3_1_串的存储结构', - '/DataStructure/DS_3_String/Doc_3_2_模式匹配', - '/DataStructure/DS_3_String/Doc_3_3_KMP算法', - '/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化', - ] - }, - { - title: '四、树与二叉树', // 必要的 - path: '/DataStructure/DS_4_TreeAndBinaryTree', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树', - '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化', - ] - }, - { - title: '五、图', // 必要的 - path: '/DataStructure/DS_5_Graph/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - ] - }, - { - title: '六、搜索', // 必要的 - path: '/DataStructure/DS_6_Search/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - ] - }, - { - title: '七、排序', // 必要的 - path: '/DataStructure/DS_7_Sort/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 - collapsable: true, // 可选的, 默认值是 true, - sidebarDepth: 2, // 可选的, 默认值是 1 - children: [ - ] - }, - - ] -} - -function getComputerOrganizationSidebar() { - return [ - '/ComputerOrganization/', - ] -} - -function getComputerNetworkSidebar() { - return [ - '/ComputerNetwork/', - ] -} - -function getOperatingSystemSidebar() { - return [ - '/OperatingSystem/', - ] +module.exports = { + title: "CSPostgraduate", + base: "/", + repo: "https://github.com/KimYangOfCat/2021-CSPostgraduate-408", + description:"2021 CSPostgraduate 408", + port:4080, + + theme: '@vuepress/theme-default', + themeConfig: { + logo: 'icons.png', + head:[ + ['link',{rel:'icon',href:'/favicon.ico',type:"image/x-icon"}], + ['link',{rel:' short icon',href:'/favicon.ico',type:"image/x-icon"}], + ['link', { rel: 'apple-touch-icon', href: `/favicon.ico`,type:"image/x-icon" }], + ], + nav: [ + {text: '首页', link: '/'}, + {text: '数据结构', link: '/DataStructure/'}, + {text: '计算机组成原理', link: '/ComputerOrganization/'}, + {text: '计算机网络', link: '/ComputerNetwork/'}, + {text: '操作系统', link: '/OperatingSystem/'}, + {text: '留言板', link: '/contact'}, + // {text: 'GitHub', link: 'https://github.com/KimYangOfCat/2021-CSPostgraduate-408', target: '_blank'}, + ], + sidebar: + { + '/DataStructure/': getDataStructureSidebar(), + '/ComputerOrganization/': getComputerOrganizationSidebar(), + '/ComputerNetwork/': getComputerNetworkSidebar(), + '/OperatingSystem/': getOperatingSystemSidebar(), + // fallback + '/': [ + // '', /* / */ + // 'contact', /* /contact.html */ + ] + }, + // 默认值是 true 。设置为 false 来禁用所有页面的 下一篇 链接 + nextLinks: true, + // 默认值是 true 。设置为 false 来禁用所有页面的 上一篇 链接 + prevLinks: true, + lastUpdated:"最后更新时间:", + smoothScroll: true, + // 假定是 GitHub. 同时也可以是一个完整的 GitLab URL + repo: 'KimYangOfCat/2021-CSPostgraduate-408', + // 自定义仓库链接文字。默认从 `themeConfig.repo` 中自动推断为 + // "GitHub"/"GitLab"/"Bitbucket" 其中之一,或是 "Source"。 + repoLabel: 'GitHub', + // 以下为可选的编辑链接选项 + // 假如你的文档仓库和项目本身不在一个仓库: + // docsRepo: 'KimYangOfCat/2021-CSPostgraduate-408', + // 假如文档不是放在仓库的根目录下: + docsDir: '408Notes', + // 假如文档放在一个特定的分支下: + docsBranch: 'master', + // 默认是 false, 设置为 true 来启用 + editLinks: true, + // 默认为 "Edit this page" + editLinkText: '帮助我们完善此页面吧~' + }, + plugins: { + '@vssue/vuepress-plugin-vssue': { + baseURL:"https://github.com", + + platform: 'github-v4', //v3的platform是github,v4的是github-v4 + locale: 'zh', //语言 + // 其他的 Vssue 配置 + owner: 'KimYangOfCat', //github账户名 + repo: '2021-CSPostgraduate-408', //github一个项目的名称 + clientId: '0b51066b027f4cb4a5a3',//注册的Client ID + clientSecret: '4b816edafb10d7e828c0faaaa18df1e7d08585c2',//注册的Client Secret + autoCreateIssue:false,// 自动创建评论,默认是false + labels:['Comments'],//Vssue 通过 title 和 labels 来确定用来存储评论的对应 Issue + prefix:'[Comments]',//Issue 标题的前缀 + locale:'zh',//使用的语言。 + issueContent: ({ url }) =>`这个 Issue 由评论系统自动创建,用来存储该页面的评论:${url}`, + }, + }, +} + +function getDataStructureSidebar() { + return [ + '/DataStructure/', + { + title: '零、绪论', // 必要的 + path: '/DataStructure/DS_0_Introduction', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + '/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念', + '/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念', + ] + }, + { + title: '一、线性表', // 必要的 + path: '/DataStructure/DS_1_LinearList', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + '/DataStructure/DS_1_LinearList/Doc_1_0_线性表', + '/DataStructure/DS_1_LinearList/Doc_1_1_顺序表', + '/DataStructure/DS_1_LinearList/Doc_1_2_单链表', + '/DataStructure/DS_1_LinearList/Doc_1_3_双链表', + '/DataStructure/DS_1_LinearList/Doc_1_4_循环链表', + '/DataStructure/DS_1_LinearList/Doc_1_5_静态链表', + '/DataStructure/DS_1_LinearList/Doc_1_6_章节总结', + ] + }, + { + title: '二、栈与队列', // 必要的 + path: '/DataStructure/DS_2_StackAndQueue', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + '/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈', + '/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈', + '/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈', + '/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列', + '/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列', + '/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列', + '/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列', + '/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用', + '/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用', + ] + }, + { + title: '三、字符串', // 必要的 + path: '/DataStructure/DS_3_String', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + '/DataStructure/DS_3_String/Doc_3_0_串', + '/DataStructure/DS_3_String/Doc_3_1_串的存储结构', + '/DataStructure/DS_3_String/Doc_3_2_模式匹配', + '/DataStructure/DS_3_String/Doc_3_3_KMP算法', + '/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化', + ] + }, + { + title: '四、树与二叉树', // 必要的 + path: '/DataStructure/DS_4_TreeAndBinaryTree', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树', + '/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化', + ] + }, + { + title: '五、图', // 必要的 + path: '/DataStructure/DS_5_Graph/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + ] + }, + { + title: '六、搜索', // 必要的 + path: '/DataStructure/DS_6_Search/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + ] + }, + { + title: '七、排序', // 必要的 + path: '/DataStructure/DS_7_Sort/', // 可选的, 标题的跳转链接,应为绝对路径且必须存在 + collapsable: true, // 可选的, 默认值是 true, + sidebarDepth: 2, // 可选的, 默认值是 1 + children: [ + ] + }, + + ] +} + +function getComputerOrganizationSidebar() { + return [ + '/ComputerOrganization/', + ] +} + +function getComputerNetworkSidebar() { + return [ + '/ComputerNetwork/', + ] +} + +function getOperatingSystemSidebar() { + return [ + '/OperatingSystem/', + ] } \ No newline at end of file diff --git a/408Notes/.vuepress/styles/index.styl b/408Notes/.vuepress/styles/index.styl index 1da2214..2cc4279 100644 --- a/408Notes/.vuepress/styles/index.styl +++ b/408Notes/.vuepress/styles/index.styl @@ -1,3 +1,3 @@ -.content { - font-size 30px +.content { + font-size 30px } \ No newline at end of file diff --git a/408Notes/.vuepress/styles/palette.styl b/408Notes/.vuepress/styles/palette.styl index 41ec551..0c2c18e 100644 --- a/408Notes/.vuepress/styles/palette.styl +++ b/408Notes/.vuepress/styles/palette.styl @@ -1,20 +1,20 @@ -// 颜色 -$accentColor = #46ADD8 -$textColor = #2c3e50 -$borderColor = #eaecef -$codeBgColor = #282c34 -$arrowBgColor = #ccc -$badgeTipColor = #1e87d8 -$badgeWarningColor = darken(#ffe564, 35%) -$badgeErrorColor = #DA5961 - -// 布局 -$navbarHeight = 3.6rem -$sidebarWidth = 20rem -$contentWidth = 740px -$homePageWidth = 960px - -// 响应式变化点 -$MQNarrow = 959px -$MQMobile = 719px +// 颜色 +$accentColor = #46ADD8 +$textColor = #2c3e50 +$borderColor = #eaecef +$codeBgColor = #282c34 +$arrowBgColor = #ccc +$badgeTipColor = #1e87d8 +$badgeWarningColor = darken(#ffe564, 35%) +$badgeErrorColor = #DA5961 + +// 布局 +$navbarHeight = 3.6rem +$sidebarWidth = 20rem +$contentWidth = 740px +$homePageWidth = 960px + +// 响应式变化点 +$MQNarrow = 959px +$MQMobile = 719px $MQMobileNarrow = 419px \ No newline at end of file diff --git a/408Notes/ComputerNetwork/README.md b/408Notes/ComputerNetwork/README.md index 7bd66f0..4acbe5e 100644 --- a/408Notes/ComputerNetwork/README.md +++ b/408Notes/ComputerNetwork/README.md @@ -1,8 +1,8 @@ -# 计算机网络 - -内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 - - - - +# 计算机网络 + +内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 + + + + \ No newline at end of file diff --git a/408Notes/ComputerOrganization/CO_0_Introduction/Doc_0_0_计算机系统概述.md b/408Notes/ComputerOrganization/CO_0_Introduction/Doc_0_0_计算机系统概述.md index 4e8d6a3..f61990f 100644 --- a/408Notes/ComputerOrganization/CO_0_Introduction/Doc_0_0_计算机系统概述.md +++ b/408Notes/ComputerOrganization/CO_0_Introduction/Doc_0_0_计算机系统概述.md @@ -1,24 +1,24 @@ -# 计算机系统概述 - -## 什么是计算机系统 - -计算机系统=硬件+软件 - -![image-20200726202448571](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4n8vx9dij31640qwh6a.jpg) - -### 软件的划分 - -![image-20200726202536999](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4n9oi5scj31hi0lsx6b.jpg) - -### 硬件的发展 - -![image-20200726203231845](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4ngvp5whj31k70u04qq.jpg) - -微处理器的发展 - -![image-20200726203323797](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4nhrx8ffj31md0u0hdt.jpg) - -![image-20200726203516013](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4njq1ov4j31c40leaua.jpg) - -### 软件的发展 - +# 计算机系统概述 + +## 什么是计算机系统 + +计算机系统=硬件+软件 + +![image-20200726202448571](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4n8vx9dij31640qwh6a.jpg) + +### 软件的划分 + +![image-20200726202536999](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4n9oi5scj31hi0lsx6b.jpg) + +### 硬件的发展 + +![image-20200726203231845](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4ngvp5whj31k70u04qq.jpg) + +微处理器的发展 + +![image-20200726203323797](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4nhrx8ffj31md0u0hdt.jpg) + +![image-20200726203516013](https://tva1.sinaimg.cn/large/007S8ZIlly1gh4njq1ov4j31c40leaua.jpg) + +### 软件的发展 + diff --git a/408Notes/ComputerOrganization/README.md b/408Notes/ComputerOrganization/README.md index de2dba7..3c2b3b4 100644 --- a/408Notes/ComputerOrganization/README.md +++ b/408Notes/ComputerOrganization/README.md @@ -1,7 +1,7 @@ -# 计算机组成原理 -内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 - - - - +# 计算机组成原理 +内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 + + + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念.md b/408Notes/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念.md index 5ddaceb..73f9123 100644 --- a/408Notes/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念.md +++ b/408Notes/DataStructure/DS_0_Introduction/Doc_0_0_数据结构基本概念.md @@ -1,125 +1,125 @@ -# 数据结构基本概念 - -![image-20200616203728181](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001224.jpg) - -## 基本概念 - -### 什么是数据? - -数据是**信息的载体**,是客观描述事物属性的数、字符及**所有能输入到计算机中并被计算机程序识别和处理的符号**的集合。数据是计算机程序加工的原料。 - -### 数据元素、数据项 - -**数据元素**是数据的基本单位,通常作为一个整体进行考虑和处理。 - -一个数据元素可由若干**数据项**组成,数据项是构成数据元素的不可分割的最小单位。 - -### 数据结构、数据对象 - -结构——各个元素之间的关系 - -**数据结构**是互相之间存在一个或多种**特定关系**的数据元素的集合。 - -**数据对象**是具有**相同性质**的数据元素的集合,是一个数据的子集。 - -## 三要素 - -![image-20200616204952204](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001225.jpg) - -### 逻辑结构 - -即,数据元素之间的逻辑关系是什么? - -![image-20200616205141919](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001226.jpg) - -#### 集合 - -![image-20200616205508144](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001227.jpg) - -各个数据元素同属一个集合,别无其它关系 - -#### 线性结构 - -![image-20200616205527638](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001228.jpg) - -数据元素之间是一对一的关系,除了第一个元素,所有元素都有唯一前驱,除了最后一个元素,所有元素都有唯一后继 - -#### 树形结构 - -![image-20200616205648476](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001229.jpg) - -数据元素之间是一对多的关系 - -#### 图结构 - -![image-20200616205732165](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001230.jpg) - -数据元素之间是多对多的关系 - -### 物理结构 - -即,物理结构,如何用计算机表示数据元素的逻辑关系? - -#### 顺序存储 - -![image-20200616205941135](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001231.jpg) - -**把逻辑上相邻的元素存储在物理地址上也相邻的存储单元中**,元素之间的关系由存储单元的领接关系来体现。 - -#### 链式存储 - -![image-20200616210302754](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001232.jpg) - -#### 索引存储 - -![image-20200616210349944](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001233.jpg) - -#### 散列存储 - -![image-20200616210434678](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001234.jpg) - -#### 总结 - -![image-20200616210508542](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001235.jpg) - -1. 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺存储,则各个数据元素在物理上是可以离散的 -2. 数据的存储结构会影响存储空间的分配的方便程度 -3. 数据的存储机构会影响对数据运算的速度 - -### 数据的运算 - -施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,正对运算的功能;运算的实现是针对存储结构的,指的是运算实现的具体操作步骤。 - -## 数据类型、抽象数据类型 - -### 数据类型 - -数据类型是一个值的集合和定义在此集合的一组操作的总称。 - -1. 原子类型,其值不可再分的数据类型 -2. 结构类型,其值可以再分解为若干成分(分量)的数据类型 - -![image-20200616211417412](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001236.jpg) - -### 抽象数据类型 - -Abstract Data Type (ADT)是抽象数据组织及与之相关的操作。 - -ADT 是用数学化的语言定义数据的逻辑结构、定义运算。与其具体的实现无关(类似于定义类吗?可能) - -## 总结 - -![image-20200616212103345](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001237.jpg) - -![image-20200616212152228](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001238.jpg) - -在探讨一种数据结构时: - -1. 定义逻辑结构(数据原元素之间的关系) -2. 定义数据的运算(针对现实需求,应该对这种逻辑结构进行什么样的运算) -3. 确定某种存储结构,实现数据结构,并实现一些对数据结构的基本运算 - -![image-20200616212530957](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001239.jpg) - - +# 数据结构基本概念 + +![image-20200616203728181](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001224.jpg) + +## 基本概念 + +### 什么是数据? + +数据是**信息的载体**,是客观描述事物属性的数、字符及**所有能输入到计算机中并被计算机程序识别和处理的符号**的集合。数据是计算机程序加工的原料。 + +### 数据元素、数据项 + +**数据元素**是数据的基本单位,通常作为一个整体进行考虑和处理。 + +一个数据元素可由若干**数据项**组成,数据项是构成数据元素的不可分割的最小单位。 + +### 数据结构、数据对象 + +结构——各个元素之间的关系 + +**数据结构**是互相之间存在一个或多种**特定关系**的数据元素的集合。 + +**数据对象**是具有**相同性质**的数据元素的集合,是一个数据的子集。 + +## 三要素 + +![image-20200616204952204](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001225.jpg) + +### 逻辑结构 + +即,数据元素之间的逻辑关系是什么? + +![image-20200616205141919](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001226.jpg) + +#### 集合 + +![image-20200616205508144](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001227.jpg) + +各个数据元素同属一个集合,别无其它关系 + +#### 线性结构 + +![image-20200616205527638](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001228.jpg) + +数据元素之间是一对一的关系,除了第一个元素,所有元素都有唯一前驱,除了最后一个元素,所有元素都有唯一后继 + +#### 树形结构 + +![image-20200616205648476](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001229.jpg) + +数据元素之间是一对多的关系 + +#### 图结构 + +![image-20200616205732165](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001230.jpg) + +数据元素之间是多对多的关系 + +### 物理结构 + +即,物理结构,如何用计算机表示数据元素的逻辑关系? + +#### 顺序存储 + +![image-20200616205941135](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001231.jpg) + +**把逻辑上相邻的元素存储在物理地址上也相邻的存储单元中**,元素之间的关系由存储单元的领接关系来体现。 + +#### 链式存储 + +![image-20200616210302754](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001232.jpg) + +#### 索引存储 + +![image-20200616210349944](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001233.jpg) + +#### 散列存储 + +![image-20200616210434678](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001234.jpg) + +#### 总结 + +![image-20200616210508542](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001235.jpg) + +1. 若采用顺序存储,则各个数据元素在物理上必须是连续的;若采用非顺存储,则各个数据元素在物理上是可以离散的 +2. 数据的存储结构会影响存储空间的分配的方便程度 +3. 数据的存储机构会影响对数据运算的速度 + +### 数据的运算 + +施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,正对运算的功能;运算的实现是针对存储结构的,指的是运算实现的具体操作步骤。 + +## 数据类型、抽象数据类型 + +### 数据类型 + +数据类型是一个值的集合和定义在此集合的一组操作的总称。 + +1. 原子类型,其值不可再分的数据类型 +2. 结构类型,其值可以再分解为若干成分(分量)的数据类型 + +![image-20200616211417412](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001236.jpg) + +### 抽象数据类型 + +Abstract Data Type (ADT)是抽象数据组织及与之相关的操作。 + +ADT 是用数学化的语言定义数据的逻辑结构、定义运算。与其具体的实现无关(类似于定义类吗?可能) + +## 总结 + +![image-20200616212103345](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001237.jpg) + +![image-20200616212152228](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001238.jpg) + +在探讨一种数据结构时: + +1. 定义逻辑结构(数据原元素之间的关系) +2. 定义数据的运算(针对现实需求,应该对这种逻辑结构进行什么样的运算) +3. 确定某种存储结构,实现数据结构,并实现一些对数据结构的基本运算 + +![image-20200616212530957](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001239.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念.md b/408Notes/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念.md index 776656c..e2a6404 100644 --- a/408Notes/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念.md +++ b/408Notes/DataStructure/DS_0_Introduction/Doc_0_1_算法基本概念.md @@ -1,134 +1,134 @@ -# 算法基本概念 - -## 基本概念 - -![image-20200616214853491](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001358.jpg) - -### 什么是算法? - -程序=数据结构+算法 - -![image-20200616215006166](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001359.jpg) - -###算法的特性 - -1. 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 - - 注:算法必须是有穷的,二程序可以是无穷的。 - - ![image-20200616215340371](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001400.jpg) - -2. 确定性:算法每一条指令必须有确切的含义,对于相同的输入只能得出相同的输出 - -3. 可行性:算法描述的操作都可以通过已经实现的基本运算执行有限次来实现。 - -4. 输入:一个算法有0个或多个输入,这些输入取自某个特定对象的集合。 - -5. 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。 - - 五个特性,缺一不可 - -####“好”算法的特质 - -1. 正确性:算法应能正确地解决求解问题。 -2. 可读性:算法应具有良好的可读性,帮助人们理解。 -3. 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。 -4. 高效率与底存储量需求:执行速度快,时间复杂度低。不费内存,空间复杂度低。 - -###总结 - -![image-20200616220536590](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001401.jpg) - -## 算法效率的度量 - -![image-20200616220923527](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001402.jpg) - -### 如何评估算法时间开销? - -**让算法先运行,事后统计运行时间?** - -存在的问题? - -* 和机器性能有关,比如:超级计算机VS单片机 -* 和编程语言有关,越高级的语言执行效率越低,没错,就是越低 -* 和编译程序产生的机器指令质量有关 -* 有些算法是不能事后统计的,比如,导弹控制算法。 - -评价一个算法优劣时,需要排除与算法本身无关的外界因素,能否事先估计? - -### 算法时间复杂度 - -事前预估算法时间开销T(n)与问题规模n的关系(T 表示 time) - -如何计算T,例子: - -![image-20200616234743261](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001403.jpg) - -#### 问题1:是否可以忽略表达式某些部分? - -![image-20200616235203889](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001404.jpg) - -1. 加法规则:多项相加,只保留最高阶的项,且系数变为1 - - ![image-20200616235558501](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001405.jpg) - -2. 乘法规则:多项相乘,都保留 - - ![image-20200616235856976](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001406.jpg) - -##### 算法时间复杂度阶数顺序 - -![image-20200617000121744](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001407.jpg) - -![image-20200617000310666](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001408.jpg) - -#### 如果有好几千行代码,需要一行一行数? - -1. 顺序执行的代码只会影响常数项,可以忽略 -2. 只需要挑循环中的一个基本操作,分析它的执行次数和n的关系就好 -3. 如果有多层嵌套循环,只需要关注最深层的循环循环了几次 - -#### 小练习 - -![image-20200617001603926](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001409.jpg) - -![image-20200617001659516](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001410.jpg) - -![image-20200617001353856](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001411.jpg) - -#### 总结 - -![image-20200617001826231](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001412.jpg) - -算法的性能问题只有在n很大时才会暴露出来。 - -### 算法空间复杂度 - -#### 原地工作算法 - -![image-20200617002424730](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001413.jpg) - -分析空间复杂度时,只需关注与问题规模相关的变量就好(讲人话,就是,看程序中的变量就好) - -![image-20200617002625466](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001414.jpg) - -加法法则 - -![image-20200617002941853](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001415.jpg) - -#### 函数递归调用带来的内存开销 - -![image-20200617003249255](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001416.jpg) - -在这种情况下,空间复杂度等于递归调用的深度。 - -![image-20200617003702543](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001417.jpg) - -递归调用的过程中,每一次开辟的内存空间也可以不一致,如上例。 - -#### 总结 - -![image-20200617003857723](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001418.jpg) - - +# 算法基本概念 + +## 基本概念 + +![image-20200616214853491](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001358.jpg) + +### 什么是算法? + +程序=数据结构+算法 + +![image-20200616215006166](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001359.jpg) + +###算法的特性 + +1. 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 + + 注:算法必须是有穷的,二程序可以是无穷的。 + + ![image-20200616215340371](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001400.jpg) + +2. 确定性:算法每一条指令必须有确切的含义,对于相同的输入只能得出相同的输出 + +3. 可行性:算法描述的操作都可以通过已经实现的基本运算执行有限次来实现。 + +4. 输入:一个算法有0个或多个输入,这些输入取自某个特定对象的集合。 + +5. 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。 + + 五个特性,缺一不可 + +####“好”算法的特质 + +1. 正确性:算法应能正确地解决求解问题。 +2. 可读性:算法应具有良好的可读性,帮助人们理解。 +3. 健壮性:输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。 +4. 高效率与底存储量需求:执行速度快,时间复杂度低。不费内存,空间复杂度低。 + +###总结 + +![image-20200616220536590](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001401.jpg) + +## 算法效率的度量 + +![image-20200616220923527](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001402.jpg) + +### 如何评估算法时间开销? + +**让算法先运行,事后统计运行时间?** + +存在的问题? + +* 和机器性能有关,比如:超级计算机VS单片机 +* 和编程语言有关,越高级的语言执行效率越低,没错,就是越低 +* 和编译程序产生的机器指令质量有关 +* 有些算法是不能事后统计的,比如,导弹控制算法。 + +评价一个算法优劣时,需要排除与算法本身无关的外界因素,能否事先估计? + +### 算法时间复杂度 + +事前预估算法时间开销T(n)与问题规模n的关系(T 表示 time) + +如何计算T,例子: + +![image-20200616234743261](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001403.jpg) + +#### 问题1:是否可以忽略表达式某些部分? + +![image-20200616235203889](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001404.jpg) + +1. 加法规则:多项相加,只保留最高阶的项,且系数变为1 + + ![image-20200616235558501](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001405.jpg) + +2. 乘法规则:多项相乘,都保留 + + ![image-20200616235856976](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001406.jpg) + +##### 算法时间复杂度阶数顺序 + +![image-20200617000121744](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001407.jpg) + +![image-20200617000310666](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001408.jpg) + +#### 如果有好几千行代码,需要一行一行数? + +1. 顺序执行的代码只会影响常数项,可以忽略 +2. 只需要挑循环中的一个基本操作,分析它的执行次数和n的关系就好 +3. 如果有多层嵌套循环,只需要关注最深层的循环循环了几次 + +#### 小练习 + +![image-20200617001603926](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001409.jpg) + +![image-20200617001659516](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001410.jpg) + +![image-20200617001353856](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001411.jpg) + +#### 总结 + +![image-20200617001826231](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001412.jpg) + +算法的性能问题只有在n很大时才会暴露出来。 + +### 算法空间复杂度 + +#### 原地工作算法 + +![image-20200617002424730](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001413.jpg) + +分析空间复杂度时,只需关注与问题规模相关的变量就好(讲人话,就是,看程序中的变量就好) + +![image-20200617002625466](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001414.jpg) + +加法法则 + +![image-20200617002941853](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001415.jpg) + +#### 函数递归调用带来的内存开销 + +![image-20200617003249255](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001416.jpg) + +在这种情况下,空间复杂度等于递归调用的深度。 + +![image-20200617003702543](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001417.jpg) + +递归调用的过程中,每一次开辟的内存空间也可以不一致,如上例。 + +#### 总结 + +![image-20200617003857723](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810001418.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_0_Introduction/README.md b/408Notes/DataStructure/DS_0_Introduction/README.md index bba743c..5512b11 100644 --- a/408Notes/DataStructure/DS_0_Introduction/README.md +++ b/408Notes/DataStructure/DS_0_Introduction/README.md @@ -1,11 +1,11 @@ -# 绪论 - -## 本章目录 - -* [数据结构基本概念](Doc_0_0_数据结构基本概念.md) -* [算法基本概念](Doc_0_1_算法基本概念.md) - - - - - +# 绪论 + +## 本章目录 + +* [数据结构基本概念](Doc_0_0_数据结构基本概念.md) +* [算法基本概念](Doc_0_1_算法基本概念.md) + + + + + diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_0_线性表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_0_线性表.md index 162a9db..8177c9f 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_0_线性表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_0_线性表.md @@ -1,43 +1,43 @@ -# 线性表 - -##线性表的基本概念 - -![image-20200617165505571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002132.jpg) -数据结构的三要素:逻辑结构、数据的运算、存储结构(物理结构) - -### 线性表的定义 - -线性表是具有相同数据类型的n(n>=0)个元素的有限序列。 - -![image-20200617165917735](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002133.jpg) - -### 线性表的基本操作 - -![image-20200617171119623](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002134.jpg) - - - - -#### 什么时候要传入参数的引用“&”? - -一种是值类型,使用时会直接复制原值,修改参数不会影响原值 - -![image-20200617171738597](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002135.jpg) - -一种是引用类型,使用时操作的是原值,修改时直接修改原值!(C语言不支持这种引用类型!) - -![image-20200617171916923](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002136.jpg) - -#### 为什么要实现对数据结构的基本操作? - -1. 团队合作编程,你定义的数据结构要让别人能够很方便的使用(封装) -2. 将常用的操作/运算封装称函数,避免重复工作,降低出错风险。 - -### 总结 - -![image-20200617171547528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002137.jpg) - -注意⚠️:位序是用1开始计算的!!! - - +# 线性表 + +##线性表的基本概念 + +![image-20200617165505571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002132.jpg) +数据结构的三要素:逻辑结构、数据的运算、存储结构(物理结构) + +### 线性表的定义 + +线性表是具有相同数据类型的n(n>=0)个元素的有限序列。 + +![image-20200617165917735](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002133.jpg) + +### 线性表的基本操作 + +![image-20200617171119623](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002134.jpg) + + + + +#### 什么时候要传入参数的引用“&”? + +一种是值类型,使用时会直接复制原值,修改参数不会影响原值 + +![image-20200617171738597](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002135.jpg) + +一种是引用类型,使用时操作的是原值,修改时直接修改原值!(C语言不支持这种引用类型!) + +![image-20200617171916923](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002136.jpg) + +#### 为什么要实现对数据结构的基本操作? + +1. 团队合作编程,你定义的数据结构要让别人能够很方便的使用(封装) +2. 将常用的操作/运算封装称函数,避免重复工作,降低出错风险。 + +### 总结 + +![image-20200617171547528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002137.jpg) + +注意⚠️:位序是用1开始计算的!!! + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_1_顺序表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_1_顺序表.md index c6823b7..646b2aa 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_1_顺序表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_1_顺序表.md @@ -1,204 +1,204 @@ -# 顺序表 -##顺序表的基本概念 - -![image-20200617172240151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002154.jpg) - -### 顺序表的定义 - -![image-20200617172428297](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002155.jpg) - -### 顺序表的初始化 - -#### 静态分配 - -![image-20200617172843813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002156.jpg) - -具体实现: - -![image-20200617173539443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002157.jpg) - -```c -//初始化(静态分配) -void InitList(SqList &L){ - for (int i = 0; i < MaxSize; i++) { - L.data[i]=0;//将所有元素的初始值默认设置为0 - //这一步其实可以省略,但是省略之后,有可能受到内存中"脏数据"的影响 - } - L.length=0; -} -``` - -##### 问题反思 - -1. 如果“数组”存满留怎么办? - -可以放弃治疗,顺序表长刚开始确定后就无法更改(存储空间是静态的) - -2. 如果一开始就声明一个很大的内存空间呢?会存在什么问题? - -浪费,会造成大量的浪费。 - -#### 动态分配 - -![image-20200617190108177](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002158.jpg) - -具体实现方式 - -![image-20200617190651552](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002159.jpg) - -```c -//初始化(动态方式) -bool InitList(SeqList &L){ - //用 malloc 函数申请一片连续的存储空间 - L.data=(int *)malloc(InitSize*sizeof(int)); - if (L.data==NULL) - //要细心呀,这里不小心写成了赋值语句,但是没有报错,找了半天错误! - return false; - //(int *) 是指针的强制类型转换 - L.length=0; - L.MaxSize=InitSize; - return true; -} -``` - -#### 总结 - -![image-20200617190838244](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002200.jpg) - -![image-20200617191008606](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002201.jpg) - -### 顺序表的基本操作 - -#### 插入 - -ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 - -![image-20200617211304785](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002202.jpg) - -详细实现方式: - -![image-20200617212225782](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002203.jpg) - -优化之后: - -![image-20200617212144846](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002204.jpg) - -```c -bool ListInsert(SqList &L,int i,int e){ - //判断插入的位置是否合法, - if (i<1||i>L.length+1) - return false; - //判断表是否存满了 - if (L.length>=MaxSize) - return false; - - //后面的元素后移 - for (int j = L.length; j >=i ; j--) { - L.data[j]=L.data[j-1]; - } - L.data[i-1]=e; - L.length++; - return true; -} -``` - -#####插入操作的时间复杂度分析 - -![image-20200617213723625](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002205.jpg) - -#### 删除 - -![image-20200617220850929](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002206.jpg) - -```c -//删除 -bool ListDelete(SqList &L,int i,int &e){ - //判断i的位置是否合法 - if(i<0||i>L.length){ - return false; - } - //取出将要被删除的数 - e=L.data[i-1]; - //将其后的数据前移 - for (int j = i; j <=L.length ; j++) { - L.data[j-1]=L.data[j]; - } - //线性表长度减一 - L.length--; - return true; -} -``` - - - -##### 删除操作的时间复杂度分析 - -![image-20200617221030044](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002207.jpg) - -#### 总结反思 - -![image-20200617221250309](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002208.jpg) - -#### 查找 -#####按位查找 - -GetElem(L,i):按位查找操作,获取表L中第i个位置的元素的值 - -###### 静态分配状态下的实现方式 - -![image-20200617222107279](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002209.jpg) - -###### 动态分配状态下的实现方式 - -![image-20200617222212660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002210.jpg) - -用指针加数组下标的方式取数据的时候,数组类型决定着取数据时取几个字节!! - -```c -//按位查找 -int GetElem(SeqList L,int i){ - //判断是否越界 - if (i<0||i>L.length) - return -1; - return L.data[i-1]; -} -``` - -###### 按位查找的时间复杂度分析 - -![image-20200617222451314](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002211.jpg) - -##### 按值查找 - -![image-20200618215105169](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002212.jpg) - -```c -//按值查找 -int LocateElem(SeqList L,int e){ - //循环出查找 - for (int i = 0; i +# 顺序表 +##顺序表的基本概念 + +![image-20200617172240151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002154.jpg) + +### 顺序表的定义 + +![image-20200617172428297](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002155.jpg) + +### 顺序表的初始化 + +#### 静态分配 + +![image-20200617172843813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002156.jpg) + +具体实现: + +![image-20200617173539443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002157.jpg) + +```c +//初始化(静态分配) +void InitList(SqList &L){ + for (int i = 0; i < MaxSize; i++) { + L.data[i]=0;//将所有元素的初始值默认设置为0 + //这一步其实可以省略,但是省略之后,有可能受到内存中"脏数据"的影响 + } + L.length=0; +} +``` + +##### 问题反思 + +1. 如果“数组”存满留怎么办? + +可以放弃治疗,顺序表长刚开始确定后就无法更改(存储空间是静态的) + +2. 如果一开始就声明一个很大的内存空间呢?会存在什么问题? + +浪费,会造成大量的浪费。 + +#### 动态分配 + +![image-20200617190108177](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002158.jpg) + +具体实现方式 + +![image-20200617190651552](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002159.jpg) + +```c +//初始化(动态方式) +bool InitList(SeqList &L){ + //用 malloc 函数申请一片连续的存储空间 + L.data=(int *)malloc(InitSize*sizeof(int)); + if (L.data==NULL) + //要细心呀,这里不小心写成了赋值语句,但是没有报错,找了半天错误! + return false; + //(int *) 是指针的强制类型转换 + L.length=0; + L.MaxSize=InitSize; + return true; +} +``` + +#### 总结 + +![image-20200617190838244](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002200.jpg) + +![image-20200617191008606](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002201.jpg) + +### 顺序表的基本操作 + +#### 插入 + +ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 + +![image-20200617211304785](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002202.jpg) + +详细实现方式: + +![image-20200617212225782](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002203.jpg) + +优化之后: + +![image-20200617212144846](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002204.jpg) + +```c +bool ListInsert(SqList &L,int i,int e){ + //判断插入的位置是否合法, + if (i<1||i>L.length+1) + return false; + //判断表是否存满了 + if (L.length>=MaxSize) + return false; + + //后面的元素后移 + for (int j = L.length; j >=i ; j--) { + L.data[j]=L.data[j-1]; + } + L.data[i-1]=e; + L.length++; + return true; +} +``` + +#####插入操作的时间复杂度分析 + +![image-20200617213723625](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002205.jpg) + +#### 删除 + +![image-20200617220850929](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002206.jpg) + +```c +//删除 +bool ListDelete(SqList &L,int i,int &e){ + //判断i的位置是否合法 + if(i<0||i>L.length){ + return false; + } + //取出将要被删除的数 + e=L.data[i-1]; + //将其后的数据前移 + for (int j = i; j <=L.length ; j++) { + L.data[j-1]=L.data[j]; + } + //线性表长度减一 + L.length--; + return true; +} +``` + + + +##### 删除操作的时间复杂度分析 + +![image-20200617221030044](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002207.jpg) + +#### 总结反思 + +![image-20200617221250309](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002208.jpg) + +#### 查找 +#####按位查找 + +GetElem(L,i):按位查找操作,获取表L中第i个位置的元素的值 + +###### 静态分配状态下的实现方式 + +![image-20200617222107279](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002209.jpg) + +###### 动态分配状态下的实现方式 + +![image-20200617222212660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002210.jpg) + +用指针加数组下标的方式取数据的时候,数组类型决定着取数据时取几个字节!! + +```c +//按位查找 +int GetElem(SeqList L,int i){ + //判断是否越界 + if (i<0||i>L.length) + return -1; + return L.data[i-1]; +} +``` + +###### 按位查找的时间复杂度分析 + +![image-20200617222451314](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002211.jpg) + +##### 按值查找 + +![image-20200618215105169](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002212.jpg) + +```c +//按值查找 +int LocateElem(SeqList L,int e){ + //循环出查找 + for (int i = 0; i \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_2_单链表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_2_单链表.md index 2311151..e1765e1 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_2_单链表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_2_单链表.md @@ -1,184 +1,184 @@ -# 单链表 - -![image-20200618221439465](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002338.jpg) - -![image-20200618221516210](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002339.jpg) - -## 什么是单链表? - -![image-20200618221658525](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002340.jpg) - -## 单链表的定义 - -![image-20200618221959788](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002341.jpg) - -### 别名 - -![image-20200618222203154](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002342.jpg) - -![image-20200618222313544](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002344.jpg) - -注释:或者可以理解为指向头节点的指针既可以表示整个单链表也可以表示头节点,为了便于区分才建议使用 typedef 进行重命名,以方便区别其不同的含义 - -### 头插法建立单链表 - -![image-20200619095117732](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002344.jpg) - -## 单链表的基本操作 - -### 单链表的初始化 - -#### 不带头节点的单链表的初始化 - -![image-20200619095400757](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002345.jpg) - -#### 带头节点的单链表的初始化 - -![image-20200619095545238](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004036.jpg) - -#### 两者区别是什么? - -![image-20200619095738329](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004054.jpg) - -### 总结 - -![image-20200619095821536](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004128.jpg) - -### 插入和删除 - -![image-20200619104612536](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004120.jpg) - -#### 插入 - -##### 按位序插入(带头节点的单链表) - -![image-20200619105030154](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004107.jpg) - -具体实现 - -分析在表头插入 - -![image-20200619105401211](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004202.jpg) - -分析为什么不能颠倒 - -![image-20200619105451377](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004209.jpg) - -分析在表中插入 - -![image-20200619105800111](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004220.jpg) - -分析在表尾插入 - -![image-20200619110039686](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004242.jpg) - -分析插入位置超出表长 - -![image-20200619110159253](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004250.jpg) - -总结 - -![image-20200619110309541](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004258.jpg) - -##### 按位插入(不带头节点) - -![image-20200619110418752](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004518.jpg) - -具体实现 - -![image-20200619110547637](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004527.jpg) - -结论:不带头节点的单链表,写代码更不方便,除非特别声明,默认推荐使用带头节点的实现方式,还有要注意在考试中带头、不带头都有可能考察,注意审题。 - -##### 指定节点的后插操作 - -![image-20200619111032277](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004537.jpg) - -指定节点的前插操作 - -通过传入头指针实现前插 - -![image-20200619111607840](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004545.jpg) - -先进行后插,然后交换前后数据,以此实现前插 - -![image-20200619111716141](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004557.jpg) - -![image-20200619111814873](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004608.jpg) - -#### 删除 - -##### 带有头节点版本 - -![image-20200619111915877](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004616.jpg) - -具体实现 - -![image-20200619135048885](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004623.jpg) - -###### 删除指定结点 - -![image-20200619135226089](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004635.jpg) - -如果P是最后一个节点,咋办? - -只能从表头表头依次寻找前驱,时间复杂度O(n) - -![image-20200619135401028](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004648.jpg) - -单链表的局限性:无法逆向检索!! - -#### 总结 - -![image-20200619135623242](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004703.jpg) - -#### 查找 - -##### 按位查找(带头节点) - -![image-20200619152704151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004721.jpg) - -#####按值查找(带头节点) - -![image-20200619153147639](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004724.jpg) - -##### 求表的长度(带头节点) - -![image-20200619153411974](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004735.jpg) - -#### 总结 - -![image-20200619153525681](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004742.jpg) - -## 单链表的建立方法 - -![image-20200619153742876](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004802.jpg) - -PS:找不到对象就娶一个数据元素吧!哈哈 - -### 尾插法 - -第一种方法: - -![image-20200619154012867](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004755.jpg) - -问题:时间复杂度太高!!可以用一个指针记录最后一个数据元素的位置来优化时间。 - -优化之后: - -![image-20200619172815577](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004814.jpg) - -### 头插法 - -![image-20200619172945304](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004822.jpg) - -具体实现: - -![image-20200619173800669](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004833.jpg) - -### 总结 - -![image-20200619173925151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004843.jpg) - - +# 单链表 + +![image-20200618221439465](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002338.jpg) + +![image-20200618221516210](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002339.jpg) + +## 什么是单链表? + +![image-20200618221658525](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002340.jpg) + +## 单链表的定义 + +![image-20200618221959788](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002341.jpg) + +### 别名 + +![image-20200618222203154](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002342.jpg) + +![image-20200618222313544](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002344.jpg) + +注释:或者可以理解为指向头节点的指针既可以表示整个单链表也可以表示头节点,为了便于区分才建议使用 typedef 进行重命名,以方便区别其不同的含义 + +### 头插法建立单链表 + +![image-20200619095117732](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002344.jpg) + +## 单链表的基本操作 + +### 单链表的初始化 + +#### 不带头节点的单链表的初始化 + +![image-20200619095400757](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810002345.jpg) + +#### 带头节点的单链表的初始化 + +![image-20200619095545238](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004036.jpg) + +#### 两者区别是什么? + +![image-20200619095738329](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004054.jpg) + +### 总结 + +![image-20200619095821536](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004128.jpg) + +### 插入和删除 + +![image-20200619104612536](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004120.jpg) + +#### 插入 + +##### 按位序插入(带头节点的单链表) + +![image-20200619105030154](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004107.jpg) + +具体实现 + +分析在表头插入 + +![image-20200619105401211](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004202.jpg) + +分析为什么不能颠倒 + +![image-20200619105451377](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004209.jpg) + +分析在表中插入 + +![image-20200619105800111](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004220.jpg) + +分析在表尾插入 + +![image-20200619110039686](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004242.jpg) + +分析插入位置超出表长 + +![image-20200619110159253](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004250.jpg) + +总结 + +![image-20200619110309541](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004258.jpg) + +##### 按位插入(不带头节点) + +![image-20200619110418752](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004518.jpg) + +具体实现 + +![image-20200619110547637](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004527.jpg) + +结论:不带头节点的单链表,写代码更不方便,除非特别声明,默认推荐使用带头节点的实现方式,还有要注意在考试中带头、不带头都有可能考察,注意审题。 + +##### 指定节点的后插操作 + +![image-20200619111032277](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004537.jpg) + +指定节点的前插操作 + +通过传入头指针实现前插 + +![image-20200619111607840](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004545.jpg) + +先进行后插,然后交换前后数据,以此实现前插 + +![image-20200619111716141](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004557.jpg) + +![image-20200619111814873](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004608.jpg) + +#### 删除 + +##### 带有头节点版本 + +![image-20200619111915877](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004616.jpg) + +具体实现 + +![image-20200619135048885](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004623.jpg) + +###### 删除指定结点 + +![image-20200619135226089](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004635.jpg) + +如果P是最后一个节点,咋办? + +只能从表头表头依次寻找前驱,时间复杂度O(n) + +![image-20200619135401028](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004648.jpg) + +单链表的局限性:无法逆向检索!! + +#### 总结 + +![image-20200619135623242](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004703.jpg) + +#### 查找 + +##### 按位查找(带头节点) + +![image-20200619152704151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004721.jpg) + +#####按值查找(带头节点) + +![image-20200619153147639](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004724.jpg) + +##### 求表的长度(带头节点) + +![image-20200619153411974](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004735.jpg) + +#### 总结 + +![image-20200619153525681](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004742.jpg) + +## 单链表的建立方法 + +![image-20200619153742876](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004802.jpg) + +PS:找不到对象就娶一个数据元素吧!哈哈 + +### 尾插法 + +第一种方法: + +![image-20200619154012867](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004755.jpg) + +问题:时间复杂度太高!!可以用一个指针记录最后一个数据元素的位置来优化时间。 + +优化之后: + +![image-20200619172815577](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004814.jpg) + +### 头插法 + +![image-20200619172945304](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004822.jpg) + +具体实现: + +![image-20200619173800669](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004833.jpg) + +### 总结 + +![image-20200619173925151](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004843.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_3_双链表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_3_双链表.md index e55ba61..ee1f6b4 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_3_双链表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_3_双链表.md @@ -1,38 +1,38 @@ -# 双链表 - - - -![image-20200620154549814](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004859.jpg) - -## 单链表VS双链表 - -![image-20200620154721595](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004905.jpg) - -## 双链表基本操作 - -### 初始化 - -![image-20200620154836876](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004914.jpg) - -### 插入 - -![image-20200620155038642](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004927.jpg) - -优化之后 - -![image-20200620155238232](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004934.jpg) - -### 删除 - -![image-20200620155535132](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005044.jpg) - -### 遍历 - -![image-20200620155741873](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005053.jpg) - -## 总结反思 - -![image-20200620155909044](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005103.jpg) - - +# 双链表 + + + +![image-20200620154549814](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004859.jpg) + +## 单链表VS双链表 + +![image-20200620154721595](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004905.jpg) + +## 双链表基本操作 + +### 初始化 + +![image-20200620154836876](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004914.jpg) + +### 插入 + +![image-20200620155038642](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004927.jpg) + +优化之后 + +![image-20200620155238232](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810004934.jpg) + +### 删除 + +![image-20200620155535132](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005044.jpg) + +### 遍历 + +![image-20200620155741873](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005053.jpg) + +## 总结反思 + +![image-20200620155909044](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005103.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_4_循环链表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_4_循环链表.md index e5d19a2..8d48059 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_4_循环链表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_4_循环链表.md @@ -1,40 +1,40 @@ -# 循环链表 - -![image-20200620160012077](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005122.jpg) - -## 循环单链表 - -![image-20200620160101211](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005123.jpg) - -具体实现: - -![image-20200620160209813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005124.jpg) - -优势: - -![image-20200620160300669](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005125.jpg) - -![image-20200620160451334](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005126.jpg) - -## 循环双链表 - -![image-20200620160535337](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005127.jpg) - -### 初始化 - -![image-20200620160644172](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005128.jpg) - -### 插入 - -![image-20200620160728846](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005751.jpg) - -### 删除 - -![image-20200620160824559](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005758.jpg) - -## 总结反思 - -![image-20200620161033347](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005803.jpg) - - +# 循环链表 + +![image-20200620160012077](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005122.jpg) + +## 循环单链表 + +![image-20200620160101211](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005123.jpg) + +具体实现: + +![image-20200620160209813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005124.jpg) + +优势: + +![image-20200620160300669](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005125.jpg) + +![image-20200620160451334](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005126.jpg) + +## 循环双链表 + +![image-20200620160535337](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005127.jpg) + +### 初始化 + +![image-20200620160644172](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005128.jpg) + +### 插入 + +![image-20200620160728846](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005751.jpg) + +### 删除 + +![image-20200620160824559](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005758.jpg) + +## 总结反思 + +![image-20200620161033347](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005803.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_5_静态链表.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_5_静态链表.md index d47381d..b0a7b70 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_5_静态链表.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_5_静态链表.md @@ -1,32 +1,32 @@ -# 静态链表 - -![image-20200620161229028](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005810.jpg) - -## 什么是静态链表? - -![image-20200620161554872](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005814.jpg) - -## 定义一个静态链表 - -方法1: - -![image-20200620161706934](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005821.jpg) - -方法2: - -![image-20200620161934969](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005825.jpg) - -验证方法2的定义方法 - -![image-20200620162124454](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005830.jpg) - -## 基本操作 - -![image-20200620162512284](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005835.jpg) - -### 总结反思 - -![image-20200620162709709](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005841.jpg) - - +# 静态链表 + +![image-20200620161229028](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005810.jpg) + +## 什么是静态链表? + +![image-20200620161554872](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005814.jpg) + +## 定义一个静态链表 + +方法1: + +![image-20200620161706934](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005821.jpg) + +方法2: + +![image-20200620161934969](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005825.jpg) + +验证方法2的定义方法 + +![image-20200620162124454](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005830.jpg) + +## 基本操作 + +![image-20200620162512284](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005835.jpg) + +### 总结反思 + +![image-20200620162709709](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005841.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/Doc_1_6_章节总结.md b/408Notes/DataStructure/DS_1_LinearList/Doc_1_6_章节总结.md index fc37e15..8c8cf40 100644 --- a/408Notes/DataStructure/DS_1_LinearList/Doc_1_6_章节总结.md +++ b/408Notes/DataStructure/DS_1_LinearList/Doc_1_6_章节总结.md @@ -1,44 +1,44 @@ -# 线性表章节复习反思 - -![image-20200620162832052](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005922.jpg) - -##逻辑结构对比 - -![image-20200620162853478](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005932.jpg) - -## 存储结构对比 - -![image-20200620163051729](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005938.jpg) - -## 基本操作对比 - -![image-20200620163155730](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005945.jpg) - -### 初始化(创建) - -![image-20200620163353375](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005949.jpg) - -### 销毁 - -![image-20200620163638128](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005954.jpg) - -### 增加/删除 - -![image-20200620163904064](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005959.jpg) - -### 查找 - -![image-20200620164016463](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010004.jpg) - -## 总结 - -![image-20200620164133349](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010008.jpg) - -具体使用时,需要根据具体场景去选择 - -## 开放式答题的思路 - -![image-20200620164325277](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010012.jpg) - - +# 线性表章节复习反思 + +![image-20200620162832052](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005922.jpg) + +##逻辑结构对比 + +![image-20200620162853478](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005932.jpg) + +## 存储结构对比 + +![image-20200620163051729](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005938.jpg) + +## 基本操作对比 + +![image-20200620163155730](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005945.jpg) + +### 初始化(创建) + +![image-20200620163353375](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005949.jpg) + +### 销毁 + +![image-20200620163638128](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005954.jpg) + +### 增加/删除 + +![image-20200620163904064](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810005959.jpg) + +### 查找 + +![image-20200620164016463](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010004.jpg) + +## 总结 + +![image-20200620164133349](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010008.jpg) + +具体使用时,需要根据具体场景去选择 + +## 开放式答题的思路 + +![image-20200620164325277](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010012.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_1_LinearList/README.md b/408Notes/DataStructure/DS_1_LinearList/README.md index 4f498b1..68c7c97 100644 --- a/408Notes/DataStructure/DS_1_LinearList/README.md +++ b/408Notes/DataStructure/DS_1_LinearList/README.md @@ -1,15 +1,15 @@ -# 线性表 - -## 本章目录 - -* [线性表](Doc_1_0_线性表.md) -* [顺序表](Doc_1_1_顺序表.md) -* [单链表](Doc_1_2_单链表.md) -* [双链表](Doc_1_3_双链表.md) -* [循环链表](Doc_1_4_循环链表.md) -* [静态链表](Doc_1_5_静态链表.md) -* [章节总结](Doc_1_6_章节总结.md) - - - - +# 线性表 + +## 本章目录 + +* [线性表](Doc_1_0_线性表.md) +* [顺序表](Doc_1_1_顺序表.md) +* [单链表](Doc_1_2_单链表.md) +* [双链表](Doc_1_3_双链表.md) +* [循环链表](Doc_1_4_循环链表.md) +* [静态链表](Doc_1_5_静态链表.md) +* [章节总结](Doc_1_6_章节总结.md) + + + + diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈.md index aaf8465..efe2933 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_0_栈.md @@ -1,26 +1,26 @@ -# 栈 - -![image-20200624150012426](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010108.jpg) - -## 栈的定义 - -![image-20200624150149844](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010114.jpg) - -![image-20200624150313680](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010121.jpg) - -![image-20200624150459308](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010127.jpg) - -## 栈的基本操作 - -![image-20200624150704360](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010132.jpg) - -### 出栈顺序 - -![image-20200624150927909](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010138.jpg) - -## 总结 - -![image-20200624151001874](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010144.jpg) - - - +# 栈 + +![image-20200624150012426](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010108.jpg) + +## 栈的定义 + +![image-20200624150149844](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010114.jpg) + +![image-20200624150313680](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010121.jpg) + +![image-20200624150459308](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010127.jpg) + +## 栈的基本操作 + +![image-20200624150704360](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010132.jpg) + +### 出栈顺序 + +![image-20200624150927909](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010138.jpg) + +## 总结 + +![image-20200624151001874](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010144.jpg) + + + diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈.md index 60d8c99..85379b2 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_1_顺序栈.md @@ -1,44 +1,44 @@ -# 顺序栈 - -![image-20200624151201362](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010154.jpg) - -## 顺序栈的定义 - -![image-20200624151329974](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010159.jpg) - -## 基本操作 - -### 初始化操作 - -![image-20200624151413408](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010206.jpg) - -### 进栈操作 - -![image-20200624151826628](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010237.jpg) - -### 出栈操作 - -![image-20200624152110685](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010246.jpg) - - - -### 读取栈顶元素 - -![image-20200624152208184](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010251.jpg) - -## 另一种基本操作的实现方式: - -![image-20200624152341443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010257.jpg) - -![image-20200624152540477](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010304.jpg) - -## 共享栈 - -![image-20200624152655905](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010311.jpg) - -## 总结 - -![image-20200624152849214](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010316.jpg) - - +# 顺序栈 + +![image-20200624151201362](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010154.jpg) + +## 顺序栈的定义 + +![image-20200624151329974](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010159.jpg) + +## 基本操作 + +### 初始化操作 + +![image-20200624151413408](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010206.jpg) + +### 进栈操作 + +![image-20200624151826628](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010237.jpg) + +### 出栈操作 + +![image-20200624152110685](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010246.jpg) + + + +### 读取栈顶元素 + +![image-20200624152208184](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010251.jpg) + +## 另一种基本操作的实现方式: + +![image-20200624152341443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010257.jpg) + +![image-20200624152540477](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010304.jpg) + +## 共享栈 + +![image-20200624152655905](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010311.jpg) + +## 总结 + +![image-20200624152849214](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010316.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈.md index 9efdb53..ea65555 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_2_链栈.md @@ -1,21 +1,21 @@ -# 链栈 - -![image-20200624153019827](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010327.jpg) - -## 复习单链表 - -![image-20200624153122502](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010335.jpg) - -![image-20200624153252888](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010340.jpg) - -## 链栈的定义 - -![image-20200624153433781](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010345.jpg) - -## 总结 - -![image-20200624153535956](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010350.jpg) - - - +# 链栈 + +![image-20200624153019827](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010327.jpg) + +## 复习单链表 + +![image-20200624153122502](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010335.jpg) + +![image-20200624153252888](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010340.jpg) + +## 链栈的定义 + +![image-20200624153433781](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010345.jpg) + +## 总结 + +![image-20200624153535956](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010350.jpg) + + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列.md index 39c174c..375902c 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_3_队列.md @@ -1,22 +1,22 @@ -# 队列 - -![image-20200624153725089](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010403.jpg) - -## 队列的定义 - -![image-20200624153857510](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010411.jpg) - -![image-20200624154000138](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010429.jpg) - -![image-20200624154121849](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010439.jpg) - -## 队列的基本操作 - -![image-20200624154224115](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010446.jpg) - -## 总结 - -![image-20200624154248823](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010452.jpg) - - +# 队列 + +![image-20200624153725089](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010403.jpg) + +## 队列的定义 + +![image-20200624153857510](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010411.jpg) + +![image-20200624154000138](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010429.jpg) + +![image-20200624154121849](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010439.jpg) + +## 队列的基本操作 + +![image-20200624154224115](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010446.jpg) + +## 总结 + +![image-20200624154248823](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010452.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列.md index 8335481..adf9fe0 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_4_顺序队列.md @@ -1,55 +1,55 @@ -# 顺序队列 - -![image-20200624154351327](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010502.jpg) - -## 顺序队列的定义 - -![image-20200624154511213](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010511.jpg) - -### 顺序队列的初始化 - -![image-20200624154606843](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010516.jpg) - -### 入队操作 - -![image-20200624155112673](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010521.jpg) - -![image-20200624155125271](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010527.jpg) - -### 循环队列 - -![image-20200624155155915](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010537.jpg) - -![image-20200624155216098](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010542.jpg) - -### 出队 - -![image-20200624155258305](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010547.jpg) - -### 判空/判满 - -方案一:牺牲一个存储空间 - -![image-20200624155343663](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010552.jpg) - -方案二:利用size变量记录队列长度 - -![image-20200624155414159](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010559.jpg) - -方案三:利用tag记录最后一次操作 - -![image-20200624155619066](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010605.jpg) - -## 其它实现方式 - -![image-20200624155808035](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010616.jpg) - -![image-20200624155827353](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010620.jpg) - -![image-20200624155906039](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010625.jpg) - -## 总结 - -![image-20200624160059508](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010648.jpg) - +# 顺序队列 + +![image-20200624154351327](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010502.jpg) + +## 顺序队列的定义 + +![image-20200624154511213](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010511.jpg) + +### 顺序队列的初始化 + +![image-20200624154606843](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010516.jpg) + +### 入队操作 + +![image-20200624155112673](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010521.jpg) + +![image-20200624155125271](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010527.jpg) + +### 循环队列 + +![image-20200624155155915](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010537.jpg) + +![image-20200624155216098](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010542.jpg) + +### 出队 + +![image-20200624155258305](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010547.jpg) + +### 判空/判满 + +方案一:牺牲一个存储空间 + +![image-20200624155343663](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010552.jpg) + +方案二:利用size变量记录队列长度 + +![image-20200624155414159](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010559.jpg) + +方案三:利用tag记录最后一次操作 + +![image-20200624155619066](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010605.jpg) + +## 其它实现方式 + +![image-20200624155808035](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010616.jpg) + +![image-20200624155827353](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010620.jpg) + +![image-20200624155906039](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010625.jpg) + +## 总结 + +![image-20200624160059508](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010648.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列.md index 1c4928d..b04548f 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_5_链式队列.md @@ -1,45 +1,45 @@ -# 链队列 - -![image-20200624160150945](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010936.jpg) - -## 链队列的定义 - -![image-20200624160334221](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010945.jpg) - -## 链队列的基本操作 - -### 链队列的初始化 - -![image-20200624160434942](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010950.jpg) - -### 入队 - -带头节点 - -![image-20200624160602691](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010955.jpg) - -不带头节点 - -![image-20200624160710140](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011000.jpg) - -### 出队 - -带有头节点 - -![image-20200624160905141](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011005.jpg) - -不带头节点 - -![image-20200624160952329](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011010.jpg) - -### 判满 - -![image-20200624161057518](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011016.jpg) - -## 总结 - -![image-20200624161134905](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011021.jpg) - - - - +# 链队列 + +![image-20200624160150945](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010936.jpg) + +## 链队列的定义 + +![image-20200624160334221](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010945.jpg) + +## 链队列的基本操作 + +### 链队列的初始化 + +![image-20200624160434942](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010950.jpg) + +### 入队 + +带头节点 + +![image-20200624160602691](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810010955.jpg) + +不带头节点 + +![image-20200624160710140](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011000.jpg) + +### 出队 + +带有头节点 + +![image-20200624160905141](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011005.jpg) + +不带头节点 + +![image-20200624160952329](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011010.jpg) + +### 判满 + +![image-20200624161057518](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011016.jpg) + +## 总结 + +![image-20200624161134905](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011021.jpg) + + + + diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列.md index 51d5442..33f536a 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_6_双端队列.md @@ -1,35 +1,35 @@ -# 双端队列 - -![image-20200624161331529](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011030.jpg) - -## 双端队列的定义 - -![image-20200624161416772](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011037.jpg) - -## 考点:判断输出序列的合法性 - -### 对于栈的输出序列的合法性 - -![image-20200624161642449](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011052.jpg) - -绿色为合法,红色为非法 - -### 对于输入受限的双端队列的输出序列的合法性 - -![image-20200624162025565](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011057.jpg) - -绿色为合法,红色为非法,带下划线是在栈中不合法,但在输入受限的双端队列中合法的。 - -### 对于输出受限的双端队列 - -![image-20200624162509184](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011102.jpg) - -绿色为合法,红色为非法,带下划线是在栈中不合法,但在输出受限的双端队列中合法 - -这种输出受限的双端队列,看序号较大的元素输出的位置,这意味着,在它输出之前,比它小的元素的相对位置是确定的,接下来就是考虑有什么插入的方法能实现这种相对位置关系! - -## 总结 - -## ![image-20200624162951819](https://tva1.sinaimg.cn/large/007S8ZIlly1gg3gmivt6mj30xv09ddla.jpg) - - +# 双端队列 + +![image-20200624161331529](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011030.jpg) + +## 双端队列的定义 + +![image-20200624161416772](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011037.jpg) + +## 考点:判断输出序列的合法性 + +### 对于栈的输出序列的合法性 + +![image-20200624161642449](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011052.jpg) + +绿色为合法,红色为非法 + +### 对于输入受限的双端队列的输出序列的合法性 + +![image-20200624162025565](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011057.jpg) + +绿色为合法,红色为非法,带下划线是在栈中不合法,但在输入受限的双端队列中合法的。 + +### 对于输出受限的双端队列 + +![image-20200624162509184](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011102.jpg) + +绿色为合法,红色为非法,带下划线是在栈中不合法,但在输出受限的双端队列中合法 + +这种输出受限的双端队列,看序号较大的元素输出的位置,这意味着,在它输出之前,比它小的元素的相对位置是确定的,接下来就是考虑有什么插入的方法能实现这种相对位置关系! + +## 总结 + +## ![image-20200624162951819](https://tva1.sinaimg.cn/large/007S8ZIlly1gg3gmivt6mj30xv09ddla.jpg) + + diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用.md index 4e23e83..4b54f94 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_7_栈的应用.md @@ -1,150 +1,150 @@ -# 栈的应用 - -## 括号匹配问题 - -![image-20200624163218954](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011113.jpg) - -### 实际过程 - -![image-20200624163415891](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011118.jpg) - -####正好匹配 - -![image-20200624163523560](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011122.jpg) - -####左右不匹配 - -![image-20200624163548297](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011127.jpg) - -#### 右括号单身 - -![image-20200624163638571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011130.jpg) - -#### 左括号单身 - -![image-20200624163721992](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011135.jpg) - -#### 整个流程 - -![image-20200624163928215](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011139.jpg) - -### 算法实现 - -![image-20200624164327998](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011144.jpg) - -### 总结 - -![image-20200624164420239](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011149.jpg) - -## 表达式求值 - -![image-20200624164751528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011154.jpg) - -### 算数表达式是什么? - -由三个部分组成(操作数,运算符,界限符) - -![image-20200624165021200](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011203.jpg) - -### 前/后缀表达式的诞生 - -![image-20200624165107095](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011211.jpg) - -### 中/后/前缀表达式的区别 - -![image-20200624165500339](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011216.jpg) - -#### 中转后的过程: - -![image-20200624165755963](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011221.jpg) - -**上图中,后缀表达式的算术符的先后次序对应中缀表达式的生效的先后次序**,但是这是一定的吗? - -![image-20200624170300224](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011225.jpg) - -左优先原则,可保证运算顺序唯一性,以确定机算算法输出结果的唯一性!! - -![image-20200624190745666](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011717.jpg) - -#### 机算算法实现 - -![image-20200624191112704](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011725.jpg) - -![image-20200624191355054](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011729.jpg) - -### 中转前的过程 - -![image-20200624191538706](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011737.jpg) - -中转后和中转前的区别: - -![image-20200624191614443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011742.jpg) - -#### 中转前的机算过程: - -![image-20200624191810971](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011746.jpg) - -### 总结 - -![image-20200624191919379](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011751.jpg) - -"左优先"/“右优先”原则和左/右操作数不是专业说法,仅供理解! - -## 表达式求值——具体代码实现 - -![image-20200624192258712](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011755.jpg) - -### 中转后机算 - -手算过程: - -![image-20200624192506786](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011759.jpg) - -机算过程: - -![image-20200624193355396](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011804.jpg) - -### 中缀表达式的计算 - -![image-20200624193844266](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011809.jpg) - -![image-20200624194515343](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011813.jpg) - -CPU只能执行单个的加减乘除运算,上边这么搞的意义就是为了将高级程序语言编译成简单的机器码,让CPU去执行! - -### 总结 - -![image-20200624194707110](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011820.jpg) - -## 栈在递归中的应用 - -递归的过程就是函数调用的过程 - -![image-20200624195132597](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011839.jpg) - -![image-20200624195412187](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011847.jpg) - -### 适合用“递归”算法解决的问题 - -![image-20200624195452395](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011853.jpg) - -求阶乘: - -![image-20200624195709306](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011857.jpg) - -**使用递归时,需要注意调用栈溢出!** - -![image-20200624200031925](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011902.jpg) - -**可以自定义栈将递归算法改造成非递归算法!** - -求斐波那契数列 - -![image-20200624200155981](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011906.jpg) - -### 总结 - -![image-20200624200214150](https://tva1.sinaimg.cn/large/007S8ZIlly1gg3mrhq6wnj30mq0adtbj.jpg) - - +# 栈的应用 + +## 括号匹配问题 + +![image-20200624163218954](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011113.jpg) + +### 实际过程 + +![image-20200624163415891](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011118.jpg) + +####正好匹配 + +![image-20200624163523560](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011122.jpg) + +####左右不匹配 + +![image-20200624163548297](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011127.jpg) + +#### 右括号单身 + +![image-20200624163638571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011130.jpg) + +#### 左括号单身 + +![image-20200624163721992](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011135.jpg) + +#### 整个流程 + +![image-20200624163928215](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011139.jpg) + +### 算法实现 + +![image-20200624164327998](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011144.jpg) + +### 总结 + +![image-20200624164420239](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011149.jpg) + +## 表达式求值 + +![image-20200624164751528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011154.jpg) + +### 算数表达式是什么? + +由三个部分组成(操作数,运算符,界限符) + +![image-20200624165021200](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011203.jpg) + +### 前/后缀表达式的诞生 + +![image-20200624165107095](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011211.jpg) + +### 中/后/前缀表达式的区别 + +![image-20200624165500339](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011216.jpg) + +#### 中转后的过程: + +![image-20200624165755963](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011221.jpg) + +**上图中,后缀表达式的算术符的先后次序对应中缀表达式的生效的先后次序**,但是这是一定的吗? + +![image-20200624170300224](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011225.jpg) + +左优先原则,可保证运算顺序唯一性,以确定机算算法输出结果的唯一性!! + +![image-20200624190745666](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011717.jpg) + +#### 机算算法实现 + +![image-20200624191112704](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011725.jpg) + +![image-20200624191355054](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011729.jpg) + +### 中转前的过程 + +![image-20200624191538706](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011737.jpg) + +中转后和中转前的区别: + +![image-20200624191614443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011742.jpg) + +#### 中转前的机算过程: + +![image-20200624191810971](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011746.jpg) + +### 总结 + +![image-20200624191919379](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011751.jpg) + +"左优先"/“右优先”原则和左/右操作数不是专业说法,仅供理解! + +## 表达式求值——具体代码实现 + +![image-20200624192258712](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011755.jpg) + +### 中转后机算 + +手算过程: + +![image-20200624192506786](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011759.jpg) + +机算过程: + +![image-20200624193355396](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011804.jpg) + +### 中缀表达式的计算 + +![image-20200624193844266](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011809.jpg) + +![image-20200624194515343](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011813.jpg) + +CPU只能执行单个的加减乘除运算,上边这么搞的意义就是为了将高级程序语言编译成简单的机器码,让CPU去执行! + +### 总结 + +![image-20200624194707110](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011820.jpg) + +## 栈在递归中的应用 + +递归的过程就是函数调用的过程 + +![image-20200624195132597](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011839.jpg) + +![image-20200624195412187](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011847.jpg) + +### 适合用“递归”算法解决的问题 + +![image-20200624195452395](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011853.jpg) + +求阶乘: + +![image-20200624195709306](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011857.jpg) + +**使用递归时,需要注意调用栈溢出!** + +![image-20200624200031925](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011902.jpg) + +**可以自定义栈将递归算法改造成非递归算法!** + +求斐波那契数列 + +![image-20200624200155981](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011906.jpg) + +### 总结 + +![image-20200624200214150](https://tva1.sinaimg.cn/large/007S8ZIlly1gg3mrhq6wnj30mq0adtbj.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用.md b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用.md index 24e9910..8c69ae2 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/Doc_2_8_队列的应用.md @@ -1,27 +1,27 @@ -# 队列的应用 - -## 树的层次遍历 - -提示:不知道树这种数据结构的同学,可以考虑先跳过本文内容,等了解树之后,再来康康~ - -![image-20200624200711109](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011917.jpg) - -详细实现内容在树的章节实现! - -## 图的广度优先遍历 - -遍历是指找出所有元素节点 - -![image-20200624200822823](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011940.jpg) - -## 队列在操作系统中的应用 - -**CPU资源分配问题** - -![image-20200624200936738](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011944.jpg) - -**打印数据缓冲区** - -![image-20200624201203709](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011949.jpg) - - +# 队列的应用 + +## 树的层次遍历 + +提示:不知道树这种数据结构的同学,可以考虑先跳过本文内容,等了解树之后,再来康康~ + +![image-20200624200711109](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011917.jpg) + +详细实现内容在树的章节实现! + +## 图的广度优先遍历 + +遍历是指找出所有元素节点 + +![image-20200624200822823](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011940.jpg) + +## 队列在操作系统中的应用 + +**CPU资源分配问题** + +![image-20200624200936738](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011944.jpg) + +**打印数据缓冲区** + +![image-20200624201203709](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810011949.jpg) + + diff --git a/408Notes/DataStructure/DS_2_StackAndQueue/README.md b/408Notes/DataStructure/DS_2_StackAndQueue/README.md index 2b0858b..3f31dae 100644 --- a/408Notes/DataStructure/DS_2_StackAndQueue/README.md +++ b/408Notes/DataStructure/DS_2_StackAndQueue/README.md @@ -1,16 +1,16 @@ -# 栈和队列 - -## 本章目录 - -* [栈](Doc_2_0_栈.md) -* [顺序栈](Doc_2_1_顺序栈.md) -* [链栈](Doc_2_2_链栈.md) -* [队列](Doc_2_3_队列.md) -* [顺序队列](Doc_2_4_顺序队列.md) -* [链式队列](Doc_2_5_链式队列.md) -* [双端队列](Doc_2_6_双端队列.md) -* [栈的应用](Doc_2_7_栈的应用.md) -* [队列的应用](Doc_2_8_队列的应用.md) - - +# 栈和队列 + +## 本章目录 + +* [栈](Doc_2_0_栈.md) +* [顺序栈](Doc_2_1_顺序栈.md) +* [链栈](Doc_2_2_链栈.md) +* [队列](Doc_2_3_队列.md) +* [顺序队列](Doc_2_4_顺序队列.md) +* [链式队列](Doc_2_5_链式队列.md) +* [双端队列](Doc_2_6_双端队列.md) +* [栈的应用](Doc_2_7_栈的应用.md) +* [队列的应用](Doc_2_8_队列的应用.md) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/Doc_3_0_串.md b/408Notes/DataStructure/DS_3_String/Doc_3_0_串.md index e16cf41..8d53e38 100644 --- a/408Notes/DataStructure/DS_3_String/Doc_3_0_串.md +++ b/408Notes/DataStructure/DS_3_String/Doc_3_0_串.md @@ -1,26 +1,26 @@ -# 串 - -![image-20200803212400697](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012004.jpg) - -## 定义 - -![image-20200803212845879](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012009.jpg) - -![image-20200803213034578](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012302.jpg) - -## 基本操作 - -![image-20200803213802729](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012312.jpg) - -### 比较操作 - -![image-20200803214249875](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012325.jpg) - -### 字符集编码 - -![image-20200803214352811](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012329.jpg) - -![image-20200803215953538](https://tva1.sinaimg.cn/large/007S8ZIlly1ghdyy8zrrwj31sq0u0qv5.jpg) - - +# 串 + +![image-20200803212400697](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012004.jpg) + +## 定义 + +![image-20200803212845879](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012009.jpg) + +![image-20200803213034578](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012302.jpg) + +## 基本操作 + +![image-20200803213802729](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012312.jpg) + +### 比较操作 + +![image-20200803214249875](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012325.jpg) + +### 字符集编码 + +![image-20200803214352811](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012329.jpg) + +![image-20200803215953538](https://tva1.sinaimg.cn/large/007S8ZIlly1ghdyy8zrrwj31sq0u0qv5.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/Doc_3_1_串的存储结构.md b/408Notes/DataStructure/DS_3_String/Doc_3_1_串的存储结构.md index aaa6da3..1c7e9e0 100644 --- a/408Notes/DataStructure/DS_3_String/Doc_3_1_串的存储结构.md +++ b/408Notes/DataStructure/DS_3_String/Doc_3_1_串的存储结构.md @@ -1,30 +1,30 @@ - -# 存储结构 - -![image-20200803214458664](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012341.jpg) - -## 顺序存储与堆分配存储 - -![image-20200803214622356](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012400.jpg) - -![image-20200803215036742](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012407.jpg) - -方案二的字符串长度不可以超过255 - -## 块链存储 - -![image-20200803215219679](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012416.jpg) - -## 基本操作的实现 - -![image-20200803215331395](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012427.jpg) - -![image-20200803215415087](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012432.jpg) - -![image-20200803215555916](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012444.jpg) - -![image-20200803215846955](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012449.jpg) - -![image-20200803215910897](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012455.jpg) - + +# 存储结构 + +![image-20200803214458664](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012341.jpg) + +## 顺序存储与堆分配存储 + +![image-20200803214622356](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012400.jpg) + +![image-20200803215036742](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012407.jpg) + +方案二的字符串长度不可以超过255 + +## 块链存储 + +![image-20200803215219679](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012416.jpg) + +## 基本操作的实现 + +![image-20200803215331395](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012427.jpg) + +![image-20200803215415087](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012432.jpg) + +![image-20200803215555916](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012444.jpg) + +![image-20200803215846955](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012449.jpg) + +![image-20200803215910897](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012455.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/Doc_3_2_模式匹配.md b/408Notes/DataStructure/DS_3_String/Doc_3_2_模式匹配.md index c59de06..d588ff8 100644 --- a/408Notes/DataStructure/DS_3_String/Doc_3_2_模式匹配.md +++ b/408Notes/DataStructure/DS_3_String/Doc_3_2_模式匹配.md @@ -1,27 +1,27 @@ -# 模式匹配 - -![image-20200803220247955](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012517.jpg) - -## 朴素模式匹配算法 - -![image-20200803221038452](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012522.jpg) - -![image-20200803224601338](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012527.jpg) - -![image-20200803231428235](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012623.jpg) - -### 性能分析 - -最好时间复杂度 - -![image-20200803231735244](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012632.jpg) - -最坏时间复杂度 - -![image-20200803232029485](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012636.jpg) - -思想总结 - -![image-20200803232154853](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012908.jpg) - +# 模式匹配 + +![image-20200803220247955](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012517.jpg) + +## 朴素模式匹配算法 + +![image-20200803221038452](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012522.jpg) + +![image-20200803224601338](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012527.jpg) + +![image-20200803231428235](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012623.jpg) + +### 性能分析 + +最好时间复杂度 + +![image-20200803231735244](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012632.jpg) + +最坏时间复杂度 + +![image-20200803232029485](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012636.jpg) + +思想总结 + +![image-20200803232154853](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012908.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/Doc_3_3_KMP算法.md b/408Notes/DataStructure/DS_3_String/Doc_3_3_KMP算法.md index 2fff246..6d39628 100644 --- a/408Notes/DataStructure/DS_3_String/Doc_3_3_KMP算法.md +++ b/408Notes/DataStructure/DS_3_String/Doc_3_3_KMP算法.md @@ -1,57 +1,57 @@ -# KMP 算法 - -简单模式匹配的缺点 - -![image-20200804224435660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012916.jpg) - -改进思想 - -![image-20200804224530991](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012921.jpg) - -情况一 - -![image-20200804224626232](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012925.jpg) - -![image-20200804224704994](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012936.jpg) - -![image-20200804224731389](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012941.jpg) - -情况二 - -![image-20200804224917143](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012945.jpg) - -情况三: - -![iShot2020-08-04下午10.51.24](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012950.jpg) - -4这里有可能多比较一次:因为4和6已经不等,但是1和6相同,这里仍会期待1和6相同,再进行一次比较,所以这里它并不是最优的算法,但是相比于朴素模式匹配,它还是少对比了两次 - -![image-20200804225536657](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012954.jpg) - -同理j指向3时少对比1次 - -总结: - -![image-20200804230434402](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012959.jpg) - -## 具体代码实现 - -![image-20200804230554660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013008.jpg) - -### 求next数组 - -![image-20200805131252851](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013017.jpg) - -![image-20200805131431528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013022.jpg) - -![image-20200805131611443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013031.jpg) - -### 代码实现求next数组 - -![image-20200805131821691](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013038.jpg) - -## 回顾总结 - -![image](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013045.jpg) - +# KMP 算法 + +简单模式匹配的缺点 + +![image-20200804224435660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012916.jpg) + +改进思想 + +![image-20200804224530991](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012921.jpg) + +情况一 + +![image-20200804224626232](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012925.jpg) + +![image-20200804224704994](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012936.jpg) + +![image-20200804224731389](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012941.jpg) + +情况二 + +![image-20200804224917143](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012945.jpg) + +情况三: + +![iShot2020-08-04下午10.51.24](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012950.jpg) + +4这里有可能多比较一次:因为4和6已经不等,但是1和6相同,这里仍会期待1和6相同,再进行一次比较,所以这里它并不是最优的算法,但是相比于朴素模式匹配,它还是少对比了两次 + +![image-20200804225536657](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012954.jpg) + +同理j指向3时少对比1次 + +总结: + +![image-20200804230434402](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810012959.jpg) + +## 具体代码实现 + +![image-20200804230554660](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013008.jpg) + +### 求next数组 + +![image-20200805131252851](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013017.jpg) + +![image-20200805131431528](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013022.jpg) + +![image-20200805131611443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013031.jpg) + +### 代码实现求next数组 + +![image-20200805131821691](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013038.jpg) + +## 回顾总结 + +![image](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013045.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化.md b/408Notes/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化.md index e0cf6f2..a4c8107 100644 --- a/408Notes/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化.md +++ b/408Notes/DataStructure/DS_3_String/Doc_3_4_KMP算法的优化.md @@ -1,15 +1,15 @@ -# KMP 算法的优化 - -例1:KMP算法存在的问题 - -![image-20200805132559485](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013053.jpg) - -例子2: - -![image-20200805132959285](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013100.png) - -总结: - -![image-20200805133126340](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013109.jpg) - +# KMP 算法的优化 + +例1:KMP算法存在的问题 + +![image-20200805132559485](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013053.jpg) + +例子2: + +![image-20200805132959285](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013100.png) + +总结: + +![image-20200805133126340](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013109.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_3_String/README.md b/408Notes/DataStructure/DS_3_String/README.md index 5f23e24..8709a0d 100644 --- a/408Notes/DataStructure/DS_3_String/README.md +++ b/408Notes/DataStructure/DS_3_String/README.md @@ -1,16 +1,16 @@ -# 串 - -## 本章目录 - -+ [串](Doc_3_0_串.md) - -+ [串的存储结构](Doc_3_1_串的存储结构.md) - -+ [模式匹配](Doc_3_2_模式匹配.md) - -+ [KMP算法](Doc_3_3_KMP算法.md) - -+ [KMP算法的优化](Doc_3_4_KMP算法的优化.md) - - +# 串 + +## 本章目录 + ++ [串](Doc_3_0_串.md) + ++ [串的存储结构](Doc_3_1_串的存储结构.md) + ++ [模式匹配](Doc_3_2_模式匹配.md) + ++ [KMP算法](Doc_3_3_KMP算法.md) + ++ [KMP算法的优化](Doc_3_4_KMP算法的优化.md) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树.md index 1a6030d..9514584 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_0_树.md @@ -1,31 +1,31 @@ -# 树 - -![image-20200805134038848](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvre4k98j31rb0u0x1u.jpg) - -## 基本概念 - -![image-20200805134446365](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvvovsbqj31mr0u0npf.jpg) - -![image-20200805134643335](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvxq9vmyj31n60u0kjm.jpg) - -树的应用 - -![image-20200805134753956](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvyy9mbej31qu0u0b29.jpg) - -## 结点之间的关系描述 - -![image-20200805135051427](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw2189u0j31k80u01ky.jpg) - -结点、树的属性描述 - -![image-20200805135229378](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw3pywvsj31t40u0e81.jpg) - -![image-20200805135343002](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw4zzwvcj31oo0u0x6p.jpg) - -![image-20200805135455518](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw69ehx0j31hm0u0b2a.jpg) - -总结: - -![image-20200805135536601](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw6z51b3j31f30u0b29.jpg) - +# 树 + +![image-20200805134038848](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvre4k98j31rb0u0x1u.jpg) + +## 基本概念 + +![image-20200805134446365](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvvovsbqj31mr0u0npf.jpg) + +![image-20200805134643335](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvxq9vmyj31n60u0kjm.jpg) + +树的应用 + +![image-20200805134753956](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfvyy9mbej31qu0u0b29.jpg) + +## 结点之间的关系描述 + +![image-20200805135051427](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw2189u0j31k80u01ky.jpg) + +结点、树的属性描述 + +![image-20200805135229378](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw3pywvsj31t40u0e81.jpg) + +![image-20200805135343002](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw4zzwvcj31oo0u0x6p.jpg) + +![image-20200805135455518](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw69ehx0j31hm0u0b2a.jpg) + +总结: + +![image-20200805135536601](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/007S8ZIlly1ghfw6z51b3j31f30u0b29.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_10_树的存储结构.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_10_树的存储结构.md index ef2b45e..c6f3d80 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_10_树的存储结构.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_10_树的存储结构.md @@ -1,4 +1,4 @@ -# 数的存储结构 - - +# 数的存储结构 + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_11_数和森林的遍历.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_11_数和森林的遍历.md index 145ac36..76c5347 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_11_数和森林的遍历.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_11_数和森林的遍历.md @@ -1,4 +1,4 @@ -# 数和森林的遍历 - - +# 数和森林的遍历 + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_12_二叉排序树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_12_二叉排序树.md index 905bdc2..d554f29 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_12_二叉排序树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_12_二叉排序树.md @@ -1,4 +1,4 @@ -# 二叉排序树 - - - +# 二叉排序树 + + + diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_13_平衡二叉树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_13_平衡二叉树.md index af9f514..d327dce 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_13_平衡二叉树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_13_平衡二叉树.md @@ -1,5 +1,5 @@ -# 平衡二叉树 - - - - +# 平衡二叉树 + + + + diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_14_哈夫曼树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_14_哈夫曼树.md index d190a78..c9b94f0 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_14_哈夫曼树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_14_哈夫曼树.md @@ -1,4 +1,4 @@ -# 哈夫曼树 - - +# 哈夫曼树 + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质.md index 65fb6b7..0f3e685 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_1_树的性质.md @@ -1,17 +1,17 @@ -# 树的性质 - -![image-20200805182003121](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013150.jpg) - -![image-20200805182120443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013201.jpg) - -![image-20200805182206568](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013212.jpg) - -![image-20200805182311435](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013216.jpg) - -![image-20200805182352714](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013221.jpg) - -![image-20200805182505953](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013225.jpg) - -![image-20200805182524995](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013230.jpg) - +# 树的性质 + +![image-20200805182003121](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013150.jpg) + +![image-20200805182120443](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013201.jpg) + +![image-20200805182206568](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013212.jpg) + +![image-20200805182311435](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013216.jpg) + +![image-20200805182352714](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013221.jpg) + +![image-20200805182505953](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013225.jpg) + +![image-20200805182524995](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013230.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树.md index 35a32f8..f82b5ae 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_2_二叉树.md @@ -1,21 +1,21 @@ -# 二叉树 - -![image-20200805182546741](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013238.jpg) - -基本定义: - -![image-20200805182702622](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013246.jpg) - -常见术语: - -![image-20200805183043813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013259.jpg) - -![image-20200805183250777](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013306.jpg) - -![image-20200805183426726](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013313.jpg) - -总结: - -![image-20200805183503356](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg49qdqdxj320l0u07wh.jpg) - +# 二叉树 + +![image-20200805182546741](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013238.jpg) + +基本定义: + +![image-20200805182702622](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013246.jpg) + +常见术语: + +![image-20200805183043813](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013259.jpg) + +![image-20200805183250777](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013306.jpg) + +![image-20200805183426726](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013313.jpg) + +总结: + +![image-20200805183503356](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg49qdqdxj320l0u07wh.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质.md index 90e8b2e..de8dbe2 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_3_二叉树的性质.md @@ -1,19 +1,19 @@ -# 二叉树的性质 - -![image-20200805183656513](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013326.jpg) - -![image-20200805183736605](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013333.jpg) - -![image-20200805183803880](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013338.jpg) - -满二叉树有最多结点 - -## 完全二叉树的性质 - -![image-20200805184001845](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013350.jpg) - -![image-20200805184122555](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013400.jpg) - -![image-20200805184243281](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg4hpehe1j31ow0u0qv5.jpg) - +# 二叉树的性质 + +![image-20200805183656513](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013326.jpg) + +![image-20200805183736605](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013333.jpg) + +![image-20200805183803880](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013338.jpg) + +满二叉树有最多结点 + +## 完全二叉树的性质 + +![image-20200805184001845](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013350.jpg) + +![image-20200805184122555](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013400.jpg) + +![image-20200805184243281](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg4hpehe1j31ow0u0qv5.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构.md index 72dfe34..4d26f4e 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_4_二叉树的存储结构.md @@ -1,33 +1,33 @@ -# 二叉树的存储结构 - -## 顺序存储 - -![image-20200805184430918](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013411.jpg) - -![image-20200805184628458](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013416.jpg) - -问题: - -![image-20200805184713701](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013420.jpg) - -![image-20200805184820083](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013424.jpg) - -判断左右孩子是否存在,只能使用 IsEmpty 变量 - -![image-20200805185018264](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013429.jpg) - -## 链式存储 - -![image-20200805185151701](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013434.jpg) - -![image-20200805185245744](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013447.jpg) - -![image-20200805185454579](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013455.jpg) - -总结回顾: -![image-20200805185538146](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013555.jpg) - -![image-20200805185553685](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013603.jpg) - - +# 二叉树的存储结构 + +## 顺序存储 + +![image-20200805184430918](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013411.jpg) + +![image-20200805184628458](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013416.jpg) + +问题: + +![image-20200805184713701](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013420.jpg) + +![image-20200805184820083](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013424.jpg) + +判断左右孩子是否存在,只能使用 IsEmpty 变量 + +![image-20200805185018264](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013429.jpg) + +## 链式存储 + +![image-20200805185151701](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013434.jpg) + +![image-20200805185245744](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013447.jpg) + +![image-20200805185454579](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013455.jpg) + +总结回顾: +![image-20200805185538146](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013555.jpg) + +![image-20200805185553685](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013603.jpg) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历.md index f73c2b1..76b16d1 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_5_二叉树的遍历.md @@ -1,41 +1,41 @@ -# 二叉树的先中后序遍历 - -什么是遍历? - -![image-20200805185719033](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013609.jpg) - -![image-20200805185844474](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013613.jpg) - -## 先序遍历 - -![image-20200805190054413](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013618.jpg) - -## 中序遍历 - -![image-20200805190238269](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013622.jpg) - -## 后序遍历 - -![image-20200805190345489](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013630.jpg) - -例题:算数表达式的分析树 - -![image-20200805190634571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013648.jpg) - -例2:求树的深度 - -![image-20200805190929342](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013652.jpg) - -## 总结 - -![image-20200805190951986](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013657.jpg) - -## 二叉树的层序遍历 - -![image-20200805191125413](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013702.jpg) - -### 代码实现 - -![image-20200805191445914](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg5f1pfwcj31ju0u04qq.jpg) - +# 二叉树的先中后序遍历 + +什么是遍历? + +![image-20200805185719033](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013609.jpg) + +![image-20200805185844474](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013613.jpg) + +## 先序遍历 + +![image-20200805190054413](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013618.jpg) + +## 中序遍历 + +![image-20200805190238269](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013622.jpg) + +## 后序遍历 + +![image-20200805190345489](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013630.jpg) + +例题:算数表达式的分析树 + +![image-20200805190634571](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013648.jpg) + +例2:求树的深度 + +![image-20200805190929342](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013652.jpg) + +## 总结 + +![image-20200805190951986](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013657.jpg) + +## 二叉树的层序遍历 + +![image-20200805191125413](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013702.jpg) + +### 代码实现 + +![image-20200805191445914](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg5f1pfwcj31ju0u04qq.jpg) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造.md index 5907380..3049706 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_6_二叉树的构造.md @@ -1,35 +1,35 @@ -# 由先中后序遍历序列构造二叉树 - -不同二叉树的中序遍历 - -![image-20200805191801166](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013711.jpg) - -![image-20200805191851595](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013825.jpg) - -![image-20200805191913602](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013835.jpg) - -![image-20200805191946368](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013854.jpg) - -![image-20200805192027276](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013904.jpg) - -## 前+中 - -![image-20200805192120760](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013912.jpg) - -### 后+中 - -![image-20200805202834877](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013921.jpg) - -### 层+中 - -![image-20200805202945647](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013929.jpg) - -### 总结回顾 - -![image-20200805203145525](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg7n5qtacj31q00u0u0x.jpg) - -若前序、后序、层序序列两两组合,是否能确定唯一的一颗二叉树? - -答案是:不能,必须有中序序列划分左右子树🌲 - - +# 由先中后序遍历序列构造二叉树 + +不同二叉树的中序遍历 + +![image-20200805191801166](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013711.jpg) + +![image-20200805191851595](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013825.jpg) + +![image-20200805191913602](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013835.jpg) + +![image-20200805191946368](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013854.jpg) + +![image-20200805192027276](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013904.jpg) + +## 前+中 + +![image-20200805192120760](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013912.jpg) + +### 后+中 + +![image-20200805202834877](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013921.jpg) + +### 层+中 + +![image-20200805202945647](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810013929.jpg) + +### 总结回顾 + +![image-20200805203145525](https://tva1.sinaimg.cn/large/007S8ZIlly1ghg7n5qtacj31q00u0u0x.jpg) + +若前序、后序、层序序列两两组合,是否能确定唯一的一颗二叉树? + +答案是:不能,必须有中序序列划分左右子树🌲 + + diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树.md index c15f615..15ae30e 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_7_线索二叉树.md @@ -1,45 +1,45 @@ -# 线索二叉树 - -![image-20200810110140084](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810110140.png) - -## 二叉树的中序遍历序列存在的问题 - -![image-20200810133755960](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810133756.png) - -**不能直接从指定结点开始中序遍历** - -## 中序线索二叉树 - -![image-20200810134119656](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134119.png) - -### 线索二叉树的存储结构 - -![image-20200810134318361](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134318.png) - -![image-20200810134401938](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134401.png) - -## 先序线索二叉树 - -![image-20200810134451790](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134451.png) - -### 先序线索二叉树的存储结构 - -![image-20200810134658200](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134658.png) - -## 后序线索二叉树 - -![image-20200810134712565](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134712.png) - -### 后序线索二叉树的存储结构 - -![image-20200810134733209](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134733.png) - -## 对比 - -![image-20200810134806808](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134806.png) - -## 总结回顾 - -![image-20200810134838622](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134838.png) - +# 线索二叉树 + +![image-20200810110140084](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810110140.png) + +## 二叉树的中序遍历序列存在的问题 + +![image-20200810133755960](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810133756.png) + +**不能直接从指定结点开始中序遍历** + +## 中序线索二叉树 + +![image-20200810134119656](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134119.png) + +### 线索二叉树的存储结构 + +![image-20200810134318361](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134318.png) + +![image-20200810134401938](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134401.png) + +## 先序线索二叉树 + +![image-20200810134451790](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134451.png) + +### 先序线索二叉树的存储结构 + +![image-20200810134658200](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134658.png) + +## 后序线索二叉树 + +![image-20200810134712565](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134712.png) + +### 后序线索二叉树的存储结构 + +![image-20200810134733209](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134733.png) + +## 对比 + +![image-20200810134806808](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134806.png) + +## 总结回顾 + +![image-20200810134838622](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810134838.png) + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化.md index 7dd8371..7089a15 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_8_二叉树的线索化.md @@ -1,15 +1,15 @@ -# 二叉树的线索化 - -![image-20200810105331721](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810105331.png) - -用土办法找到中序前驱 - -![image-20200810134958011](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810135203.png) - -## 中序线索化 - -![image-20200810135151257](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810135151.png) - - - +# 二叉树的线索化 + +![image-20200810105331721](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810105331.png) + +用土办法找到中序前驱 + +![image-20200810134958011](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810135203.png) + +## 中序线索化 + +![image-20200810135151257](https://cdn.jsdelivr.net/gh/KimYangOfCat/MyPicStorage/2021-CSPostgraduate-408/20200810135151.png) + + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_9_线索二叉树的前驱和后继.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_9_线索二叉树的前驱和后继.md index f8a3392..47e1335 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_9_线索二叉树的前驱和后继.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/Doc_4_9_线索二叉树的前驱和后继.md @@ -1,4 +1,4 @@ -# 找线索二叉树结点的前驱和后继 - - - +# 找线索二叉树结点的前驱和后继 + + + diff --git a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/README.md b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/README.md index 6ff2889..8154438 100644 --- a/408Notes/DataStructure/DS_4_TreeAndBinaryTree/README.md +++ b/408Notes/DataStructure/DS_4_TreeAndBinaryTree/README.md @@ -1,17 +1,17 @@ -# 树和二叉树 - - -## 本章目录 - -* [树](Doc_4_0_树.md) -* [树的性质](Doc_4_1_树的性质.md) -* [二叉树](Doc_4_2_二叉树.md) -* [二叉树的性质](Doc_4_3_二叉树的性质.md) -* [二叉树的存储结构](Doc_4_4_二叉树的存储结构.md) -* [二叉树的遍历](Doc_4_5_二叉树的遍历.md) -* [二叉树的构造](Doc_4_6_二叉树的构造.md) -* [线索二叉树](Doc_4_7_线索二叉树.md) -* [二叉树的线索化](Doc_4_8_二叉树的线索化.md) - - +# 树和二叉树 + + +## 本章目录 + +* [树](Doc_4_0_树.md) +* [树的性质](Doc_4_1_树的性质.md) +* [二叉树](Doc_4_2_二叉树.md) +* [二叉树的性质](Doc_4_3_二叉树的性质.md) +* [二叉树的存储结构](Doc_4_4_二叉树的存储结构.md) +* [二叉树的遍历](Doc_4_5_二叉树的遍历.md) +* [二叉树的构造](Doc_4_6_二叉树的构造.md) +* [线索二叉树](Doc_4_7_线索二叉树.md) +* [二叉树的线索化](Doc_4_8_二叉树的线索化.md) + + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_5_Graph/Doc_5_0_图.md b/408Notes/DataStructure/DS_5_Graph/Doc_5_0_图.md index 7c15b42..8e4b54f 100644 --- a/408Notes/DataStructure/DS_5_Graph/Doc_5_0_图.md +++ b/408Notes/DataStructure/DS_5_Graph/Doc_5_0_图.md @@ -1,5 +1,5 @@ -# 图 - - - - +# 图 + + + + diff --git a/408Notes/DataStructure/DS_5_Graph/Doc_5_1_图的存储结构.md b/408Notes/DataStructure/DS_5_Graph/Doc_5_1_图的存储结构.md index 26aefcc..7ef1185 100644 --- a/408Notes/DataStructure/DS_5_Graph/Doc_5_1_图的存储结构.md +++ b/408Notes/DataStructure/DS_5_Graph/Doc_5_1_图的存储结构.md @@ -1,4 +1,4 @@ -# 图的基本操作 - - - +# 图的基本操作 + + + diff --git a/408Notes/DataStructure/DS_5_Graph/Doc_5_2_图的基本操作.md b/408Notes/DataStructure/DS_5_Graph/Doc_5_2_图的基本操作.md index 82c7f69..a17afff 100644 --- a/408Notes/DataStructure/DS_5_Graph/Doc_5_2_图的基本操作.md +++ b/408Notes/DataStructure/DS_5_Graph/Doc_5_2_图的基本操作.md @@ -1,3 +1,3 @@ -# 图的基本操作 - +# 图的基本操作 + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_5_Graph/Doc_5_3_图的遍历.md b/408Notes/DataStructure/DS_5_Graph/Doc_5_3_图的遍历.md index 4b5468c..94fae27 100644 --- a/408Notes/DataStructure/DS_5_Graph/Doc_5_3_图的遍历.md +++ b/408Notes/DataStructure/DS_5_Graph/Doc_5_3_图的遍历.md @@ -1,3 +1,3 @@ -# 图的遍历 - +# 图的遍历 + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_5_Graph/README.md b/408Notes/DataStructure/DS_5_Graph/README.md index 8a9c73c..5f55863 100644 --- a/408Notes/DataStructure/DS_5_Graph/README.md +++ b/408Notes/DataStructure/DS_5_Graph/README.md @@ -1,7 +1,7 @@ -# 图 - -##本章目录 - -内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 - +# 图 + +##本章目录 + +内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_6_Search/Doc_6_0_搜索.md b/408Notes/DataStructure/DS_6_Search/Doc_6_0_搜索.md index a45a01c..b78cd5f 100644 --- a/408Notes/DataStructure/DS_6_Search/Doc_6_0_搜索.md +++ b/408Notes/DataStructure/DS_6_Search/Doc_6_0_搜索.md @@ -1,3 +1,3 @@ -# 搜索 - +# 搜索 + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_6_Search/README.md b/408Notes/DataStructure/DS_6_Search/README.md index 0e92a7d..8cfe674 100644 --- a/408Notes/DataStructure/DS_6_Search/README.md +++ b/408Notes/DataStructure/DS_6_Search/README.md @@ -1,6 +1,6 @@ -# 查找 - -## 本章目录 -内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 - +# 查找 + +## 本章目录 +内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 + \ No newline at end of file diff --git a/408Notes/DataStructure/DS_7_Sort/README.md b/408Notes/DataStructure/DS_7_Sort/README.md index c71f54d..2a6eac9 100644 --- a/408Notes/DataStructure/DS_7_Sort/README.md +++ b/408Notes/DataStructure/DS_7_Sort/README.md @@ -1,4 +1,4 @@ -# 排序 - -## 本章目录 +# 排序 + +## 本章目录 内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 \ No newline at end of file diff --git a/408Notes/DataStructure/README.md b/408Notes/DataStructure/README.md index 1c7a64f..dba9c42 100644 --- a/408Notes/DataStructure/README.md +++ b/408Notes/DataStructure/README.md @@ -1,14 +1,14 @@ -# 数据结构 - -## 章节目录 -* [绪论](DS_0_Introduction) -* [线性表](DS_1_LinearList) -* [栈与队列](DS_2_StackAndQueue) -* [字符串](DS_3_String) -* [树与二叉树](DS_4_TreeAndBinaryTree) -* [图](DS_5_Graph) -* [查找](DS_6_Search) -* [排序](DS_7_Sort) - - - +# 数据结构 + +## 章节目录 +* [绪论](DS_0_Introduction) +* [线性表](DS_1_LinearList) +* [栈与队列](DS_2_StackAndQueue) +* [字符串](DS_3_String) +* [树与二叉树](DS_4_TreeAndBinaryTree) +* [图](DS_5_Graph) +* [查找](DS_6_Search) +* [排序](DS_7_Sort) + + + diff --git a/408Notes/OperatingSystem/README.md b/408Notes/OperatingSystem/README.md index 52c92b7..35dcd3c 100644 --- a/408Notes/OperatingSystem/README.md +++ b/408Notes/OperatingSystem/README.md @@ -1,11 +1,11 @@ -# 操作系统 -内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 - - - - - - - - - +# 操作系统 +内容建设中~👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧👨🏻‍🔧 + + + + + + + + + diff --git a/408Notes/README.md b/408Notes/README.md index a59b831..6c9b4f2 100644 --- a/408Notes/README.md +++ b/408Notes/README.md @@ -1,183 +1,183 @@ ---- -home: true -heroImage: /icons@2x.png -heroText: 2021 计算机考研 408 专业课 -tagline: 2021-CSPostgraduate-408 -actionText: 开始阅读 → -actionLink: /DataStructure/ -footer: GPL Licensed | Copyright © 2020-present Kim Yang ---- -
- -![DataStructure](https://img.shields.io/static/v1?label=&message=DataStructure&color=brightgreen) -![ComputerOrganization](https://img.shields.io/static/v1?label=&message=ComputerOrganization&color=blueviolet) -![ComputerNetWork](https://img.shields.io/static/v1?label=&message=ComputerNetWork&color=blue) -![OperatingSystem](https://img.shields.io/static/v1?label=&message=OperatingSystem&color=important) - -
- - -本仓库主要记录了 CS 考研 408 专业课的一些真题资料、笔记、思维导图以及算法源码。 - -关于项目的介绍博文:[Blog](https://kimyang.cn/posts/2020-08-31-408.html) 、[CSDN](https://blog.csdn.net/weixin_43316691/article/details/108634030) 、[知乎](https://zhuanlan.zhihu.com/p/249377361) 。 - -## 21年考408的院校(信息来源于网络,更准确的信息请于各高校官网查询) - -### 985高校 - -| 浙江大学 | 上海交通大学 | 同济大学 | 中国科学技术大学 |武汉大学【新增】 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |:----------------------------------------------------------: | -| ![浙江大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ZJU.png) | ![上海交通大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SHJTU.webp) | ![同济大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TJU.webp) | ![中国科学技术大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-CSTU.png) | ![武汉大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-WHU.jpg) | - -| 南开大学【新增】 | 华东师范大学
【新增】 | 中山大学 | 复旦大学【新增】 | 华南理工大学 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![南开大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-NKU.png) | ![华东师范大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ECNU.png) | ![中山大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SYU.jpg) | ![复旦大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-FDU.jpg) | ![华南理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TSCU.jpg) | - -### 211高校 - -| 海南大学 | 广西大学 | 宁夏大学 | 贵州大学
【新增】 | 青海大学 | 上海大学 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![海南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HNU.jpg) | ![广西大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GXU.jpg) | ![宁夏大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-NXU.jpg) | ![贵州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GZU.png) | ![青海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-QHU.jpg) | ![上海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-SHU.png) | - -| 郑州大学
【新增】 | 云南大学
【新增】 | 河北工业大学
【新增】 | 华中农业大学
【新增】 | 西南财经大学 | 武汉理工大学
【新增】 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![郑州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-ZZU.jpg) | ![云南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-YNU.jpg) | ![河北工业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HBTU.webp) | ![华中农业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HZAU.jpg) | ![西南财经大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-FESU.jpg) | ![武汉理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-WHTU.jpg) | - -## 408 科目 - -### [数据结构](DataStructure) -`DataStructure`文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载 [ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) -#### [源码](DataStructure/Src) -408 所有科目基本都偏向理论,只有数据结构一门稍有实践性,故此动手写下所有数据结构源码,以章节分类整理,以供大家参考~ -##### 源码目录 -* [绪论](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_0_Introduction) -* [线性表](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_1_LinearList) -* [栈与队列](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_2_StackAndQueue) -* [字符串](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_3_String) -* [树与二叉树](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_4_TreeAndBinaryTree) -* [图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_5_Graph) -* [查找](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_6_Search) -* [排序](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_7_Sort) -##### 编程语言 -虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法!如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ - -#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/) -+ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/CSKaoYanVIPMindMap) - -#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**数据结构**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - - -### [计算机组成原理](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/) - -#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/) -+ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/CSKaoYanVIPMindMap) - -#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**计算机组成原理**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - -持续更新中~ -### [操作系统](OperatingSystem) - -#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/) -+ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/CSKaoYanVIPMindMap) - -持续更新中~ -#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**操作系统**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - -### [计算机网络](ComputerNetwork) - -#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/) -+ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/CSKaoYanVIPMindMap) - -持续更新中~ -#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**计算机网络**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - - -### 总结 -408四门科目,除了数据结构有一些代码的实操之外,其余三门课程都是以理论为主,所以学习它们的过程中还是建议以书本为主。 -即便是数据结构,在408的考试时数据结构也只是要求写出算法逻辑就好,并不要求代码有可执行性,所以对于一些喜欢敲代码的小伙伴, -不能一味沉浸在用键盘敲代码的状态中。为了提前适应考试,还是提前适应在纸上写代码的感觉。因为日常敲代码的过程中,智能的IDE会给你提供很大的帮助, -你只需要记住核心逻辑,但是在纸上写代码, 一些基本的语法还是🉐️ 熟悉,并能默写出来。 - -## 视频教程 -+ [数据结构](https://www.bilibili.com/video/BV1b7411N798) -+ [计算机组成原理](https://www.bilibili.com/video/BV1BE411D7ii) -+ [操作系统](https://www.bilibili.com/video/BV1YE411D7nH) -+ [计算机网络](https://www.bilibili.com/video/BV19E411D78Q) - -所有视频教程均来源于王道考研B站官方账号,视频大部分为旧版内容,但其实知识要点都是一样的,值得学习。其中也包含了部分新版视频,全部新版视频为收费内容,虽然白嫖很香😜 ,但建议在经济条件允许的条件下,支持正版👍🏻 ~ - -## 辅导书籍 - -### 王道系列 - -王道系列起源于[王道考研论坛](http://cskaoyan.com/),从它的论坛中,你能找到不少经验贴,非常值得关注!而王道系列辅导书籍,题量充足,知识点全面,可能更适合科班考研🈶️ 一定专业课基础的同学。 - -需要2021王道高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) 中下载。 -### 天勤系列 - -天勤系列,相比于王道更注重基础知识,,但是题量并没有王道的多。也正是由于它更注重基础,所以也许它更适合跨考计算机的同学。 - - -但是总的来说,辅导资料这一块儿还是适合自己的最好。所以对自己的知识储备有较为清晰的认识也许对你复习 408 更有帮助。 - -需要2021天勤高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8Dv1) 中下载。 - -## 教材 - -| 数据结构
严薇敏 | 计算机组成原理
唐朔飞 | 操作系统
汤子瀛 | 计算机网络
谢希仁 | 计算机网络
自顶向下方法 | -| :----------------------------------------------------------: | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| ![数据结构](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/DS0.jpg) | ![计算机组成原理](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CO0.jpg) | ![操作系统](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/OS0.png) | ![计算机网络](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN1.png) | ![计算机网络·自顶向下方法](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN0.jpg) | - -## 真题 -干净无水印的真题资源十分稀少可贵,在搜集的过程中,作者尽力找了一些干净无水印的资源,奈何个人力量有限,其中有些真题资源的质量仍不如人意。 - -目前本仓库只收录了[408 真题](408Exam),如果你有其他专业课或者更干净无水印的真题资源,欢迎提交 PR 或者在 issues 中提交相关资源的下载链接,感激不尽~ - -## 下载: - -~~### 镜像仓库:~~ - -~~本仓库与[ gitee 上的 CSPostgraduate-408-2021 仓库]()互为镜像仓库,保持同步更新。~~ - -~~若因网络问题无法在其一下载,可切换至另一仓库进行尝试~~ - ->由于仓库收录的资源越来越多,仓库体积已经超过 1.5GB,超过了 Gitee 单仓库体积上限,故无法保持再同步更新,非常抱歉~ -> ->后面,作者会不定期手动将本仓库打包至下文中的网盘中,大家可尝试下载~ - -### 其他下载途径: - -若因网络原因无法下载 Release 与真题中的资源,可点击下方网盘链接下载相应的资源: - -> 链接: [https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA](https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA) 提取码: hdqb -> -> 若网盘链接失效,可在 issues 中提醒作者更新嗷~ - -## 🔥 贡献 - -看到这里了,如果觉得对你有所帮助的话,不妨给本仓库点个 Star ⭐ ️吧! - -如果你有新的内容 📜 想要贡献到本仓库或者发现了本仓库的一些错误 🐛 ,👏🏻 欢迎阅读[贡献文档](CONTRIBUTE.md)提交Pr~ - -## 🍰 赞赏 -如果你觉得本仓库帮助到了你,欢迎你点击上方的 -[Sponsor](https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png) -按钮来赞助作者,这将会给作者更多更新的动力,感谢~ - -## ❤️ 致谢 -欢迎你前来占据前排 👏🏻 ~ - -## 许可证 +--- +home: true +heroImage: /icons@2x.png +heroText: 2021 计算机考研 408 专业课 +tagline: 2021-CSPostgraduate-408 +actionText: 开始阅读 → +actionLink: /DataStructure/ +footer: GPL Licensed | Copyright © 2020-present Kim Yang +--- +
+ +![DataStructure](https://img.shields.io/static/v1?label=&message=DataStructure&color=brightgreen) +![ComputerOrganization](https://img.shields.io/static/v1?label=&message=ComputerOrganization&color=blueviolet) +![ComputerNetWork](https://img.shields.io/static/v1?label=&message=ComputerNetWork&color=blue) +![OperatingSystem](https://img.shields.io/static/v1?label=&message=OperatingSystem&color=important) + +
+ + +本仓库主要记录了 CS 考研 408 专业课的一些真题资料、笔记、思维导图以及算法源码。 + +关于项目的介绍博文:[Blog](https://kimyang.cn/posts/2020-08-31-408.html) 、[CSDN](https://blog.csdn.net/weixin_43316691/article/details/108634030) 、[知乎](https://zhuanlan.zhihu.com/p/249377361) 。 + +## 21年考408的院校(信息来源于网络,更准确的信息请于各高校官网查询) + +### 985高校 + +| 浙江大学 | 上海交通大学 | 同济大学 | 中国科学技术大学 |武汉大学【新增】 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |:----------------------------------------------------------: | +| ![浙江大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ZJU.png) | ![上海交通大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SHJTU.webp) | ![同济大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TJU.webp) | ![中国科学技术大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-CSTU.png) | ![武汉大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-WHU.jpg) | + +| 南开大学【新增】 | 华东师范大学
【新增】 | 中山大学 | 复旦大学【新增】 | 华南理工大学 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![南开大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-NKU.png) | ![华东师范大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ECNU.png) | ![中山大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SYU.jpg) | ![复旦大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-FDU.jpg) | ![华南理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TSCU.jpg) | + +### 211高校 + +| 海南大学 | 广西大学 | 宁夏大学 | 贵州大学
【新增】 | 青海大学 | 上海大学 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![海南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HNU.jpg) | ![广西大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GXU.jpg) | ![宁夏大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-NXU.jpg) | ![贵州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GZU.png) | ![青海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-QHU.jpg) | ![上海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-SHU.png) | + +| 郑州大学
【新增】 | 云南大学
【新增】 | 河北工业大学
【新增】 | 华中农业大学
【新增】 | 西南财经大学 | 武汉理工大学
【新增】 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![郑州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-ZZU.jpg) | ![云南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-YNU.jpg) | ![河北工业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HBTU.webp) | ![华中农业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HZAU.jpg) | ![西南财经大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-FESU.jpg) | ![武汉理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-WHTU.jpg) | + +## 408 科目 + +### [数据结构](DataStructure) +`DataStructure`文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载 [ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) +#### [源码](DataStructure/Src) +408 所有科目基本都偏向理论,只有数据结构一门稍有实践性,故此动手写下所有数据结构源码,以章节分类整理,以供大家参考~ +##### 源码目录 +* [绪论](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_0_Introduction) +* [线性表](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_1_LinearList) +* [栈与队列](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_2_StackAndQueue) +* [字符串](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_3_String) +* [树与二叉树](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_4_TreeAndBinaryTree) +* [图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_5_Graph) +* [查找](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_6_Search) +* [排序](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/Src/DS_7_Sort) +##### 编程语言 +虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法!如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ + +#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/) ++ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/MindMap/CSKaoYanVIPMindMap) + +#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/DataStructure/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**数据结构**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + + +### [计算机组成原理](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/) + +#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/) ++ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/MindMap/CSKaoYanVIPMindMap) + +#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerOrganization/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**计算机组成原理**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + +持续更新中~ +### [操作系统](OperatingSystem) + +#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/) ++ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/MindMap/CSKaoYanVIPMindMap) + +持续更新中~ +#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/OperatingSystem/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**操作系统**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + +### [计算机网络](ComputerNetwork) + +#### [思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/) ++ [王道书籍上的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/MindMap/CSKaoYanVIPMindMap) + +持续更新中~ +#### [PPT](https://github.com/KimYangOfCat/CSPostgraduate-408-2021/tree/master/ComputerNetwork/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**计算机网络**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + + +### 总结 +408四门科目,除了数据结构有一些代码的实操之外,其余三门课程都是以理论为主,所以学习它们的过程中还是建议以书本为主。 +即便是数据结构,在408的考试时数据结构也只是要求写出算法逻辑就好,并不要求代码有可执行性,所以对于一些喜欢敲代码的小伙伴, +不能一味沉浸在用键盘敲代码的状态中。为了提前适应考试,还是提前适应在纸上写代码的感觉。因为日常敲代码的过程中,智能的IDE会给你提供很大的帮助, +你只需要记住核心逻辑,但是在纸上写代码, 一些基本的语法还是🉐️ 熟悉,并能默写出来。 + +## 视频教程 ++ [数据结构](https://www.bilibili.com/video/BV1b7411N798) ++ [计算机组成原理](https://www.bilibili.com/video/BV1BE411D7ii) ++ [操作系统](https://www.bilibili.com/video/BV1YE411D7nH) ++ [计算机网络](https://www.bilibili.com/video/BV19E411D78Q) + +所有视频教程均来源于王道考研B站官方账号,视频大部分为旧版内容,但其实知识要点都是一样的,值得学习。其中也包含了部分新版视频,全部新版视频为收费内容,虽然白嫖很香😜 ,但建议在经济条件允许的条件下,支持正版👍🏻 ~ + +## 辅导书籍 + +### 王道系列 + +王道系列起源于[王道考研论坛](http://cskaoyan.com/),从它的论坛中,你能找到不少经验贴,非常值得关注!而王道系列辅导书籍,题量充足,知识点全面,可能更适合科班考研🈶️ 一定专业课基础的同学。 + +需要2021王道高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) 中下载。 +### 天勤系列 + +天勤系列,相比于王道更注重基础知识,,但是题量并没有王道的多。也正是由于它更注重基础,所以也许它更适合跨考计算机的同学。 + + +但是总的来说,辅导资料这一块儿还是适合自己的最好。所以对自己的知识储备有较为清晰的认识也许对你复习 408 更有帮助。 + +需要2021天勤高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8Dv1) 中下载。 + +## 教材 + +| 数据结构
严薇敏 | 计算机组成原理
唐朔飞 | 操作系统
汤子瀛 | 计算机网络
谢希仁 | 计算机网络
自顶向下方法 | +| :----------------------------------------------------------: | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| ![数据结构](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/DS0.jpg) | ![计算机组成原理](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CO0.jpg) | ![操作系统](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/OS0.png) | ![计算机网络](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN1.png) | ![计算机网络·自顶向下方法](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN0.jpg) | + +## 真题 +干净无水印的真题资源十分稀少可贵,在搜集的过程中,作者尽力找了一些干净无水印的资源,奈何个人力量有限,其中有些真题资源的质量仍不如人意。 + +目前本仓库只收录了[408 真题](408Exam),如果你有其他专业课或者更干净无水印的真题资源,欢迎提交 PR 或者在 issues 中提交相关资源的下载链接,感激不尽~ + +## 下载: + +~~### 镜像仓库:~~ + +~~本仓库与[ gitee 上的 CSPostgraduate-408-2021 仓库]()互为镜像仓库,保持同步更新。~~ + +~~若因网络问题无法在其一下载,可切换至另一仓库进行尝试~~ + +>由于仓库收录的资源越来越多,仓库体积已经超过 1.5GB,超过了 Gitee 单仓库体积上限,故无法保持再同步更新,非常抱歉~ +> +>后面,作者会不定期手动将本仓库打包至下文中的网盘中,大家可尝试下载~ + +### 其他下载途径: + +若因网络原因无法下载 Release 与真题中的资源,可点击下方网盘链接下载相应的资源: + +> 链接: [https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA](https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA) 提取码: hdqb +> +> 若网盘链接失效,可在 issues 中提醒作者更新嗷~ + +## 🔥 贡献 + +看到这里了,如果觉得对你有所帮助的话,不妨给本仓库点个 Star ⭐ ️吧! + +如果你有新的内容 📜 想要贡献到本仓库或者发现了本仓库的一些错误 🐛 ,👏🏻 欢迎阅读[贡献文档](CONTRIBUTE.md)提交Pr~ + +## 🍰 赞赏 +如果你觉得本仓库帮助到了你,欢迎你点击上方的 +[Sponsor](https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png) +按钮来赞助作者,这将会给作者更多更新的动力,感谢~ + +## ❤️ 致谢 +欢迎你前来占据前排 👏🏻 ~ + +## 许可证 本仓库采用GPL许可证,希望能为开源世界贡献一份力量~ \ No newline at end of file diff --git a/408Notes/contact.md b/408Notes/contact.md index a32a590..7c5b883 100644 --- a/408Notes/contact.md +++ b/408Notes/contact.md @@ -1,11 +1,11 @@ -# 留言板 -如果你有任何关于项目的建议,疑问与催更等等,欢迎在下面的评论区留言哟~。 - -当然,如果你只想夸夸不经意间帮助到你的勤奋的我😉,也欢迎你在下面留言哟~ - -如果想要私聊一些问题的话,欢迎给我发送邮件。 - - - - +# 留言板 +如果你有任何关于项目的建议,疑问与催更等等,欢迎在下面的评论区留言哟~。 + +当然,如果你只想夸夸不经意间帮助到你的勤奋的我😉,也欢迎你在下面留言哟~ + +如果想要私聊一些问题的话,欢迎给我发送邮件。 + + + + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index cac970a..14a0871 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ -cmake_minimum_required(VERSION 3.15) -project(2021_CSKaoYan_408) - -set(CMAKE_CXX_STANDARD 14) - -# 遍历项目根目录下所有的 .cpp 文件 -# 排除掉leetcode 下的代码,其不需要在Clion 中编译运行! -file (GLOB_RECURSE files ./*.cpp ./*/*.cpp ./*/*/*.cpp ./*/*/*/*.cpp) -foreach (file ${files}) - string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file}) - add_executable (${exe} ${file}) - message (\ \ \ \ --\ src/${exe}.cpp\ will\ be\ compiled\ to\ bin/${exe}) +cmake_minimum_required(VERSION 3.15) +project(2021_CSKaoYan_408) + +set(CMAKE_CXX_STANDARD 14) + +# 遍历项目根目录下所有的 .cpp 文件 +# 排除掉leetcode 下的代码,其不需要在Clion 中编译运行! +file (GLOB_RECURSE files ./*.cpp ./*/*.cpp ./*/*/*.cpp ./*/*/*/*.cpp) +foreach (file ${files}) + string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file}) + add_executable (${exe} ${file}) + message (\ \ \ \ --\ src/${exe}.cpp\ will\ be\ compiled\ to\ bin/${exe}) endforeach () \ No newline at end of file diff --git a/CONTRIBUTE.md b/CONTRIBUTE.md index 31352fa..5feaf61 100644 --- a/CONTRIBUTE.md +++ b/CONTRIBUTE.md @@ -1,42 +1,42 @@ -# 贡献文档 -## 分支说明 - -- `master`: 默认分支,发布分支。 -- `beta`:测试分支,用于合并所有 PR 请求时,测试冲突及内容检查。 -- `dev`:作者个人开发分支。 -- `gh-pages`:web 端笔记发布分支,由 CI 根据 master 内容自动更新。 - -## 资源贡献 -目前本仓库急需干净无水印的各高校的专业课真题资源,如果你手中恰好有相关资源,欢迎👏提交 PR 或者在 issues 中留下相关资源的下载链接🔗,感激不尽~ - -### PR 说明 -由于目前本仓库只收录了 408 的历年真题,且全部存放在 `408Exam` 文件夹下; - -+ 如果你想要贡献的真题是 408 的,请在存放在 `408Exam` 文件夹下。 -+ 如果你想要贡献的是其学校专业课的真题资源,请在 `OtherExam` 文件夹下,以`专业课代码`新建文件夹,在该文件夹下再以 `学校名称`新建文件夹,然后在该文件夹下再以`专业课名称_学校名称_年份`命名相关资源文件。 - -## 工具说明 - -### 思维导图 - -所有以 `.xmind` 结尾的文件均是作者使用 `XMind` 软件制作出来的思维导图源文件,故推荐使用正版软件打开相关思维导图文件。 - -### IDE - -书写并运行源码使用的 IDE 是 `CLion`,其主要的配置文件是仓库根目录下的 `CMakeLists.txt` 文件。 - -## Web 笔记 - -本仓库的 Web 端笔记预览主要使用 `vuepress` 生成,使用的是默认主题,仅对颜色、Logo 等进行了个性化自定义。 - -Web 笔记主要存放在 `408Notes` 文件夹下,主要的包管理文件为 `/package.json`,主题相关的配置文件主要位于 `/408Notes/.vuepress` 文件夹中。 - -### Web 本地预览 - -1. 确保本地环境中有 `Node.js` 与 `Vue`,若无,可参考官网文档进行安装。 -2. 进入项目根目录,运行 `npm install` 或 `yarn isntall`,进行项目依赖初始化操作。前者使用 `npm` 进行包管理,后者使用 `yarn` 进行包管理。 -3. 启动开发环境,运行 `npm run dev` 或 `yarn dev`;启动完成之后,便可在游览器中访问:http://localhost:4080/ 查看效果。 - -## 致谢 - -欢迎你前来占据前排👏🏻~ +# 贡献文档 +## 分支说明 + +- `master`: 默认分支,发布分支。 +- `beta`:测试分支,用于合并所有 PR 请求时,测试冲突及内容检查。 +- `dev`:作者个人开发分支。 +- `gh-pages`:web 端笔记发布分支,由 CI 根据 master 内容自动更新。 + +## 资源贡献 +目前本仓库急需干净无水印的各高校的专业课真题资源,如果你手中恰好有相关资源,欢迎👏提交 PR 或者在 issues 中留下相关资源的下载链接🔗,感激不尽~ + +### PR 说明 +由于目前本仓库只收录了 408 的历年真题,且全部存放在 `408Exam` 文件夹下; + ++ 如果你想要贡献的真题是 408 的,请在存放在 `408Exam` 文件夹下。 ++ 如果你想要贡献的是其学校专业课的真题资源,请在 `OtherExam` 文件夹下,以`专业课代码`新建文件夹,在该文件夹下再以 `学校名称`新建文件夹,然后在该文件夹下再以`专业课名称_学校名称_年份`命名相关资源文件。 + +## 工具说明 + +### 思维导图 + +所有以 `.xmind` 结尾的文件均是作者使用 `XMind` 软件制作出来的思维导图源文件,故推荐使用正版软件打开相关思维导图文件。 + +### IDE + +书写并运行源码使用的 IDE 是 `CLion`,其主要的配置文件是仓库根目录下的 `CMakeLists.txt` 文件。 + +## Web 笔记 + +本仓库的 Web 端笔记预览主要使用 `vuepress` 生成,使用的是默认主题,仅对颜色、Logo 等进行了个性化自定义。 + +Web 笔记主要存放在 `408Notes` 文件夹下,主要的包管理文件为 `/package.json`,主题相关的配置文件主要位于 `/408Notes/.vuepress` 文件夹中。 + +### Web 本地预览 + +1. 确保本地环境中有 `Node.js` 与 `Vue`,若无,可参考官网文档进行安装。 +2. 进入项目根目录,运行 `npm install` 或 `yarn isntall`,进行项目依赖初始化操作。前者使用 `npm` 进行包管理,后者使用 `yarn` 进行包管理。 +3. 启动开发环境,运行 `npm run dev` 或 `yarn dev`;启动完成之后,便可在游览器中访问:http://localhost:4080/ 查看效果。 + +## 致谢 + +欢迎你前来占据前排👏🏻~ diff --git a/ComputerNetwork/MindMap/BookMindMap/README.md b/ComputerNetwork/MindMap/BookMindMap/README.md index 4851189..3cc7d65 100644 --- a/ComputerNetwork/MindMap/BookMindMap/README.md +++ b/ComputerNetwork/MindMap/BookMindMap/README.md @@ -1,7 +1,7 @@ -# 王道书本上的思维导图 - -+ [物理层](CN_1_物理层.xmind) -+ [数据链路层](CN_2_数据链路层.xmind) -+ [网络层](CN_3_网络层.xmind) -+ [传输层](CN_4_传输层.xmind) -+ [应用层](CN_5_应用层.xmind) +# 王道书本上的思维导图 + ++ [物理层](CN_1_物理层.xmind) ++ [数据链路层](CN_2_数据链路层.xmind) ++ [网络层](CN_3_网络层.xmind) ++ [传输层](CN_4_传输层.xmind) ++ [应用层](CN_5_应用层.xmind) diff --git a/ComputerNetwork/MindMap/CSKaoYanVIPMindMap/README.md b/ComputerNetwork/MindMap/CSKaoYanVIPMindMap/README.md index 682cb66..e860aad 100644 --- a/ComputerNetwork/MindMap/CSKaoYanVIPMindMap/README.md +++ b/ComputerNetwork/MindMap/CSKaoYanVIPMindMap/README.md @@ -1,7 +1,7 @@ -# 王道考研论坛 VIP 学员使用的思维导图 -+[计算机网络体系结构](CN_0_计算机网络体系结构.pdf) -+[物理层](CN_1_物理层.pdf) -+[数据链路层](CN_2_数据链路层.pdf) -+[网络层](CN_3_网络层.pdf) -+[传输层](CN_4_传输层.pdf) +# 王道考研论坛 VIP 学员使用的思维导图 ++[计算机网络体系结构](CN_0_计算机网络体系结构.pdf) ++[物理层](CN_1_物理层.pdf) ++[数据链路层](CN_2_数据链路层.pdf) ++[网络层](CN_3_网络层.pdf) ++[传输层](CN_4_传输层.pdf) +[应用层](CN_5_应用层.pdf) \ No newline at end of file diff --git a/ComputerNetwork/MindMap/PPTMindMap/CN_0_Introduction/README.md b/ComputerNetwork/MindMap/PPTMindMap/CN_0_Introduction/README.md index 1906a68..d5d8a5d 100644 --- a/ComputerNetwork/MindMap/PPTMindMap/CN_0_Introduction/README.md +++ b/ComputerNetwork/MindMap/PPTMindMap/CN_0_Introduction/README.md @@ -1,3 +1,3 @@ -# 第一章 计算机网络概述 思维导图 - - +# 第一章 计算机网络概述 思维导图 + + diff --git a/ComputerNetwork/MindMap/PPTMindMap/CN_1_PhysicalLayer/README.md b/ComputerNetwork/MindMap/PPTMindMap/CN_1_PhysicalLayer/README.md index 72acb5c..8245c0a 100644 --- a/ComputerNetwork/MindMap/PPTMindMap/CN_1_PhysicalLayer/README.md +++ b/ComputerNetwork/MindMap/PPTMindMap/CN_1_PhysicalLayer/README.md @@ -1,2 +1,2 @@ -# 第二章 物理层 思维导图 - +# 第二章 物理层 思维导图 + diff --git a/ComputerNetwork/MindMap/PPTMindMap/CN_2_DataLinkLayer/README.md b/ComputerNetwork/MindMap/PPTMindMap/CN_2_DataLinkLayer/README.md index e62d9e4..1be7f3b 100644 --- a/ComputerNetwork/MindMap/PPTMindMap/CN_2_DataLinkLayer/README.md +++ b/ComputerNetwork/MindMap/PPTMindMap/CN_2_DataLinkLayer/README.md @@ -1 +1 @@ -# 第三章 思维导图 思维导图 +# 第三章 思维导图 思维导图 diff --git a/ComputerNetwork/MindMap/PPTMindMap/README.md b/ComputerNetwork/MindMap/PPTMindMap/README.md index 7733c88..3520e32 100644 --- a/ComputerNetwork/MindMap/PPTMindMap/README.md +++ b/ComputerNetwork/MindMap/PPTMindMap/README.md @@ -1 +1 @@ -# 视频教程(PPT)中的思维导图 +# 视频教程(PPT)中的思维导图 diff --git a/ComputerNetwork/MindMap/README.md b/ComputerNetwork/MindMap/README.md index 705a835..fece39d 100644 --- a/ComputerNetwork/MindMap/README.md +++ b/ComputerNetwork/MindMap/README.md @@ -1,4 +1,4 @@ -# 思维导图 -+ [王道书籍上的思维导图](BookMindMap) -+ [视频教程PPT中的思维导图](PPTMindMap) +# 思维导图 ++ [王道书籍上的思维导图](BookMindMap) ++ [视频教程PPT中的思维导图](PPTMindMap) + [王道论坛VIP学员独享的思维导图](CSKaoYanVIPMindMap) \ No newline at end of file diff --git a/ComputerNetwork/README.md b/ComputerNetwork/README.md index aed68c3..c54ff8d 100644 --- a/ComputerNetwork/README.md +++ b/ComputerNetwork/README.md @@ -1,6 +1,6 @@ -# 计算机网络(ComputerNetwork) -## [思维导图](MindMap) -本科目的思维导图文件存放在 `MainMap` 文件夹下,均为 Xmind 源文件,下载后可直接在本地编辑修改。 - -## [PPT](PPT) -`PPT` 文件夹下存放的是 2021 王道考研视频课程讲解用的 PPT,以供大家快速查找知识点或着复习视频内容! +# 计算机网络(ComputerNetwork) +## [思维导图](MindMap) +本科目的思维导图文件存放在 `MainMap` 文件夹下,均为 Xmind 源文件,下载后可直接在本地编辑修改。 + +## [PPT](PPT) +`PPT` 文件夹下存放的是 2021 王道考研视频课程讲解用的 PPT,以供大家快速查找知识点或着复习视频内容! diff --git a/ComputerOrganization/MindMap/BookMindMap/CO_5_总线.xmind b/ComputerOrganization/MindMap/BookMindMap/CO_5_总线.xmind new file mode 100644 index 0000000000000000000000000000000000000000..cd935c55c84ed54e87a7d26551b095f1525e307e GIT binary patch literal 104043 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�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Ⓢ|Enubxri!IDe@93gWbg7PAiwi$ z?3OdYZq0i%cwzHs%0j-NGIqO!|5>F_4N#w_FQ#4Hwppm${X)?CtHI8UnN$Y8w4?jN zhi6-4x)2J;#8l~Qz<^&sg2(dD#R6Mp+CZn=zi$xl`#u9!;r!2^cel#)1DvN`9QVfM zeH<9>I7J4vweiCQNa-xARL`*N?t&o;%e2?0whY(U4>Bi|GixvojAan>7qrTJxJB|q zejvr?)KL^;_=mv1JCE;G*)ra~v%ssmcWpdz{0eZH2=muTZSJ_R&6gLn!IaGz{X*Hm zP7(Xup2%(Ddj$S02?IB%ApPSRM$s||V$?q=-nMm~Hrj23o!N*=_%48h3vd1g@J9!v z9=nN#Fg#ii{^{rcvanSqFR(YjHCqYBhEWBMOxgE}?OPX^O&t(5oBFhqfue%YS({7r z<1IoR2eb@|Hmra6XMh*LWfR>JW7V@oDCH4A(8wq>3qz*UfJ~v}n)h2}VgWNT_qj8q9nTV*l^ zxB5F$F=MqsJ>71{eP^pa@qx6fzOoPgwnQ@p!dH{NvxFxT;) zKB@fA!W_Nq_}z{%_+?=5gSkJ>9NeNzkHOx8ELQ>;2GBlGd(9$VAKRh?p@N`^pTqf` zQP~j<_L7W#&AxRowPU~>UoiZ7nQ;$GDm#8ZvQ@!__5pJVO+7?nqz!?)g1OvRW9!M2 zd=1PQ_%y=kw{zh=NVh%VY`0}^#)J8U?5K*@3|3hKKqf2Azo}DyXZ$DlqYH=6{0Slp zrGS=Bk7rx(7NN`meT^J) z1HG=JuVpu0eHhSjt6en%TV;9((pi)(o%xgADr5j!=Uoo)r(0xd0owsdcttbZukGMz z-)MObwskmPkP*v+sff`QWD(FhBhw}$)-9565bO4-!WqMZr`UB3$fKRIiKW;YUB6I%@rv>)*)AfcaSi7PK{orbG~mwwHIRCVc)*W!zrC&4id(v zBTU+|!b23YKL4simAN-(B-9DO_4I0AJvndQ8$Ehw9xjVDxVD<7fCKy&DYI@}gIq_? z4A&A=)P=R$bKO||)gN65OnSR~nqfo>q-9|&K|L`)|4P@Z!cp7{qA4HOb=t*Po}__aEY&e4Wfyd=_Uaa&aJ^MD zS~_TmqT>vjMWm-o%fIo@&Sg-{!EX2EWZs953a(6#`jBey2B zk6qtu7{-5~E^0p7NapvwgGI~CPwjudmVgq3!v$sn$jh|&Y&qLlvl%)wsdu)!Ud-5W zil+#}boHVZthHCSe}si}>(X4lk$kpk#)EUGW;xheiEqm}#uFaRs#Ky&8ar7?lWn@! z$A2WAcA_&sGX27zFDY|D(_L_hIbu1_XQ?w}2xWZhV0$}}rZwH21BXs<3|3F`V3p25 z36lleJtybFN7(r*JUz2UaV%9M2QI`C%VPx(HIZ{D#CJZ0riva|(#lvDAMHKAOvCR* zqEoFMvaaHoyJm%H`FeHQasKA)g1L>}0ccRo+i|&k8>+hlwCd&do!YaVe_y8!f@6eW z+hvpL>2BM1qRtRvh!RdyGCF2=>;6G~U;g|#+3@tU+fB5GGy6PcPPIIk1C94OQrx$3 zW33w(uj-!)x3{w0hq&Ez%Jnte*k)UJ=1={!)B>lL@?PV`w=S1bhz^Ma{+ma_59 zN~M)Ca0l|z{Zqe_SVzBv4lvokC=(b&oxFL+gO*=ziUcQ@*+z8@{S=?9%wEYOTDCl2 z2IQAviKSPkg{YS@WZHv}4vy)h5_qp1KF%X=hOTnZb!NYz_)HIHAEvfAgu-jKJ%g_y zj{YtgDMQP_uh*$pNT8GqB#j#s6WSDu=kvE`uW5+&5^2{()~h<`h=!EzqRy#OLrq&! z?sj5dhl9A`iIe$~vT^>bR*ItS!Ns@pkM_b-O1XYeWqBS>KR;#WDKa^zzmdrUCK2GV z=3E=w`w?&|1s*_e+u{cfALcbZEH)h}E@H!dKchu%Oifs5=+qvsEA1qOYi{zD_;n*(2 z=ccgi9FxF8B4}Q3#O_-xcdp?5#eTC#k}YXZ#*b;|5;l9Yx29AHSWr$&kn66vU5KL zl|=rKJcPP~UEK;#XfSfCyFn`RnlPRHj}1Tavvr9gInLOn?dAy1|8~|UZqTJN$22r) zAdw@|1v27<36>oDvDY_D^-w5MA+qfRlwgS?zFYOG>FRG_$?3)AEYHXH zcMx`>{csMBQ&dT6z}xX1h7M_L4t-`Z5gFzLu4J>yoD96lVj)fQM4Bwr%`oN>b0Trs zg+_Fk;@Q2N_{i|cB;JayNEWr|VUj)G3g=M0W&}@2a)Z!v$nsV7*Tm3vDApeO3HI<> ze;(R%SCp6r7h!d-ntqtQ%Sx7)hU?#vUjH{2Aa2B;LjveP=N2sg^8ic%|9_(_e znzSa(t(BTpq|f3~_R%Vk&;B&C(T0GKXHG~uFT{_fYIKbb=@{x1ssU-ErV!4eRwa7B1 zJe?q$&QaB!YMs$v_W{vLB=CPggh*F74FETdA=WCACvx7$Ura3u8f_7d8Q_#x!ADto2-WKmVa7agoZ6CDJp4i;Lk zq;kF&nIB3%Jla>+`yBpzqQHk7T4+`J3u#gbDQ@3Z+hT#&+t85jtx9Hyap1@z$X**_W zXWm-dLv8(#w6gf1K@C|FN1>|*nG;U>5o-H+4kmITpJm;(fs%`%2^_>1S0++^mDrBo zJQ%wKgOH1h&0;yu^n`YqOg7x=J(jiR`n9Zk`Cu)1>Rc?X{gURETm~ftIx#H#oNL;7{L;=inVUnmZf^^iowBjgr1%HujSgO zYBNe?B}^B^J+fl5mh4rTWpNca<1qM)du}s70D0q0DphE-H@6hSUTP`kw5gt6#qocf zQSrbHvM4}ii0+Cn>XTy3%a1>4LY#O>Jr;?>$q8(je4u%SS%1wyCY}TT9s_y7I7IsO zT2lw2%ezy1T;3*`dffN!58_KdrXXQLqIY@{`Dl z)r8$beI~z5G88LhUb!+ElJ9+ddN)mr*qUY^g5Zxw&03RB6@|U+l2WdQIegCHINlRD z+)2F7GXY+;m@Dnvi9b8w7p|p1aRZ%tnhs{zP63iVr#b)S($zSk9Z&Z+PjXrZ%cMPq zb*5-~xx2j6p8tuT}3=Vnfn{-&!*Pl*b_h@ur zzAv;gJ9RQ~J^tzK`D|JyA*UlB{nTa5<>8Y1u`%`}7YPn(h!D>o_vwomNc7aTS7f7N zMtK_KZMUlZ0yzHrbkS3Aa!I?3--U|)4zdG`-aw^Wnieky@qa(tscX}w=a}x?9-Euw zJ|4~1Kvcj}RtkE2$xl07TUdLn`FHTYOJwJi-nW?6;zDmujpB&13*|ioA=3&Jsz>8| zgu9wP@X^G=M_{`3)2uYPB$Y^pDx0^u6jaE8mp-* zBLnb0FF#~OZ;pJxWHPLn58u_cA9%hH76`AmVP~e?nab2*x}4$G7WlFb^Hc7yl(+KT z5Tv_?L;P#&&p8F?_K|k2Y5}Wu>*}hW(lm_F@-S^6kl6Ii`TPm-MVN&iPxILWgPfI2YRllW8gt@Ytd?1 zhG;$sO?oN+-fLGN)^Y(`Xw!r7ZV4L9?$=kfU2Ur5==MXz?1NnEl*a$T4}ilPInA_T zSRDYd^Uz?+NHyVo3zOr7H$V7+`RJX|J3SeYOtA1ZG>GJQ!?9cXQ1i_$l?WfPR;v#D zXnR^~Oq!`_UwrXzW)eXu)0BOedtFvp(b>hbD&&Kmm?N@|&g7#z>qs051=7m3aB&+L zdnvLD-5sx=_N?GVTfj=Bhli@c#d6t81;{R9W4OSwlOK|PR(iD6x~b+RZttw{!_Gq#avF#1-j9rMLe|> ze?->y7GOK{qJ9^o&f>;Z93jJd`+5HhfOHG~AHK~;7AKkSO`#3gU6Jn3RTNB#Bv1OM zu8(J5vSO{ZZOJ^KkK)-FO`n5@u`qW=+P~s|I9@E{=;|j|_~Q0xXSu539p4mK4bQ@) z#bq5sJBl891uzy{k|AyJO<5)6$@?^sWSD=ULoUawf~4uMF&Eo*-KeHsCTm=9wB8fUkgy z5`JSasTEpB9}ez|*fu_m!AgD`m9lY!z|rYpjXOy?Zn4NeS|J63Yge8k8Gzqi5M1lM z^kFN`(E@g%QSft?V}KQ4yQjB9#S&XVBM%Th2YPom zBgS^y*jW6INPVcMb1dzM*O%-yDYH58+wivIO^JFw`S1Wvh&WC0tR~>#=!iUv5>@Ax zxD|sUH4DBk%~YrqFfFjkI-I5#H$6xE(f3^GyO+jvw4zv3G<4U$U*q$q9z*i=?hT>j zz~(ilCH;Hh%-v4DFt+8J>6$i|>fAjl+UP@^Vf;(IbSl8dj`D~tEg z9&)4H81_gKZAroWTmG-xIk<#N%Z+8aYR)A=$cy$OVz*=iHEIU_>*?{oSfsKa`#y;5 zZ|<{zLLA8UwU3&E=Xz919mcE{J*#i`v-`-u=xz8mdit^o(o+oIL*O}lEBfFj^vVe2 zXDocMo1qCxAbK_U9k%bWx{wWQW-#P?#FDe=1z0tol+|2UfpZ}QV|3m*2!GysCBJ3d zOaV_MKBxRjOiYwU+!;e#xlSHPx#c9{Ji1BVZm{&ME#k+9o_^s6@4ikpk%!934-A+1 zbq7#>77qO=R!(*t1x-Z&CzN*mBw2i6z>7{3JX`75{6W*a832iM?~PQyuk3b8xq4xO*{6Coy`ew0R2IHOd)$SUH|=2%=( z(zO!VTNBy4{U68eP#~bnxGAPQhE|ON(C)9S8ZWbp~!|B}l8e*#$(NB0%X zbr=FB(%_31S3h*o{H;u+g`M<2|1zwFM~=t3)qH&}inkNn{#p$UxT<3HT#*Hh( zEmjK6A}%`NbjPsyOW5B!V6(_2+d0l_0CS6{ZEMeUh6Ld%jYh0^Tm_X{D;< zxxopsTx~&^{HRGf)CW_`<6gC7K$DKjoix zu((Qi`|E{&?dKU`PpT0|;$rLQ!&s5-;I2XahNa%InJoM(0j~3ticGf8-YrBJ0fTQW7Ch4P%0tI(NLv>wG|88A*1&3U!T)WHXt`gE{@hxfmh#`nPrg#hi*H;nTQtbt~VcfPR| z{R6AIH)U8vf?%U)&9ALsqZ62HR!U3%6Xp;y1MMKPWBC7ojbMCWuSYZk1s4WUm?ryk zdRvDx1Hs0&xHJYV?Er4S@;jgq2P9^Dz6E|&u-b7=0R3q9vkHu*yW9tzglOYHU-0YR`+%c6(D?4&KOq6&+4eYTMu~j9 z3OEU`;-2!Pe0=Y)5FsH>zG7m$Sm}4$t3~H|$fzB{xsF^~bLXw$F+KL?nwKhtZFh6bTMYUSKN%%kTJoF6c zC{kq8{=^EdXM>KSY+NEqqOnNlN%y&aHfy+7{$Y&HXZd1>&-Xg-7$2b*@b23*p#i{; zvft&J$p{}Zfuzmb?%1Y&-cp32i)1o<$f4Fco zeFH{+3u;l1M|jLZU$N3?aXmLV(lhM(H`$@ckiLemuDpjfj|=7zo$}0N0NDy)gylRm zLd?e35Q9}+Cd}M#`#qDTcv8@oY}7Jof&Ql?Ujg0G>W$62_vbwzXm!$M(7;V==Lch_ zVwd}F(T6cpE7vqj*-SQR*P)kS1dSqsVnn!uw^g1iWZm&=cel?{tCL2;Rj098vtsI3 zr5f3@$2LW%LqVPc&)oeQ42ljTFv5X&{p;oNS-P-Z?T>5HFZ=>Izb2m)yxG)bAog!& z{wJye*x1{5{sgtY;l=ZRTVw7Hu(2exGT-$t z>b@@y__lZWvww(vXdD=iDVF@s$ZrJGR*)wxKJEmhKIt)UAphSN!NdNM?S9=9&Mq#(Y=6=H3lhGx)}1pTNlP#nVh8TVh&&Rsqc9Fi$WL*%$!W#!S0Dodmue zcVg3Q4kdw?*fe|I#-a*|YR1eze(tB%5OdZ(^^8H$rOAt*>aBl0 zw2-1Mqss?7COwZ#RklsMY@NJ~ymDA}^2RmjkNT8!>w}SuEGRj3nikEHPB>yfHV8>g zB}&)0B@J86eLA1_em*6}rmnZ4bvdy#;9_H_*{Vg=kl_%8Yo@j18m2CuIA3~l)dR3H z2{lBB8N1Dq1Npd$oGD_)%=oAyZ8{av&Pj*t?D10(Y0FMezY%;o#kf$w7)3FLh;%}o z_HF>`gsjPYXIihfhspHhN^()Wc{^Pxl=T2R6VKO)}3OFxO ztM+K``BzUAYGxFF;VS!OO=*`(S$mf{P><@)k3IE^M<@LD4EgbqfJ~yMEYc~@Wjh2f zEgYCX@ua-WS%U{c?>XtUp0!M-k2p_Y$47nEx_Q*H3enY;2XB|sh%6*Ka)FHLp)qw; zFN~24cQk{RR1Z|?9b1*tlDKO~3QAyaR8I3UEhw97x?GH^Ssft(bA)whdWFti_LH6~ z$kRGcLOFI%b$pO=oja0p(}L%^U#WN$!O{qwj=aBXlH+Fc04hFN07pQ$zmlWdw!>1j z^jmOLV)YY>_pNqmz$pHH7gy1Kfi-t3fw zx}`Z0we0UxSca)4t*GyecuDj0Tl$F`9XzZYM<6I^V#ciLf|A2Gqz_IMW+r$DVwjYw zfT?rXvGTi3@G;%WwP~Bj_mE6!*eAF3Wa!>fx~Jg(lX-NgOc}eAgu6ceaL}c~DGT<+ zxIt0Xb}?H3CB|h}x|8NLomEG^XWFQu)?B<|1L{#fUhb zW6#aSH)dR!y{UH;NG2z3;?sNwEc_&82KtJzC9V2NuD{@UU4!p%LMv5wWiPaG3-g6v zOG$TQy5Syd4@(ay=2s#gkGXa6>rS$lV5j7s3&%4vdmVQ8R5Tis{+MH+C))})50BIE1#lJx|-LBaZpCLw6nkobXJ(b z48bVlK4x&$1XL6^KOF~so_r5}sj!Gbsfx@@t|a?eb5aW%(h!@DB(C?`EY+xCrKEzp z`q~_{`BMR}XSB{!OJb^>toy+xl)`~u?Q-vEgjKi5@?>4lxR_4#y(r1=VIrR$=TN#M z!wG)?QYxIjeE&p>-FiGSOTYZvLIRbAgfRBr8qn-!kD2X;G}==OZgO zvpkj0g8Le=kmPk7KH8iVq&i;8VCl(A`UdHJ_ZeN#mhSs@ReCAjB$@BMGzxC%1>r3J zc{|dLZk!TW)VVzY{;1?&DXJU*T|_=)G}8;WZ^gI2@wIPqc#E+JTZ3KEqT7M_84kARI8jbFBr z?XEZHeAwl5l%e+LoF1#yTr~^?l@=M#dOg6{kG65a?E>!Y zy$63{H}*#mSnPXU=7q(Ozj8U?=3Q^WeO$hKN%pmFwvv)(2pBQUX>QvN+-3VXV)NPB z_&t^u-)PcM^HlGPtTYu=Zyj4I6z4&G+2qrx_90g)dB&lmdTFJ~jRxU|lsW?+)>B31 zQS1GLui34=Za(jHQ@ut(VtTnVM>V6uTRpzS$wCROB>P=Tv|m=576kYeawuYbjT%I| zJ&mW$z6i_8S{n&Y7z zij}h4=yq4~RY{Xl7{RNxN8VxAFiWj{!AR3*hsd+yQT_Vl(;av9s^vI7meQsWgL=~m zaJkZo4>LTF(bS*%b>00PEa)~h+Q@iC+3``TeA3nI8IH2m<%{&iyHs4+yGI$lK}b8; z+ks5?TLo;Lt_zCK>anvi9I`zoZOi_TG6#q1kDzw85d6PIsq68v(kdcM+8PQou9o;* zU72pzSnvEg8iaI63yODa=f^dt9&Ijtu+g&pA+Y6(Ww#`VzOiU~s*GhJb@jf*(g`1q zUNBB$b2xQh@C5-&#v=w|WQ{1!Dh+)0_EF3<6%%{MVPfpw_{tnp4+^z~!wVYAq2Gt4 ztIB15&MB`%H<*mJBx8iy0B@mdC-N-m#O)8(oxyGI-a1x*Hm=3}&P?|(}7R3ALQ#QKr!jG$G| zSoLc6_D&+?aP13pi%+e6;b82-di+Hu%scpy_VW-)e-!1v^sM#HDj z4InQFOn)n)MYL|%XJDV-5ldwuMc-vMylaiU^!<|l4i4IdOHC00H)Xy!H@K?Ga}3l^ zw0+hUA`6sxWm2K#HZ5GapuK>Y{N44lDj-s(Y#!cbX^8e7T`)-Dm}6&|yp2v*ctxY6 zWpd@Jc|uKE){5=7rExBm4ij=dI4wU{s@Gh6Ol3cD-a0H^S!Mof{?DQkuZlAU`9>oR z*c^EO4DqTA7fD{P5Ya=;Z42BM0QNt-?e}mnURmb;C8a!#he-N~C#J51LZW&Ly*(!F z4RLMm-Z)kzMEBzUQXUy7n4uorFg@J^lk)B#JA0XN(hI!+R{FTeUWW5F3p&g`oCYdu zyN2YU1mTzbe3KK+z(p3XwLabcaxqvW+K}i0qlb0yc`Exzg{!Dep=;`zQ*vEHYXOMlm z0y1!wIfX$TGnIZ+gc%n}CC*MEE@&|O$RKtDu=`UtfzAwM_;P?XD7)`cg!oNgBUTdM z4ijmcWR23*Ox=Ri%Pjtu(+zeVwrPQOu=jMaDH-z?n|oLb1loK2Bd#gkAky0REoJY! zOV4Vtci(Uzd$M5|zS8Xk4q{KJ#6;bD79TH1{GP*#%8CX=iN$_dOu2h`Wd4m^Y<3m0 z%NOSY4MLt6%29gGW9;>LDH)gXQWd8va}=%$K1-(DY9Z5yAJzXb)U>DHN<#VVJ47X8 z<`?xMUZc9oNxgxzr8?Eo1BVdwy3djxn(hr?NN7)mO}1xf99H{1KZGo4FvU9^vDYgD zFv{9W3Y(Zo6H4Ag@gEiY0Yi?yO;r@1uqO6#!(l`Nrr(zI;!5;(+XHvb@PaeK%v5=0 z|CfW?4eN-2If;-S`Wkzdz_ZE z1JVf4_vR^XTq5P*c7p@k4Y*@}pE>+rmqukFC9uH7+4MEn#DP0awE|b(9Af?FCmwnPtdolE!IumskZF)>P}cm>UEkhOTIlKK8uh3- z_*)Ga48v62Q1U3;-jQh03_o~urq4&&vUgs4Y5)!RKm1h1i|fO>{nH%7s?RIrL8Nac zB24<6FTLff`+F*y;pFK^e%=HwsDVkl=KSBBHl}MAxJR`2}hUMaMAFs{^INS1)&Lo=(lw z@ln&c@Z_G242Y?YCNwT7CRal@?;`VEg?G?Mq5~jQ4NG8Tzz_^7G-#-y;R*dIS8rL8 zOcmNnTThQ?womH_Iw#+|x3{;N>HC1^=~E4FP5x_*VKeGEgWy_T+!GMF1iDD?leWIW zpE0U~^Q5K~6V&6_7-oFG%Y9K5Yn-}XGr->j0OB|7&CxP9`$chJAJ$>)G)cUy_wFMPyN-GTZ0hJrY{&5~Qk ztYMD;I#vP=`FV9=hU#lhaNpXr{O-_TZ89lSof zkS#sipNVO$nz~%>xSjJ!-rUn5mluipSkhHe2D>tpOwFGL2RVnSZZ`#LuhIbjT6%>0 zk9ATl$G}Oy+3(l-7O8G(vi+0#!J1~Rg*9R>xNiv-3WZJFwA{I~wGy$>nC)YD4)HRv zWwc*Qt@MT+B+a~-p_%ZD*5;LER{*uoL0z5EfUDRWBquZH2K<*o%_8r?4PTqbkH6^g z+Yr!Py-JrYR5nsQJ>FFSj$hT+B|x?RiawS9?CA zD?IjMjGqM)>lx(yC&xDIB{pfzN+ZSN8| z1odnB+1vwSobL955Sxp}TWe$5oXM_Fi-_ZOBz-Q94qxB_N*%8%N*7Abs5AK038hBo zM3a94_fa1dD8QR?FPpFr4;Dv!H&5h;wZto}n6OS^Kg1sWX#qy`p04e4RY@EXKPO^d z0yB9=>JRqEW9)!cx>(ORKSd=(Hf?lBskd9>QjPLj8h*7S02QXijWDLaea(JI11j?e z?Tl13rMEvl5K7y7M4%&*pq>J38*|Zh8Mhh;P;)d-==98%bgQp?5T|PKf))v-F5{tSN_|Mut40O75S-~5;8 z-9sj-1M2#-L}>Ayr%cBo$nVG2I|t(!t2T$|1jWvx2frRuC(>O z#;}Y(Fi>*c#~eUPF z0%(JbxUMR&-{_@fY+hU0jkI}lUQ68`beL2APm5w4m}xPxV~p50wqJ*g9)87-=;j*o zml^&94L_x1@Mq2T7YT@^IeyW*>3;@&@dqllzDNju8QkXGiA{zg-`3;o7dr^Jn5&V?wt?~T1fJ5Kc=`TZ)nCBerX3>ajG**h6|&qZ&e!Cs zvCAviPAdWO*v^$X_G#bT>9ZZJZ`(h*oT-7YV$9l_HL#WBow=PD)5iRRLU!$r!hPve z#V}k&--u3!(+WdnsBMLF@y|hxQnXx#T6Nu!Bdl4!SBE@yw565cyfCC);Z;nurABu9 zJj%|{Ru#ZdEgzudPq|G|QQb;NobWd>TCbCGqJ3hQ-X#y4*H{m1%snD+aD*Mr6NsYU zUVHoY?SqnxQ)@}VLaw;RihE+AzYft`eqj2WV*YEQ^*9w&t96=@`J$-iM*;A&d@exk z?dm#nwtpann{RO?w~GeC`lzjHDpl`bE<;dDb9}6fCY04S199}IzY8B5XpgA=RS{Rz zaZ`TF5N}i$=x2=GYHMQP+=s~gjyj38Iu(~X?bL7~)f(QL#K&Fl8{nB?V8htiQg7E} zVKgT5`x>VW{UGlvPezg8Xn=`p5gvf|qvuOeAsMms3)g3)6Yq z+<;!my6f~+$r4U)%Iz)5)z`cXo%M*f`^R?bLoK|N-SBYD`A#v|KymMjI5Zu)nimOkE)^#H z9XgN?0$se8rQ&X|5N*v?zhWEF#=RmVD zhqfo4Q@+$O%%?pm$HF-txQNddJIhUW<5|`?nvOhK{FWyrh=((43S~f`q*7(VnaGccA7Fx%H9EPTCWItI$oO;JlY2*%1O~jSzXYtF0 z#iCx=3>LpS!6v3?^T>u=Y^8tHZkC3G^W1ntww7oW%(?o4oV_B8)nl{E4yu@Ud3223 z)jntCM3&7-y`qwm1?$mlsL+uMWhkCG`NRHx9oLz#wiAWz1T8S4jl#|o`_MiIvR0A% zw(D&%if2{I{hvuL2TE+X8C{1o<+XwE4Bg5<(x_+`FQOH86z9ijSY|7IJLcq^b~d&^ zYIU)&mWAv+Ur6dD?e@v_bjTSFR^G$V>_1lkTzn^8xcv(pT>|LXIsLCEfskG*gsUxJ zJ5b5kw4xs%y0}Civ{sdJvxml$RRdG*7T~TJgXico>drgVhq6awOohRHDXr_1&b(^F zTlmp#Hsls$dvIlk$D@wNv1q`(RIV4Vi4#v^dtf$5)WJI7p6M(0?>1~#vwg7^r>|6) zNwn;b5y)YjfzP3{7PaOpQgce1Mew7WLsG*k>4lYO6+MWB^XBF&(T{_7%Agj{W|*87 z%4X3fgYNpYHGTXew5(S8r`SN1j9-do4U0!rfq{$9yOXjj^jU7}_y`**j$f_UFc6@g zIVa5fi;z&M*H*LqXjBSfi)vrK@bokk4;3hh8Cq72d;Z!R(W!}^RAa${Om$t7&SbH z&4kRBx>TM-AV~=*2xh&b(p7s)3Z#y8%(m=?6ymKbQ9SSG18DMy?l3OXoxr@xw3AG#$cWI z{Hn(-@VOcvp&8pa)IBGk`?~{Mf-Paj zhc#;6F64INl|_gBM{Ht0z&KW&2QP3dWPwj^JG(JtNN0b#!?;72wWz}Kk0~n%L2jNI zED;h-unnW_;Mj}Z0Dk9bwtA2*P%!4vR_Z~BO~k#h7`8FDF(Mccqt}TE^M1q9YMJT z#27b08RHy2OkV^G4o6-7C9ZldkZKObb7zb83w!NAVecB>kAqa8I9zQ&gLTR9K9~Zv zgXq`((Bi;9cLdmrwPcPcBd>~ttQHd9rH8JKx<$3mDo!a+O{`m$Kt8RTqpv=PIU4)R zOLj1%`|-TT7{@?MsBZX$xH-bGRMnTJWI*CY2P|Y1ZFP(eNvgI;HWsc)f#yB=ky8!K z-dqiiZV?rvR8;M?D>&FL*j6K!x}if?5bJZosg-PvR_C*OCq+k=54+Dav8Wt)7d+aZ z+iO_EfGpwECAf0re?nwHibT%g#DuN2n9sL9$n0N7d^X8I@kH|(*xG(f8SPv8FLaTc=f`>`^q@p51i{gDAs`Y1`x`6WZ|EAvye14KpK^FCfj zu(mRyfYJ~9@`RzPjto+)M%adHZFt;j^!ij1;H*gJ;$;t zT=8Fu?FfCIVkyans4!f!Bl&18e`yF)Dd~Q{=gtUjE3p?9ECF75TyEPMH7UxX#Rr9C z(@7*0h|&IEy3WrC2YxPHz~97<5yH09AAQu;%}QR7M2pb5r&kOXNDHvCNUzZ%EF^eM z%<$SOmWVB8v-bH?vYumVygAMttAv!JPh`b9=b7?0#Rzz} z6lZ-3eQmNa;yT5~+=>{sDM56y@OV>FWB3hkY#&waZ+Vwi>inQ{O5TT8hAawogL7zF z?oM_^EpN93tMbNob!n^|{gQr|9B0(E?Y`r-rq><#bwTvVm&qxbJ=@T6C&mXoj(*!Q z3gzs-pZ8bRml7zGN`vKR6AdS_iJqq9?dHML-qz3A^zK>>Jb_%rSNHSk zOA~l2*S*5m29G0)GFBvS#ZVE%ZBuFjrpTQVRc>3!P`sZmjRM+SLkz!5JSm-iM9p{( zL7WrmvU#a(LfAz*=wx9C)AA1l?*#E8{tM$eNY*~_mhRx$|C-XJg!vJz+vfzd6Gw!( zPd42A5o|5>7D3QU{H6gYY0yc=j)Eg!9{!VW(gDoy&!S<|T>DA@DbzGQY$IUF3n3Nbe$w+l(pZ}c6garB7rov%2}-Aa^~ezPQe}qZ1Xn%qBQ`z> zKY8W9HEL2$`4O41ccLq4k&67*l=*kdl@r0L{}^~J{&TH`zruu!UbvptF>NaMjJyq1 zm*gCz6>AP21;5r6~#Az;CoQKce z?&05ZW~~U9xhzS9>6fxh4Wp5)uO&%tX3YE0Yo&7Eb#tJ5!*e zvaw`tI@ICA$JmjSP?3vxZl96AmNZLr(YY3>&WSPpHm zgG8k>3U=1BMVO$Ve!;!jOofTj@ABm-*EesOdy{!AH8eN@Hm&q#OEMQKXcT-#bKIYm z2W*6PGUYi^QfmQB;`^D1+V`G9o98*I9Q)Y@MH^bX?-!QS1!@auG6`&yi(7R$Se2VL zbrx(l885=)j)$*JupGb%gVD8l!#8WJ%dl0;V{&47cA__Ut>3zY3a_pQwtD!nfz;o5 z2E9pkD>{zL&dxp_%H?AP{>{Us1GLgQUEXZ%i<_j&RMTP&^JxZSM9xe-kgu z^S?(0>)Alkl$eeraiiuyJsOuwJ|hYu1mmwy?mX6tp#E6X)0F zvl!D&vzaqj-uofy4A?ZRkL57cc^K+DlTa`FK5qb1^b>`y8;%AvcPTAnwIfZ zV$BKCE~(diqV5>KB-PhoXo2>Zia!;d+7AKA8i`fGzRJ191<;Dq04MO2Dmt%u->}11 zXl2u(9`)tBQ9iPb&tKR`=sVA{J_|!G*gqA&9mwzqgSuF?J)i}uOfA4f!(ge7xIQ*z zW`T|2xqO*^d{^DYD>jl#BZhxUTmSpS1=Y%+0~0pog)K3Vx1rUg8th&Rc4DG8dgyn^ z0Wr;SsOGlS5+Qxw;yR-vSYx?343w`H{wUN$UoyuyN9zurnQb;)E`rR?? z173}jufF$I6^VOC&IG}4=awUl+x^PwM22t$t%3Wtrd!t4&{WVY9Kept(bXONe78tE zIPG83?G8}mO2+(iZU2U;E(83rYV9r#jLa+H7b(8HS$Vuc=cNsLvUPXBZUJVSB#_;X@asvnz>(dtd7LspDk(6zw zMzu~_=VxpEo}d2_k|w)#_%=tlrW)yrd?173+Rb@4ji8>olb%%%EGl;U+!s`a`yi+`2G!dcC)n5b9JptXdv&`7jAS!sb z5iX#4KQgK_C2Tr&0*;`D_e$RAyk;J-T4{txN{Kb08m17^Y-DGjV=^#`0R%r*o%_nI ztr$v|a{jnld zK>S2s1SZVb6+HXh&DMTy{YIa=#dWr;$JW`;o;wi)i-g+GNn)u6DJ4tXUQ;}obpUtk zSV*1A%YD+BOiCxvy!4`tlm2Cqr-7+vIi}CXN3aYv56e#?Vb`;Go%IFFd>uOLMu$v> z?7IU$F}8a?$z^j)@2A5rFKYqAY}YLMw9Zk_CwAwDUU#?a$k~o2*E}{ekuQ1ixCLW} zX}NwUan^I4W@kV?o4eeTXNEH;KRNv70w7#aOq<(OQ$XDsDz}87tBYx!`s+4XcLhxU zeT~k(P#Jb$ztaJT)79EQe%w2blz-*m4N#HU@+(N!T^4fB;00t^KBCUt*`!ds7+V;9 zB$U{bB(>)grIc-sWnq7i2YClzvZ)mBG#ad}{t32I*3>6z0VS+>xGIOdvkW!4*x}Xx zPBhUOaf23S)D8`t~29-AZ0KXjwL8#ueMS$}3^^LzcBVeLE9b2l{ zqyIt{4}d0PZZEJ;laW7uMGP!8n|OPC9U20dgJemzNVdvepO2^U1MU^57 zzfK<1+jFYx=(Y`Ka~WXISwBL~ChJ|^TCIv1r!~oojI?0sI7k=P*>WMWr=f_-dp8$=>5cd@35+~qRq%LD*%VA=L** zob2#={8hb57s#L|eceZ1n@IPkr1a)t;gOF-_`qmKobZfZmE$U_N6oQibYDsZcs7)t zdtcd1#+U9t1Y(7l6dmj(+-G1ybIraQh8XDlRvztmHDUKw+9+5_I6crFHCTM7wqSQ_ zV{gGY&W&87=#K9zoFuB74z)#0_-{zHJK;S;xxvVQ0yY1g4b!?05TelSug;DfZz(}1 zdo3l@{+d_4L;#u-Fojsg{pQ3OMJxNE>G6}x(2XGh?spFFJ+&TN$_*d%uh|jy@w(_< zAMT(+OjBi}XNcZdAS8R(+4W8>&)#rt*>+}fSiW(wtplIj-(H+z(eo1WiU(oR@!r67RW?lVp~^fwql)m?z27@%hbPN@OxgK>Moc!7m!v!6Od*VfCY%;@Up?yIUVc z6^l#~`sk3N5ZmzM#0({Ociy<0Tg+6L_jFLlBKSBtKX+!vYHQd>+Cq+KlE7j8)xxv& zTUYw5Wmm=8QsEDu=%(CZs1!&YYW~hEFmb3n&1RrVm6_j7^CZVEIoEr&mRo4n)#tTo z!f~XDaZdN8LBggq745y{3cW)ds##`mpCoR~-nsT4yQU88S}|Me{8lI_mGX>`TT;UiXd!aMUZl_(Qg}C&1nl1RQpQVhOcGUl%HU>+}eZ|NPz+QQ6=#* z70f5I5@#N3H>!JYGj^3N-CAyi?(#@entVQt6yb_Ypw6U6fCjL{`qanPy)lnr?6b+1VL4sim7k@mQVEEI?+RJu-DO3wg6`v8pB{4!RKtR7 zMv7HgMa3Qrx>|52`|OrmG%P)rWodEus*Dp)|M20SlCtvn;`h4chAHxR=Xd$ZDMYqZ z4Djlo(UzL4O(x9B6i>|_$l4A=@6714ldh4%HZx2}b$+ElJ*1&ymy$d_uBjI3=#gmYalVoX`q zOK$Qgr{JU`fI?tQl8@noP>dc@YSQBNPO5y+#I(C$^QKSSnF)vR&^R|^pRGY{6t|Eq z1il&e#^bFPQ+NRvdp}B5{DSw_fi84T<{jw_czqEVp#NM4<{G~Y3Yq~NfF3|-G1o6~ z|CQOk$L=v8OQdJ3LPw&eq;_T2FG@VJ%kDNR7`&|og_mSqx5Mjgdt*LYJfCAg-p&Mj zPmvhMKkluEc4e!(ie-I!yu371QfPt~5X;tQ87Mc2DYo*e0)g!xCHZVKZF$s;I2f#$ znO)@YDtln$xh|}`JBcqGElDrXUAC|4zwRg$hR(Mb_@JT(8rDIA-}gxUk4DfOf7NT1p^OpUK^fky6adJXYZ+0B@7_Bq$7L zWW>jncY%|dyQMQ1Jo~2a@MBcAdqc;+7K4zEA84`t~C^Q2rj+Zxnp!OwfN!2)_ehT|KsGAJ!pdB1hfYX|u=G7pi(M z1!v`rx^-<@3inOXw8%0RR05uwSXDH>m|EvB{#YSCXjpZ3%TDF$N&wYQpH^VMoSaKm ziN9lMlNGv_ZoKTXJL9@MJRA6MN>jXH`?-W4k*559`QO^8uYmG-k4w=nsj@4;j`=Kq zkr>D~*Y>|T;b`yKTO$8qpg?tE+4!)^u^h%K@$DaHbj!yib!&3v0#DSaC@HaC5cRSc z`Cj*w{p&|YeD_UV1bc_qj_y`N%`OkKz8_KN{Dr^Xsdn&47cf_e_&p)%d%bq4M1A-1 zNz0jm19_e&kx|6A2U(hHC<{K(M12wU>8ibXD|bMFgJI9@-SHsCixO8lB-XUWrX$Zz zv=*tUU;IdkT&N&!{PgPgqesEa4`}{Fvi0Xs=swYu9=X9GaUItd%-!GmK%C%Dq!*mw zkN7xp4a-3=kaF8I0m{$g1=7-2ArQpGI&@Ek=0t^JQassDC4Q0Zn+f;GuHbvdsqPq> zR-$bZpS84ZGJ`70@fbCfJp21~biWu}`$#x{)QwPkc$wnvV|(+H0W~oiSqCrJ+^}?t z^ju!L>yDTp3-|q~hU%8zkLELAw@9IcmD&zprZ>{pn~hcDcKvkvgtc<;X>BikB_*~d z=w#I;UV;a=h(6HZyKwC9ojr8K0#b|e{XH7{mKDT8Tt7qo$Su6~*MD19e*X7s1j23u z)RS+0N4 z0CA26_WAoUB-^QE<-a58|D1>|bDIa0vlMU=$#g9U#MjAJi_)`tH&@Pmf6dJiUOuT-jKIKC%z9jPP9)$jieKB zA2Ny0sK_Z?eYj@tIlw!mB5k2%cd8Y&c?2QLT3e+faAQYXe%9aK{jLr+uEWHieJRT< zeD-}=u}-fp1x~u;jUBMg)z?2=hQo9$T-MA85v}WYAMhfS85iZ~R4WOvdBUysC_BBg z`}#GJg@xCI`_?wOR!pgmBD{~)DGZY_qF}sX(|O*b!&RyzqMU{DHD9YGI#-31oYajr zob4Gjj7f2SCZugm7~7njWG_jk7mt~lnNds@Uzoyod~Rb^4E!#pUbpe}WJCg5*n5K;PyMU@p|F+{L-uaiEP~p1b6Wyi zmO^SywAy;_J{)*b!o6z6coOqKi5k+A6Ed9}(=rO? zd%jAKgmun|PW`4i%iZ&`9IeQ72tFQ7%ZRBTk`{Sh{5_2U30wTZ@+6QHL?DagtkHDI znrt2I9m&TpoX4~SN`A62KG}Vp9v!*ccybrU9M^-8-6&xAR41i>_fe9v+au5W+| zXUS!<#+PA6Nx``m7IB}N(f;{|y-Ao0UdP|I?K=K`LsQQ=sy{&fi)^;oK`}AHQ5PtA zH!BOM*kEe_nyl8?{tVrE?dnyb6})y_#7TB3K3toZ;>n9rpu37*N3bG%g-peIupB|Q zJLnsBS8YF=%I9@9iPO#vmg^%Wb9JwM{J>Bq#QG!KpHzjJEjBS_m6~y9bpiD6u7Ua< z2{iNm*!HlE90fuh0j%g6?!YezRQnp=a)PzczVi-8prc1$ylMRxA9(uMK$!hzkrNi;RA{i+Z|ognbU1Y2<2G(* zCZ5oR((0M!+q&zH7s6{CkEgvo&f9Q2naf@VP+ysr6}Q zy>HVDCrX3^tE*75IiU<{lq|_%`x5=o+{|@4G|%9>8ZDig{V69s*wrt#LzkeXaxU}4 zj(Fkv$06~#JcHueHKSb&AtaV7E-DLCaz5S;Q^*XzKEcG2)FOo8hBC`WOKg4^UjK5n zZQFKFb#?+x^Yps-568s$ig`&PpZVYn$ycIfXrfhq^|M+BO<$6?Xl&&#{%Q2{U7z{Eq|OIaG~3z4WpUE z)_YW-HLtVnp=HfK8DUFWW0=NQr|FJ$G0aYg218#J4;j#42cF1Qq^2<7sxaPlhi)x= zNjriy#+cXL94?`0>!2~jmy#lv(J0mP8MWWdnWBJN_p^PKo7Rp}JA$P^Icyermlm6w znH*3WRBVJ}10i^AF{y@mQp1{%l#1Q!wFUV0I>DDGXN+e9SB=R}2_5J&z3=38yRT(l z8bmkS!@5f}JDFKV(5Jn>FXd(I$q8U`pjosf456f*7y<9>2mLb`oQ-o0^lDjYp7SI7 z9LHW~VQVd|Y=Tq8C8-=9JVU3mBx8rS#x`R`qfK}z0bSaB_ZtcNYl#K-X@ilenS5;r1N_R4ZIHRN~)U3YJ5%IxvN(k)2eQNc2Wr|dmt+WnXyL-0L z@Y1l7^1>Hbo&m*Ogb_#Yzq+2=+d04W5gKmHMcc$-Cds^gsyhEOZ+A)$4GBF4#?>wX zCEi)=8x;uB>(ttAA!mhI7Mb^#f2?Lkfm>W@k};VRM9bXPOWc z3VM>pgJZL;Ae$XFTAC}6GUTjBLTG=KwTIcG5C=^{)bloV26&S zW#)qX{CgVgx}(sf0xmvjbUUm;rP}lO_E`Ttn z0FpDaZN0#etvY-D<`2%eb?Dg@TO*b0@t-GE^(SI#HfxrfmFeZxufG`8Vfn6gah4DR z%L$805NR|=xWt7yO;roZ;q>@uE%3;8em$kBN&YsU4$E$Vl41pd{*BP;jnYPCRNiPm zje2iyukaUrsyk(?59I%<-!zT#EKV(?34_yOZNZy;g^+7Mx`nOW%zZE;Y~z6_tQR4V z(Y7ZjdQ0-j&786RJYkuBPvO;}qDrOJ7GBbD!b5u-4z(Y{x8EVi>#%f4LNuUrZITt0 zKNzEp0O4u#wj{%De){Ore|Kj@eIwvr#Zqxrm1R-klZpIyd4!Rp)XQ2mRO5MdC~2z= zeS)G@zBPuSBaZup`s%Il`KiffRL1+Ez>bLtlnTTnGU(`xXNFpJ+Jp3BZ>{Rh9eS~e zY^nao`{V1>Fg`eIrf-({0d z@7Er&*dRTuT~r7nm;Dyt1+N=IB>7G7ULk|cO84X+=&<-1%y5cQSS zzxigAwHDHKdgKP-;8SmmJL!CpS!)Y!qhF0Buk6XKvc;*Z4qZ*8_eN%&#;_6g8gHg_ z(bY-~B)Bj$JVXnmfB+{YC@?ilG)D=eBqGza`q{tbWa|3EYDUow_CB@~IlHZh&roC2 z_pS>KWCu>x={$+mf9?)v>xGj_?Jx*JTexfTQ3!p|EIdb0XKuIG%b2mH$SaE?0x8pC zauM)KeINC;LgD>1+y=VZ|Jr2uELx$Aw-2*Na}P6Je)`a<=Le2lI^bJ&>=Kgr<*PjK zV^{L?W^CzKDHgrP=0tAvt*p+04&oTMf`7BncY+G5?i=2^-TeOxxb>)Xsh{tp)qM-QQB6}k9 z9q+Kn(2ryN`r)K@v7M#xt_5UuhVu*P1p1v|^lReXHLHM=i``aFVRb2x92XKgCSTi% z3`w7rM5hOoo)PJ*?jNbDM4c(_$p4z|fUCaJ*k)+WW5oq2QQ$%jBc6N+I=jfDq98@C zh{LZpuQw07H53>|pqn;VIxd=F0#0KYPs|Hi<8nj^)^<`m9tL>O=0yPupA1UKS{5Ni z?Tb&sCA3dKIoq#I4KqA)3Of*Gr$vA8n9QYnqnRx1;SuWOS)AtD-tn5Pc*L{G;__2U zT!&cJXE--bR0yA2GGUbF%EPQ0jnZ|gf@bAdwX-jiwKK1k@M^u)W8#V5gIs?n86;wh zkK!)Jqnigw_-7O(snCL=_t+iO0Xa7YRY$VE4_9;Hp z@{zT##rEe4rmw`WDtBt;^Ojq_epu0!&GtdpeBsDk27l7)XY;vpYtVdWF!;z?R-d^6 zeCPA?)YME2#g|0uqN?RKm}PAjP&AUqxi#Sv8qJ$KZ@Fo)XQm&OO%j+hwi+>Nbg_lO z|1qJ%@roN%uRZU#$hGfn3$HJ5wY#qm&w(F>Beg-H9Aw>kP=y5NMdU}aeBQj|T?I%~ z?#5(}&JE|;-qWH!BYn3g5kjA!KSt$BmnGso;fz%Kr0(E>Lj`ALK-l&-+`x|?Bz;+h zvs*;F_cpBOO9`vbJ=dE)6hpN|1Y{V6d-kT&Y55F?NZT?ermrK5ZhdUhb1ZCtmw6Y- z9_q^#Rs{L%e2;OkNtm4cM~HWNs2NfdeJa;xS=^#cNwCH|&6Fb~GDI6hK7QBE;9Dcn z;%N_@pV6+j$a_-zV3u?!1ccul=CLuXduc3qL3Zx7Ufas}!`mOcf<)f?iE*1lK4}af z&#E@S3%3n}5MpDKH{OERC(S>9*5}j$&3J4t` zOG)IbwF93mYAT0le=hjca~T_|4HYbn*#bXakd+}T&g9wQXX{NmV%ieW&*}#YVW&SP zyT9MDuJ<<^U=y`@dlFW0lv4&|j-PL=8F}{Fq(?qs{d-mB6 zF0OjC$|I3^S^uRcpi2Ie#mh4bYnj4ajRBuPMkyE$f#*cbQAXo zr7sgDYt@^3dAm!8d_xdg@#V?{{XVE`@#cHh zcVgS^4%q|0PSL3P0eEZs&+`;;L`@8Xk=WX)Gn=6I-nlO@<6+3G(fH;nE>}~tI&s<7 z;ud$wJWqm%?Ybdo41C*xeSzog4J0w-)zqahzC*H*Z%y%`@XH5&@9niS)O~uYrF#}| zfX9w_7=AOHuUfd~h^w^o07F2$zq-yiLRODWzvUZR?WuawqBvPswnG5d*g?|~YnW+v0c&)HyiiLMG}a##SLs3$(I{2J=yhQf%$Lq$wT!mCn32j=Uk2<{ z*!+1fq2_WP7kNnCB5?-}->PdelZMZ6KP0(1nzhAHSo?1KP`J3Yk(RwG22E@?n0d|D z+?o2y%dJ;lIl1PffNhL8mln@rqXRfr?5blqQK8nxM&KXmf*0mm{M!xHM9B@4b#%^D zaHCAec6$u0yXSXP;I~H{P&@!n4AC`jqgqNI)jOK^F;hRZq#{bp9_vZ2(SXp*? zh}m|2<3w`PqP6TPOI6wV!K+!o20NNR@t&!M=W)pwu!b{A>a6uzp*D#2ct@!8js_Ce zT_v-l71j|ef_jbt0&!&A9S_g zvYn;DbVz-K(Z0_-A9Cg4@GaDvH)zuRFfcV)L%r^6)+xQKCtYOi!kb+}@k7PGyEz{m z_NcF!@PKyS?#kvE)H_12#JZlZ3w7SEdp`Elvx-ut`x0aQrakXXiykR6R5DWoSQiG8 zFu6>^b$@`7qmK?M-5Z>hjheE(x>0uPtSTZ>X9Z+wD;0F$_rp1LN)}W^|9@Tq#p68Q z`O~K-nIB>74%(=23Zq3>o_hWW%e=cdQolT&ZcHZt7FTHcY;~3>=M{(oyJTlVydQ8O z&D&zNQ(Oy6-vyM?mES~M{iI|d*0E=tY8mid8@{u}9Ufj&m+zpny!nEoGoj6Tz&-)j{xvssWF@84ly z`2+2DEK9_N*S%yymQU^*401ZRBR8fpqyhi2ABFBUSDWkXE7tB**4O-W2`9!j4<+pI zF~f5tF@c6_E5|`&hl1ur3l&p9@}^;EDY$+6~Tifot-JD}sU@ii^pUf%BEc$dc(=r7;wap)!Shc28OSk9Zv)aArJi4Oo)lH8=HD%4OA^Yd95#rI@E`&wi)|q zfoLITW~=6t>=}oQ>^6qMGf)-QLHp`2D!&2h| z>OyQ-8GLgl&n*y%`jj`H1AAWmhz0p{IBb(opa< z%}+BukKG8Dj^O4h!2}V@QG8GQtQH8ilIu*X0i>1;~!pqAp0fYBc5*JGn`Pv;Kvl@|Nk0<^kS%l7Z0{OkeNE`FW zRweQM1)U23+xCz1k@sahbc9=yt!@}L{qkG^d`uyyeZvuZY-_A_gG zI@C4;HsI@NsKs~VpTS2)DV zyXJn>)w3V@vGGOb{&LG6JHNKUux6mNltwY^tGi*x2@)?tCZ&|6@SQ%{qVm?&S#o{Z zA46n2_6VNHplcQad?j&2Ll=azd!#Ke+buuSgSzTJf5GbHw`C(9GuyHWrGYBW`;%k})~1jB&y%v~f}sdF3hu|9_8o8cgTd*b}_XQGTo5Z~H%mwav9V#w1_O9BDA&e(>do-oh z%}1^1K=^1$nbJ>@0$8!|7dhoy$T2^$(J$?yuqC;3xR>RxFO)4yo5 znz|v=3F4eUlshHr`{W$9BDPk3Av#y`u5zZv)wV$q*dS-9)M{kaMqf~Bi3@nm&HYD# z`2G7uM&xx;#0^4wWWx5zMU>jQoCgJCp6*=9Jc&hY%twVvZK`Y&B(4)+*mw3h5+Xa^ zjusI{JV>bLch&Nh>V$N?5}s6dmYvPu(|CgSZT@+KD`T?taL(&yyXW%~UBe^!AxbW! z0j`)3AKn#~R=U42GQiM~0kP0=Fv?TEQB*&a$%9M)d4!!ntQ%W;^vhn(r}xq0^QnQS zgqIHTJgxU(XJV>ccaRQ^3`vS{3KyTpJj~KU+1MHu>@b#7GJN0DYLv$$gXag*^G>ij z1SJk^^*l;nNs>gE?vT$;wCi)czT>PRO-1%hc3)3O?Yt4t$m@a%N_qHz^>&9aye55L zDB$ zyL444`sNwLRu`!IaCwG;J##aCypKI@p5)W~wmEL)DPvKR^EP|LL$DZU@gr^lo0V<C>v^w`;{?y?Au9^@@4Zj&OM)OxuV#{GZIfHj0|GT%kr&#TT0Z43eQa(|8T; zxmQ=((h%bs@%E}RjhP1H0GseK%+g20TGPFX3J2eNAsKDE`X$nWRv9YHKY1>WaNj6r zGk{mE4jeD^YHBVU>&ZCE66z(HYwmts@>t}l@Y;`w{Irlf-Akhk;=7R${nAFMCPMYt z^Q>OewslmY$;SMu&Xvc&$+JHuu}PX*{5K4$QSS|0yL2AdQKxHRs$-i~x#rDYp+f?_ zS&${wICO3&I~KRGt5Dqm^_YDqwp(AbT}$)I1m)Iucolhf+a8FCLT0N94Tb!tunm5a zFm9Ai#v3Qe)$7xqjo&ryw$eux8(#92|6h!KXFyX~*RCB!1py->y@?VL1r(5~^kPE@ zB^0H13{|>{2!aIZASH@`5D1YLYCvg`j&ukF=~4nxL+763#P=P&_q+H0apoK+XYalC zD$ldl+IxPDZCHE!{@Ow6(2l^+CEpggz@b<8fuZ&2>%F%EB05$+1!z_mCM!*Mq~A6% z!^3tXpdLeOkDu+g)9DFn|cEe+;0HI+)%4M!~i#Qr)6)Ggoakd~Xx?7*uLiIbb3yO)Lxw zzjkW|pvfQaTn;`2K1496S|AM19`%z!x=CYB^q@yf;x0w`S8d+4>CPxku$*d@X4z=Y z7IA2_FWp$nPP-Z4rBwiP;|(;ExgZ=%Y7W%@FkBEkrpVONy14SQ;z$g7+?zX<4;>2? zNc5O*zH=ex954az1IK$NGj`7DQFrAXn5Yg7m0kvS?1J)v{_{wonSVtfCAhYaxXnw$ z?pc`4P;Q{~;tE&R@H@w5{ci~OxxR~_qi1$6JwG|cvJZq5PR}!wrDo_h9se zEt+Ct+{y5Ug1eP`PL)f3dGkEAh`doN=YM-DFq5YS@b(BBi~HcaY9>{F#2|i3G9yN@ zT_;ORN%Fk{>qXtlq~_#nCb7az$0|H1^D;|yAEU-YU+uMcv`r`9iQM9>l+nIl;jv)6 zVOA&DnO))>qn@#_*tJjzrX1ods&+23irdG6SR%$(I5H$gFh1|h-cn+ci-GX675nV- z(6%V&iN?3KV;-cl0`$XsSW}{V@R+GWTkT)+5Qzl@W%i({8hm#Moa>yjXX7+E-Cz|x zsUo#I_{e-QnKE>#Xtry6)=J8~5zGYDaQbu4tZ=kj%XyB(2#kL}A9fJcU{s{M`)%Qi z56yU1v!DI?juzIBeR&XIe&h2*nx^5)(kiVIv*Y*Z$7Q_N8rLZTjmgEbr`-!*1p5eQRyk^RG-@x|}VPcXiTu}@$rGmEDvUx_p zLVMmHEMJi?zb{;IanEaI!zbZELN@urTXx^fimjd?5!au=?Nh?|)if5~A4^OGuZ8tC zlWU99>C3ssMX)ueF0Ru}DMQ}ogFu+iC30NuF^V=}^XDVR<}gP19yS%^=C7{L+IcIy z`#sFm=y;UEzCU$K-WIeUWscwjzwC!m^)O-(;FT6%;+{JArCD5m|$@W;9KcEC0CnaAPyHVbThZE$vgCTAFA|s1jaZWG-EK&T3BVAx|#s zY*Jz>#f=3m8lxFv@bF@XxND_$6O;-6_#Wmcf!p+96X!=wcsZh5jc#mCDl07saQa;| z@ms@eI3bL4CFVP4uO~=4x$R_kE4LRp=%yI1ev_&zJw5sI50wC9ei{sN5sIgd zfDfsBZ)itL_J+h&7b=<6rbW_QIs{&C4Qf-$AOxK6i{0kNF*iH$uS|QC9D7npoi=aP z)>@E=%K)3FW7n8-J9k*K9y2{R;pwCY7P}QF-@}Mg-ee1(Z|Oz~ z4j1Qqz3!2Y->ni1qqD!jZ1^Pi(zfTT3b7@jjqmuoAtGV#OF=)ItoBDV+<(+u41fm8 zALHskm-bTtnCp{f!iTi}Z$T4Gczo`9B37a&vGCSLNVafv+};jObJI3t@Clr=bbhkw zHe|6HbtbWK1ett8wIPzfCEg&+hYZ>A-ES>yfq5vq{q=mu`n!XgoMW#zefjB0TQ9WH zhWB&v)6UZ!_$WzDtm3O}GJC9$5jTj6C7&+De7mbwzUI$9_fh6eQQM+NR0i_~PJxYC z()s+0KZX2e5dhmPDAO}XLBGfKZ1fCa%1!3My!W_!77P<|%<)_G@Obs|R^tx@ufnKA zWbi63B7S?Ar6Xr!LUlMk(e*%0z$siLYkVcVvwL$ zIOLd^4)_XjW4Ac%T*Ldj*G9Sfo%S{-NgHyPqUWtBmt)B{=`nW!TNtPS< zOLV}yr*h!rYEpbvTW?Urcpp>dhoDYXyU(Prd`E2jXzEoMebSbKUm8lYS!z%*X_z-E zUlvlNFOyoHd+_>bj~xM-ywt_C7l8!)S}Z2~x?HD~a+r^XdW;~yu3>k9eEBPD%1e&3 z#U2Z?7jX!II&gDiqSYqkQRM|^$6VGAoOU#5oiOX~|&By+lW&t=&sj8e`(-eL- zdYUk>JHkmJ@qJA8Ox4c3XKZir35Qy5o2?nIjUv`36%EH;iktNs=4Li@O_@#vGbs8A zQFfc0Sc6i7d3IO$Lr5M+?8l&`{(#lFalzNjd->X=ClfM~Ge2t5?ZR6(#`9Ry)};M@ zqzIUA_uVx^$}rG#A(?JQT;=*xDdj)&Kb5eQ`;}9;b)fDdQpgeVReY#NWvxNBbb&Mc zEvJdgm_>$1p6=*Njc={Vo+2}W;u9v}vce!i%2MnRoS1%KnLxPnqaDVQl#?0z<{x4g9lLx9{qQRLXpgiN{1%t=l{h0TAhsv5S+6fPs?+p3A zI(xmb&qFSjz~OhpzD$QhSii7Ko0G=K*Qul{cmiQ|z7dBZ9v{p|-Fi=$k7l}Kn}{U` zBC|%}(2USoU{Gey$-ut`Ed`l(A{_Q>&^G{tHDg`*CWL$wkSMlhR5L$RKCv~uTpjY= zJbmwV!JSx9DHIP4dxxr@QH3Vy$%agVsGVPaMyRb}EkZlK@hNq(w{z3%u?f`kT(yi1N0^cbBfm@$-KbR*qzxLNxwVnZy5|S@} z;uk}T2N+WDGXc*VwTQ_5qSAl)&r4vfs5-5{{8u0wYaTcVrYi-qpZz5VT0jn2Zw{M+ z5BF+;2c;9z4V~P`s1xxcf4ey_%Y5d1GCvr1z*+#uuUdfq$-joy1{QxO@Y1PY7>DQl zQ;Ex_-_=s+5J~2rPtgBmKF0y`DY!CyiRGVqQNh};OkRWSU&@?z02o@({Mp%GOzbM~ zz;N*Hl56l7-$BbKe?@J5ux1gcX4L?`12(yc2KXc9F6`i6LqhtbhRpk6qHdp#iEcAlDoj@DHE-bAJt;B@YZutIu@=d{ENdhcK-D z93{;@D$($ih2yVXKLZvAA9d)9fbVJ%mSpgciKy;Bzj#XZFfg?C*8^97jwJ;=9gDg2Xt7n6&xzEe((vae2r z<^Am?i543I0?$&%Ar>2EpwL5E_u<~*ETNWXk&lj=Eu_T*M}P8gatbNwCJg?vm4e%N794yo#(Q zXUTtGXF|qInfML9$oJhsIU6p!9H>bJbX!FE#9un!5ddg}%#va>_`sQh%{i zP<=%Xp+&@FZTm&*mxoFU-$Sy!8_6C#7Wu4%$)SGRW{>GYbfvg*31b+L-b3 zGx)$4_xUh$GL#~>T}7%F45JxZez7g#^nQ+nmnw}C^?H9)8v|29+6@bKeH@^3zmB^zMcI3kT+N)dts0Y*IY^2Z;a@1B+TU8^yi+>~rjSd7h6{f=CsP5yAFZ7}_4{YmAl-W@S|I;_(PiMB;>~>sw!?gm4SENtMQgqK3elS! zXRj1~zR@=8^>R=q6Q!B-)9qQCN~MVQK#>!F=lQnC$~X$WxjA7SG2b>>$?8NFid)-F zthhcS<7wHK+3rGrVp@2}+jWiI%5C1Dp^3=9#o5j^Jawbk_*{^8fBf9wK;mxQ)Nr#n z%Dc*_DYCA~oIK-pxW02^;hzF|@+W-z+IpUh(Ui9C%G*9 zJx;-5XlfudT{EHMnIv5?my~WA+w9rvu$_XYM&x^Y{A^bes&}>7r!=p0eZ59_qVIak z@t=8HwYj~dg<|Am&rtWhfsMg+vH?^l_d);-UEHFXT$8wONqhyuk%$|5{ip=8RBlOt zO@^Hl7c;cdOf*|dC=X)9y<#~^jW6lIw&=fo5_|HWda?@OAblmR>h^d~sjc`M6q zl|?+gW(%WlfO&`OvXys87*_b*(p?CLl@arVXMLX;`YH%#-T&~m@2U~^LQMTU>2dEu z$e7&T;G^1n4li4aLX?DKcZR3z##~I_>P+`_Eq8zuy+>4xN~j(oZh)qvJHZ%m0~O;BD=dX1 zE`oO++VVRM&w8_XPQe(;BfDbSaHa#$WoMV(bNAtTh`Ib=%c@etXaZQ`371_Tltx2p zJv}|&tLuWj1a(8`$K}l0S_A5H)=C9o!@k!CXyI}G?YqYqi{x5N_=;?MuL!fxL9`K$ za>c^OM z1)2{Qe>i9`klRk1h%I%hXDQRnbLJ^Mk1@W1Yiyd((2Ymm!@OQGCZYAJepTWU)kpM2 zCld%5FusP^Wx6@4?FYhT!&ry;}h|)mgdtWK`SXFd}x+Abcn`Jr!7M8 zqXWlKsqrqwx^$!mdVE|ald^!Pp{Vc7`DOu`P!8?X_#S+OWFz_v);rb>0YGtJ?8;Tj(&Xbw+6W z_BqZ%|4g00wdDQx3JQj(4`n@VR@Z@F)^j;2a^H_t1x zV%xr@g~16|$vg#O=9WO1lE&CR=S7XmR7xb9iNGRTNIoYJd_^0iSHr?0C!xneXb2D>mexTV7YJCiL! zWGy*-;#&~vl?QQ&?YH}XE@8>^dmCQ@+i0hiym~wgClu(7f+ANRix9;nesEonu_Y7%Ax1A#H*d$W}L?0DEx^2HaIh#nT-<&!ll&JQh{^auNT^x_=W_17igPRpP`GO}_^&#I! z1U){~ay)@cLkI({@=96I{U0F9xq3ceyxXi`HGBDL_kzJ;R5J`h3NfSb-!2@!h8O-Z zaj2u@(=aTB+7dGknxD$w=68GuZ8|h?@@49p3=%imclQ)n)kURguT0 zH`R+yy@NM+xe+p~tB&7vQ_ODl-|&3pI@k3@6GOvUmTEvjI9Ym>a{l8*OaBxJO5I5jnG0yWjce#45byI7_Qw77tMPhy>j2XTu}bFnNQKX;_g#R%QVD zX~9zG9aGdv+kjIomZ3UqcG#)u2UbCwcZjhkZ^Y@+ZiX4fhnTg5W6Oxx?>DN5DYCECBo$Gr2RJN8|?~5C1Mxe4ozJbcMLakD)N1k7H)}k z{!hE^1^^73k-y35F#wUr^1Zd#Wc(S`Fds(ZDF3!*>SOj>@ zt)R71V5GxCCcX4C5PP`ndV^fm%(-TaxTTF^{w4((tWn;A^C!eN9M4!=X}+**14gvl=?sUmw0B)>YMice}r$?<^*|Te8qUcP(_y*w}MH z_pl>saW;9jcazIHnbc@l#Y{sAvDWPvaO+nX&bcRBJj>GYdfQL(u(*lZDlwGYAR z?7Zw){G8G8&KZ&g&&rP$yf2a%+h)KG@Fkvi9qV75EgW|gn$c6bDVlv>@0$h241r)z#5dO3Hsn>Dzgv^d%f0cTX z&zKXbRN?v*`ScE!Vyl<_HfPVJe7n?Jx5L!*A@GZGuxrR@!?Ng~wXgzfv9BokeHH=- z%*iIP?DdI?+W|WhYwiL;JvjT$Bc8sy_6fya7RtGCO8+LuTtk3PbPAc(Qj7e-fZQeS zJeH1qd?2PVI_4&O>j@oJ|E1Ymo;IZB7i~39|J0~$V6?@8F*WL=0Rs?Cb;?9;^to?c zizE)DnD>;}63>*b79d#g#%KOrSbFBl2MB_Y!yrnX2puShcZ;f8N0W%-M@v^SVU}~n z%*`F!&9O8uSK{VnZZs7(6r?Ro>@3U7QuK*q@W$`& z52iWd2i|*okOzc>W%n|qMeVh%r9J4Xo|5*=quDyr@)C;OhYTj$=8Mc1MZk9ZV7p^w zH_aBhHcqohKQ3V-<_7AUl{Dp=pril>af)+6bjnReVVgKl^qU;~&Kmbt|9T$k<-A8JG*M7Ta3YkD7#D#(0al~~ovqE1Bt~Z2V12VtmG$Ns7Z(M0&Jqp203l|a1X1^9d?CsF?gGt? za1+0w1>X`Yvj%nwwOdy!2G9&0Q3XS)=nsM2PiHUG)ZOOlAC-9fIY)Eglb_l9Is|wi zfEuAgcJY5+5DLE%LPphtA%cgn02Txa_w`R3=&X2Wt{!P&|q?T9$?dEDS& zk@987{(K>^+%ST7xcVX&f?W+)DYALd#(m|H<&NO1IANnl@zFwX+*7e0?;LB_sRC!G z)|`!(BkA}(%ld*;0~FXS&*D^HC~0W~CMLoboZVd>`a9O4h7GFms-L_sokQeYow1nk z=X3Pi(w&k-*Ns>Xh0zTTSDeku@4^o!s_0JA95ddkn2#YYl-)sE_lRAY@|#^{>iCwE zcV+a+`WSEeFuU(EzHrgGz`K8GDa34n!5Ta88XV_ElFM}F9r`PDNSmJ8J+`Ph}EdeQu*{y5pwyab2Clk}X!qD&EuT(Olym`@{gB#=|LZPiC+Qy850DGgn zmEL|<4&bwyn?oV9s@=6^0v~TD2w5e&*lO!6p9{CZmby{y8#;8j2jvbR!%pQ z@83jslMIq`<4ho>P^619Yy*a+(P^EHpZDN8gRoyHI-cj*RaMR?^EPDcv1j3y@CB85 zO23oIw9~oAR7WcE3ec>m{00N64|oLTH#o9x{n9J9GG}rO^KeAd*2-61d?t_MWLK&4 z(lmkfy)AzNyvX)&QOMYYhD%z*dzywHy>f3vTV*9t7u=QHC9bBs%&ZP%QZ%!VSJ^&- z1Vk9@djaA%dVv8mGGsG_CZAh z2F~ckd|R(QbVn`}TrS6(_Mqi+}tjC|klE%7gEYaZJw$F@qQx zKqT}IJkUQS1CUHyxh1+RVkUcEOCESuXmoT z=Foel3)RyEHCz~fd_XKV#LR=O+?^Q07dZ%P1se;sedl4Ca5XTskWp1sUwGal`4MBN z#IDUQkIfJ+@K`7IKtB=vC6@q2N~Ltamq$4`rQ^0l>Yzvm$d)e3pLwQ$?G9Uc%+&Sp zO_?RXph3Zh$u9GA8_I0nf%xJDL_3Fbb`-hkIDCkc54l=?FT~mdqRuQg66z+LZ z5#ImRek4fm@KrY!1dsuONS$4qm>fS@$L3m}p!)uU)77he-SIU=SAvxpX)r|fJ29q? zvoGFl;X7bZ6%%R_>UNtYl$MDfiFsO3VU)nB%}oxu4_&ATqV?*Xg1u6rUzCFCoSwgL^5gub*@^H9jJ`*Qk$QCnH~NK2^~@P2BCq_2P(S z)eE0gDe^MJCf&L`GApJOaX8y|gy9a`tkpnNnHBc3$Vvo5#@d_(jayqeOfg?L~8ns|WASdwXkokG<+LuE7sul)F)O zSaaR9&7z$4vqQEH;*Quu6f;N*x6fu0QML{?x5*wdg|zZ^1~db|h!!JZAIU89)KwmO zoSnsa_KKKE(pq{bX?D$gO^WaSRL52iW{4|W7jq3`Zki=wT<(?Jpj)Cbb+T+BQ8+_& zcFf>~@w*?giU4yLW~3obDFvD0fA@Yr)HrwnC?JmJ6FcDK+;H6QRf6Z{%pqy^u znMG_2QTfXnjeB;=P>4Bv)y`YMt|-T3*sSWwb`Rs7Y6I>8%BC?lB1dxBuHk!#s|S6F z9bM#5-nhP5{!ZCYh?(4Uk}6`(L1&~=yWOzgxW*AukQgu$9v(frWpq))PhSwsMUai{ zXXBVr{+)#{+I>F;-5qEfT+lhi>r|H~n{8^4{mub?24k?sM7fC(9K6o6nIm(lZGv5+ zwS<|f7&D+^q;QW?aUvgh2=OKtOGf)4@L(j|9H!!gRqDC;Ms;0fT`L}plFA2gd#B^_8fE9%4?U4h8(sK5c-=(&{x{3>mvTB*mgO2UFit(|3v~!4t4393~%gzu>Kt$=tgD^7eq& zkIlhYx=j!0bv&duqBgIXta3>PIm9e%V6n3+#Ti<>6Bss(Ipa?Mu3#s0Xm_A2s4-T^ ztmDVdovmZuiB4Myl!ww}aaqrf6TI0Dhbt*8cJA0lmlurjGTGIae=grI`X z3mc_eKmoBrDuj45 zwG==Uo8$e?qZi4Vb=gDAemO#NQ1z)6eXf>p$&NwWY%4s?XBLJVnW(;i{<#w4V{^%E zSgju7@xJ;Qym+L9dv?H(=g`#L{t!P1Avd#kYUtp&tFW~Xj^&`1Ery5S+TwYVr zDl&lZ+N^HQjX9-RVV7&xBzy8)O;{`Us!Wad=5}OXN|gw!vU$6_kU&!Q&i(u+XPb5d z@V;oP;B{(XJ_gd|Q>rg7iakp`MYyh7T=aZP)In_otx)>C3;oEyf2%?nt7ec)-06#Ni;XU zxCI{4^J=kmt_v)VCmKDnr?>8`nVRFajWsKjiFY_L;&n=8MkdF_hV^B#)Uu{GeK~W5 z*%6&H#IqF`>F1^{&`O7i^4#G>x#H*U)g{8I^PRJ@AFuwPeD(I6TEcCAiXmR-bR=yX z-|Aaia#tw@LTE|^75WHrmBmTTq=CrV(ae#Ry zqlb>*#Nq;E3grR2F_{tOz&9VmL?x!j>O3)M3$NN!BzKLOz9># zSd?2}%}TfK_NTb`sd#>$f3Jl#Ci`qqDkbuQ#`=A;%{F|Q=Uhk%lx=kU5cB>rEcvDn z9A_`eGi2=Oqt zW6LV$MX$nM2~{x?lmW(O!(#C}lLj_<;*`;+F3=&81nmUq{wVSv2b8MJJVb&j&_IB~ zUFMVLxO*0OUwu#H)W4}tttdk!A6zqDghF$lXC^`|E7W^fhm%+>PP-vN|)~dAZFCd*k{x^WGMl|7;Jo)znJS~khw-) z9HpjZPDkz=EqSxgQ~D9`{+L38{2xU79I%Ftb`fd^0#^~(36xJ$+` zt}|Qr{>4)(5gR9SmvfEqmratWH1qEHJL_ei2P(|^N_3}kW6HPaBc>l%su%{aS81h( zFgnUG(2O4Wm(&WuuA)#e25Ji89hd_RwEBAV75BZaQ9XW}5A`P}>ZXRH%?z#`e>Dbd z{I%3oLa7|kS09V#)cfX8pfP9CAEDRJ$%}E&dvxgnR znUz0tAmWUU(6e10BlyL}hkd#5FR5Jwg|9Wub(Xp}OW@uRVk69W-_VZsh4nS|Dh8YB zRv$U`NOxOVqZMj{`C0_2aTs7XL+8{qSXDJzvTEF$$YafhrWr-BX>>am&i=R5_UoJr zpkTXfr}k5qs0#Kb91@LEyvda?+SfP$mPo=BE%J;9-i}rcYev=3$<-Eye2NPhNO&;S z*zl3l$v}5}Jcria?0uVF#0;(RR>5Nk-grM-u7zTuU4h->z+98MPn=x91YQsIu#?WP zIBwAjzWLC%J$T^1c@;1iheax7QYTdn09odj9Bt<#Zi#Fwk~va$k@9Ov*H8& zA!bcqh;-Esdk>Yei}_#Z<|sp-f3R`Md$glGY+UD#eAh;Nf)`iCb5<+ zvBpGzktQc5ChVNv)6ADX?}J@0mkWJ~g0a!FtfZabxWQ#26=t2{Mzk-XWasQsgHj!_ zrw0Cvy+yh(EBGZN<^P?geSR$MxdcwbIoo#(LLkZ39Xvwf0b3?+ZGz_)jkaK;$y2p- z4in(DC#;TmEu6y;2d<@d$wIP&oI^UC{~hCstM2vwP@W4mI}QbGCP-o=aAQQbLt$g= zy$(eTxyj1Ui|K3rmGC>w0Cveev!wQ@$s@pYtjCe~Va5xBh@6;0L3`@S{iRoia+2r5 zfdC!ka4o+$RU*^sabXPMrdAK6Cq__L>X|jS7(oq`d{wng3?hH`0z}oPMm_=98+eg|Xtc>JQoG-(cK?5!5~LOTK}MyqkhHcj(UW%#6!BY+vV)rIpU-WR;?gf$^hGgmsPeLGno{ zUtoMh7{pJ90AMoqVayLVqQaAOjLB-j(a^3OTWbT`$CSa$`0^8l_C|}V)?3^kH&gij?N^?I<)YtJ z4Qjcl^I?LL5VCXMG44O^@0bANz-9hJhp1tK4p1WJ5)s=u@R}IWv15Onh`R>-<$WeA z>QM4m!9$QtPcnq$_aT}y{>YclfaPXCWbp6G!zo}FUOY4hA|C*D_wgwFk!x-M6T?TE zfBtSK1;b^G<|&%dc$q(HB3*zK@9eNKa8rNB4aT`IU%8Hfkz$|X%Rgoi2^Mqy+tZqL z3-Azv30!n?2t%~FT9!^_YFCz?nyqdQUy-18WF)`(cz~OA%fJ$$rzQWIlfWtPcWLa; z4%_KAJufP?VHV&2564>r)!u1dU-F;Y5DQp^+=odW~ZkbC?eHN0R7h=b=ytLyJL0C+b7%s zCOyq!>H8}e6%P36W#`5a>Keh5v-YpGxxa^)iD%%q)*8?b@Nr5D>qNLvqD5P!@5U|J zG_TwGWi|nG{l(%svA5X3ucV%r&ko7FkNBtSDD5aP{SdzASE%1?IR6GYT2iy0My>O$ zTN*4dBxAvWOdFGCnjq4kT(>TJXlZROqMKOUIO71fAft%p)Ac8pCi3eLc}pQDc*l)-bY=h^7pe(>G4>!Fho9o@PpGEFftI~S1n=h4J*@S}0UAE;Gwt(Wp;!DHtp zpkE8D+=M^hCNkv=lqp@mA7OCG8|^bK;{15^ZKaFJ>NhFy{9qU2q|}GdF06LlAgaKk zU~so?JrgzYXPxlxj=_**aD*=(lalY=tK3?a-tf~wPJ5So3*#L^U3hKy*SWjx8ope! z1y)r=8z^$ks`NzS;&7&dcg6$pPCrHLUH>g5<0L8G8LR(XmiEtjE}R3jB6Xzs(tkP^ z-_VV&uN+KN9X1;X)HB*^INSeetj*L)W#8drNj)X63_F+nOTA17#6`>|LNf2+AFmCk z*_JL%l8VnXN90vChtEj<)utJO1R&xMJy9m=()5m{1xRpojc7{dShClsS){5f<#zG6 zueMt{e~Tc*@AKEMQl3Yx*l2&Ld~&C)oja(l^)1ivrH@qz?eBj!!7Bj~*zm=t1X`-w zO**7y#1?ny{w-tak3rVLLqeWX=?gDBLYbIdRBpaAPHz<1e!bk1EakosE6W)c3+S(s z&r-UJaP(5TM&ee=+l^$OVpE%1tCIbH$_T8orcSij|CSN&o0-v)098P$zx&-YOMNy| zXJwD~Vk4g2hhfjK-aCK&kTzSke9vqy_Wak5+pIj1H`!DaYft|1HFw}^rg!)6|1F-E z^61bprZu^Hj*h<1pDluCVz=kAln%bsr&aon!wIOB@0?4xs_Y}De|~2dUb}dTz`%ew z_=kj(0SWg#kl#n0U@A8-!S&}g;jzc*oE#rk01D$tnc@sNa-!gLh`h9?0vj`}B>le| ztN()ne}54Ld~x07%_{~jr0CV`oIk|Q6Kv+b|Icc;QiUeiEpK(>57+&F1_vT8ezge8 z$rznK`iK$D9Dg=hlm*8npnu`0uK*NbIY(^_jrv`zimYo&BkJRizwz3Oy02ArGr4_d z?T8dCT^(XUy{)N5#Ub43Vn7hxo3d5gp!$I#yW)!V?Zl<#Pxs$%!2U}Iwk%bqWYW~k z60Up3cICpGw)^qVM};)eF?HZ26LmAR*$Ql$66QU^$Df&Ec7ZhrNP@;xjh{S zpG1W36B{5SBQN5b%&9e^<6p(Z&r88R9HfYMbU=~hw|L+m--qJuIq-HK6RC+bTaoe$ z;V`zgglogK@C?mq`C4~bIfT8ZBe4ws`S<}32gl}b!Db%eCBl5w}=9F*Y^tqtz}kf=EVUp#{1Q%z~Imm`{oEmv@RPFftL(+9}3)X>??{B zg7;9ALWVUi2#fEOms4n&=zmK@3#`G!(_KyQh%!g= z5y`2FPK%Yqv9RDzx&SmzvzYymt~srB)yk`lgwKEc#q@#DR@ZVknC|`Rq!HW1Kjd`9 z41d+~1)HlXZ-S&-uC(-Hz3@juds6~gXjM--unesTEW{&&NI!L@;HzwsAXIY%dO|L#Y8 z4!|>|BPUB0S{F!a>d}`T`T6ePSdWCzR_}V42*(+cZmY*#7OL9b&K~rfRZwpC!hTet zi>3R>At2>37d@5Yr?k5~Xrk2zA#heuUWwWHm5AARy_+Kz-#xRv9(sahCAvAWfNR({ zFQYdkQ!8DgVcIImnh(4c%6w*A-!gM-pg8h|n;lDnwA&J;Bi&nI*dz<7qo@=j3aQIO zHNWC}Qh{Neub?PT4~*HHylhmQcw1>$QgN4_H#ttYCE|P#$7%G8t5TjxcUJMJ9-#}L z*=zTKB#OB_I5kLnr?@Dv_^?8nPk&pD&e(u=Me_|0Ng0&pTI)owZA}<4W@7kmB3wRX z>)3beTEsmi>wAF(^<*P|iBin4%+Bt0xyi3S)xC}OPIY%_3a{ z!F`W?sWr>ump1l3tzgf@6^k0tVM$l|GWCIh4a%>9!X4uU@eoC+0i0cr~;bC1M3I z>ILOABp#h?or~?FtIY*>W4Aaq%eAwOmFmM1E_@h1D_lJ27n3E{-KYf3G|Kw`@hx{J z(+a)UOb`L@>gq4I!p`-TcB)$8)#C&$MscGhWBTm0E1y@L+tHQEG}oIA5ccWejYe?p zvyRvcaD1^>7&-%ePw5lPg41iA8!Q+d_F^JRqk}tV)bJ*#PWOEVExB>SSWJ0U3RWl7 z4{ym!w$VLLvzibl_R^0dOu~HvSNRz1lw=@~U`(X7!#8~$hgQo+JJ!Zl?H;_toQc*c z2{EI1PdLy#@>VH-K14jH(A$}6Av(O2~Kil+dH*+TOzmoL&wHD!^QL0>!wIYbvUz|Ij;PSz30F5#ALL#jANeK8haYN ze(ipT+PALB ztZfps^f2qY*k+|@>B_L)f7fckY6+1@^uQRr*NcMroV;|1YE7n zUSz0G%9K;iHst7TI8P{MN9d?#+e@wd45-7r)9Ata5u%FYTJiT9<94%Aa}PwTq84D6 z!lIFxavuD#7B+C%A6$O7dP8c3;J5_O!s2YQzCGOVfa30y=7nXRrb}QL=0sLP^cs@Ec?@YW?D~O!!%7&mja8-4u?(EvKk&M4>ih6%fWwk1i zB|-g6E)JX{2wOQq8Mhce$1Jd3w-@Q`%DgXhD%ATds&e14-q60vuZZ-@a%R^^Z6?CG zsN%X%3k%9qhdhQZR>>Lv!V)UNe^U+E*2N^YTfc29QeJHI$#{~@Qe8*gtEB5Qd7}(( zzR?-$A$+>sn48?hjV>ENw!g%`%6FN%Gu`u{0K6c@wmbJCzeem)))3u?w%w>kR=jrE zA*0Qtoo;L0=5@7)6y0o0Niz(QgMV4H)VrqX&^dpWH^YA6p%bT;(_!?aLS15`r^C+s zDzu-?LRCX*U{yju{dR308Ij{svAyukxdx;Awh*03CxCRA52#IS$u4dbAHZWN8yMli zlumW^Vp|=``!%vL-WHQp@j89<33ixkbc7rMPrg!)e2;oNV`~%FJ z?tsO?nqv-a#+Z;^l$|ls7E#iV8tAFtl}ao9nZ2?KggP9LTBM>~Mn$f3hzirD z^DNhQs#5oaX0k8TB1+H_Mp(F;6_ib&w1J5m07 zzUemld45Aj^vm7xN#46G8-klWIvEBVTJLWiZqU!u+8wOq74yrWNWeTZbW#M|t?f#@ z_%nwq-LpM0T%kpyeI%>{)R*7}JoeSR~oQ z48`dvq;U{%qrI?1!8p#TUHheR*;!qdd541|zKdhMM18^~-P{~c&-Z(m6(1njx|($L zOPnhK>^xZ);{79)^#c@%4^kfR@igIhl3my0;dD=~^D+T1Zpbq2GTXQ5;%l7VUwt@q;_C;xlMT_+52n6?m+o4q$BDFo*GP3N z^?fiWzg=BIO_8p2H+!$m$1vToH5=ew*J0Z#LO+J{uj?qBQU1K{(DY;}wiyOF_W>fM zY`n^;^-d*kcku4fe(5rdU@AremPec_)6ncj!+qyMW>rV~wnlH!D=yD|OAPks04D4Z zZf8@Q&PlMQOIhZ4{ZYnYXhw_3)HA8UU(ot7UyCJ$dVwI@w;Y>?tS71r;rBBUJk0-2sbqlm@Pg3_m>AQc%1a zCR5QC_H8Z6c)Q6dL$?eXPhR$e{PbIr$<&g~q%UOW?a-*yt2}s9rWo(Jic9*b?zqr& z+~MFTg^@3|?|-h&%NLI7eSF}#-8s;mZ{K-Dzr-(WyVBF_dFoM)^BntG9PZ6ymBLwM zZcetOENoeWcecj(3P*=PpyRVDQY%@{I#MSh^1UgJHlKz~4s47qntZLH&_|8kwG}#f zt}6zbJAZLt45sv)_7m+yQ-T6nJ^I2UFNUhMCGVxCyBfDfB?kAqUzZ^2>eADMe$-LA z4r7B#VKob5@?lGTCN0JOy#c3+be@u}>?;rMRp}^+$smWO=5E^M{#vV@m(BLi(r7}VHipG6E*zK4ewv{X=g{r&o635^ek0Y4^ax405)#&q*M zS~u7y`bUJ-s-!l7{dinexOO<$!(Og*HYPm=sw<{2?FGmN`&h_qW%=Z+xY~qZj3QjS zZ$=CI^V%#&m$0^tBRmznagZ215*~iK#f}Gna86YlrXhv0xq9(F^DRu{}}4*9LGZ=?8@Uc+|dI?>Rm9Mj4gsvXu+Rt%%|W&+y~q+*3{J z>k5vfP+R!;LIGx^Z_e_2A59OLG7#$6H_PSPqCEU}xgR|`jU(h88O7!3Raj>YB9^&4 z?bm(5E1!7lvm69So^}<@iFhtP$Aclwxri3D2n%$%u$KAm3br>#IbG>0KQC^_CiWY(3t*Jt2+IXgQUTo zAL<|98Q11=xi4I7e&!ibn>Vy9*tMF^(}#Ip)LrAqdelkwIi1DI?9iORJ-lfjBnao# zyOxg&;&bM?#SJDBVyS_7d>s~f()xrl8`iEGFwOoGHjG%1Sa0(|wxw|jPFPvOi zkVk*^NobDVS`fpcV^K+1kSt-bV@mRWiV=x*ix1l57||6jh*)9WR&9m_Qo+Z47G#Xq zauFpSm3?8oH~40T;C;Au#f=%Gi$-OINv`Tr%XTXUk1CuNj2}FzaIs495w|JZE;BD> z^HXG!eD}?7sZ9kHhn3ySm8YK&H}*8SLw@o+dUKB~SaDMmC8A+~lQk%#{9r4Vz(IO& z5ammwf^RVtl#7>Yx`@BdSe*+bUBZ3rc%-8-BBvCiTZQ!O3ennuxKU1Bb-+9fj8f0s zr3^kai0`|;4{-FDr!MI@6OGU({`|6r!^C$!`lUC_2G}0F!o-QSywd3n=8jz_K1 z+Tzi@BpiJKajzHNVuxDY9drh~4Uw_7sSnaRPpJ=4hUVadgvxld{0rpw!rFI6bo=Lv zuRHNq5Yaq?U+f)o9V$rM<)sBnFcVW7tlLm8u2FAGyqu@$D6Gi7u)Xz#Lr`Ol;`-(}Dn zBOSZ7JzDwNY6*Kaw@Ozxx6;W7!V5v94qa=)H96OZ@x$YSA}h3vgxuzQNRraf*m}nY zgT~U^yEnc&q2@wAMeU7J;glMi zuwEjR-fzp3+v?TcqWP*sCFKh|{lV0O34*6w!~QT<^$+zYZx?04I#=_b@e&Lks8w=-uMzz!@({xCQ z=p!9TrMnXiK;#=VobTh4fe26r^W*(((-b+^W+yQ(7b*nUdESHHtGRbqm{R5Ma@46a z|D&5fo!Q^^3S!j6q(2cC-56=hxzE)*8rKkNilv!Lbf}Z(S?g;ASqM5e*~pG|B?)OU zdoL@G*hj5p=s%9hAPHs8%&3V#YjuA+^vKBKch6T&R(S^|p5Pp?Q5TfdtjMjK z%*RcXIE7toM7pos66Y12DuMSjZn_^<^u3v_0q=ao(2kX2t>#uYI6yWg8=?5`GMRgG zSA`Vrt&}9uaDBC}xnJbb&3tuZuAP4=sBDv|W&UX2&DewUS9!rXuM?jE$-;l8?V}eP zCqZ-@E|`50sVx}Va~?|`dfFUHGZzzC%TF?5^|(;i4U9(DChDwp<4Jz;3R^NHMrfJx5hThY4Jg zt6TLjjz^!3UEzJyJa^*IbKPuCg63Y@n66_=YZ2CZfpAn=Y8gs8w0%RXGxs)ZXf=0ZKlWZ;k>XR6IY}d zB!00wH~Jv(ZfdLXlY8$hp0LnbSEOA#_#Q|V^}F494#(^xk3X$_wAaBZTG>2vyEpsu zxA(mIE$itTM7XCXPTL6LPp$~?J|ZGu4H3NH`qiQCFZQk|;=fe4ujiad4#qrG+hAPP z!QXjMhjOa;jmb&(jQz&%c{!8ci`mtbP&4%Jyco;< zu{wcNPtML;%3In`LAD9>`0{}LFg#O8?0`u!S9iSMQT*N2W*10-O_dQ6s?Wcr75PKl z<0yNyrN^CivyG$3c2RerpEzJymnRiELy|PNSaeB#d;^sckjq{kFElgZH!0mAlsf|!l1p1*RsoJ~!?(5svn&;}dV1E~x zx4Z8h)#20)yp7WyC>;p;E$;J{pE@XLta{p)p)^+qam^jsh^_w_{&s?)mk&#FIzv*};THU#CKxV|H3xBU=_=3}tQc}s_!%k6>kG0DJ61&Hg zli{dwa!-CF$j#Nmqsu>#MI%RcFm^aJ)FTB)-B?| zS0d7c42tEuyC{YZ3K^BY(WgMtcwj}nH?GE;v7)wOXzHI2Y5SznF(TF-U@fUPz&!p0 zv}eWc)1PL%)Uc;87j7&wo-d#w9o-hTt94O^q-tGa zwH4hSm=1os_2-gX|KJ-^j^k09F%^V+XJubae^^mH?{7i@g~1r9i4c4ArqQ9MjQN_(k+?3U&7O`Ct1*j(J@=_hYE2nk3YZ}4Am`Mo zcx2{a#`Snj8XHZRTWr0z_Sl7-_ZYu8SE`};(e&!0R$d!5a?9RV; z-x!pz>8c+btHVrxLM?GT=`DU`oXWMdgg&oHtn zl@pHc89cv_9HQfmv=uexeO*jTy6-H4EhdT$3?X+M8fjnLP8rbzaa{c}r7UxHVUL&R z$8g+3gvmg^reJcOmLt8{!B7)Cf{z79^a|pDgs=Ir>Q}nUk4Z>3{<7%&C>L`xLaioL z*mhWNN5Up^Vd?`Pq*N`uW^>=m=d9HL&zr`H#YT zB~*6$=MWQMR|WJAT4o}1diab{-4E^VK1l6gz821Y<;v#IZ0W$+8>S%egeRT+0h`^h zY@@U;S$Jbgw_KoUO}E$ekgwT(Sa;_8$eg^2N88O_VRYOv(Buc@%#AxLe%g7AF6P-D z#lb&D!*m1P#8nV18cw-82fYit>80OBmoAp(y&0`j_vNjX)2cPx$i%x`Lt?yeOUf;B+wz0`PT<7n&a&&A34yxx-@q zP|6`i+339(;U5_M6`;@+_qI&=T@WvCR{h7tui%Q(zVlpA!SfhEAG8~$hlwpERTw}h zH^=}S<3gE}h^=kX^k*VQjE>51rN`H8K*{p3r?l2AA8uSOPI24W!7(?Cf(|)NBt;fT>guCxA4?6XHOtGUi?)&>#zO8`n)k_1cdSY z6sy{I8|1!5GlS1k+CaIEQVwr$J7#y5j4Zvou%^kIG=v7R*g{{L-BX83ODkd--G{Ls zrgBg~v9xp$mEU%{W$mz8j;inDYv#*SL-``BfPtYS9wS?eCI&=`c}7QXVW#dCudVn+ zO;BXDXSts1Vnr6IZ85pby6sT-)}MQ_{hhC{itr#bEW7?$r}=FuN4>aqgLOG1EoewT za<)7^`?jL?LmO?33%08EUjEu!-{%^+3{gD#MPmF(QsodYdFT5M%*LvO z^_vUPOoIpev5mFwA|?V1t5Wwtldv$94d`e!$cwkV?HeW@&0_0pp$g+I(FhV3$o?f_ zOZ1DRTgV=Eb1*RUSAgHR*PmOm-zS`^cS_(E>3jUoP0fb>CREUnon>xQ5^^W9dkzEg z37GwWP5sQN%4v~4`YEtS1Y?-tN+RX>{3T+NS67~etT`{ebD3bRpmh0 zp7=6uH@v#WT&-nf+{1W=6DlB)bosA4+ND_E0hGCRQ(5}hRBsc7ii_C)OwZ~lcT^|c z4;H0rU(L?$4RM$j_#m`NYNh|Pqtm%#jXAo8gwiZ&gO|7bxsD*r5ou*!q4~k(ulvwn zNjY7h2GI?9^D!JxMSAnua($ulVTfhK`;?GU7h*L!tg69_vJ4~U@p8-=2>9K=gVMIL zqxHqGS$?LS@N&ITL5CS-@Gi`JbIfD1)%8N%lfSOC_rFieDw1dF$Q*J!o9~79(vHh@ zFO`zdN1|-XZh%+Qjgjp??Z&EN{Ln2n{5un6m-R)^Nnu}Y%xyeYt2MaHMp0y!^$~LC z|627k4?yAEEIVV4r^(dve|{cH)0!_kP}i+j`)G2iLSNHRT6Cswu3_JH zO6jV<%n40LG<7FmN4PH}-NzPsOuok*4ECnSyDu5Tzu0z`WHXFCf4x~s zGdd~!FaFK|#)!4sqtrIqux2A0bhta4d;4>MY0X=qoMC;qq5JX_M-^r*US(Y6$jQ~APqTFOpeMNz z@3G&1{C?e`j?HhfI;}sr)AOGRe`o{L3#UuXI#z~wsVpMI%uXHx za|DIE_G}3-8+X)RDE3hSA=uA2I-Kj_sl~y{2-laB&nZP;(^uRPIurBgQwKnccH8;{ zo`3u`-oJdm#!qxi@@T-naH#%Ds-!+2Xo^d<7nYc#UhMh&e6;N4?TCO=6*BE{MdrM` zPjbTqe_aJckp8re#+8=Xs%!rU2@tfE^W}}x5QOA1U}h`XZ;ze+N(ODG4SIY1FWEH% zWcP6?D>=#Wv(k9|laD*F;F5Aog3%-Yesl*f<_=w#k9n6#2Si8S#>ljbz^`q|&i!W} zLJfiGcZc3wymlNy;vcN$bB+-M_JlnBPWNxsF#`T}=Bx{tF!C`lQd={?32?3?e;J%x z5a6+2hSz1^97~Y_K&-8XR;5i=V3j0~?EU|eFn=KMAtUctAxIc4Fw*43g_eho9n61O zuur?dV_|*~^lZl?y)Lqfbdg;bZVLn?pP9OX=r4630*nR^A79zACHbTcOde*=PES&Q z7yP$v`9%jjb|h%>`gr6Vuon^D@bMc|0DZiq=4k)cV!RxF|31!qJkkW1oF^{U2y_my zeER<*LO!Fb-)L%^{ry>?J9cqL;+BU}@;e6fkOMQfX{|Rr_eG5|598hYE4Ity1oz+G z5FfAp0QbI6Ia*Hb=2IjOlbWQYp?@yMRf5k@(DE{?9G{fIW%9CdUzMLb?AgD)+x)& zEk$6(nHctGBSs~Ky2QblLG86n-<%zK=Y6S!gSj>Ho@q#t%}`27D%}IguFcMx``Nmjp$Y5OY+Yg7->NQRzN3w+&!{FwK+e)w~)>r<%0us7IK7GO5S98X>UriK)9kQK;$)VU!50>hU zX&iZI5D*bYoy9HQ@;TcCPt<#LbPetW*muKOxZCw~MG!7w-ehYFLA^s1fb}^jP3|q# zPrRZuPDhcz32kJZz=|o2tGI# zpq;+lR+8eGAYc*e1KDOd*_5r~9^*(I(3R|8o}Jlly$1qM+GGS+;$6BV`!wctqL3u2 zv^4wA_tJ=S0rS7{2Cyo6E}?H+EA7pzEUU>P(UGjc2-+yNr|B5vgj-{v)f zQV{`?^IV&~gfKFdnUUx*cX+4(hh7|^xq!`=|aNZ@`((7Qf_P*iIhmr{xCq@E6pqU9cr!d zj;H5G|CI39!$XHCY-k-Y>;VeE_!gMXwEIg`a%|E zjx1};&~>W<*ie%Oh}UaHNfcciIBo}fEIVFHA!CFSqj2j(!v_xzY#g}d?<@@cFaZ}D z?>-JIwO^bp){T%iDqc@bv~#rOeH2bwH>*?F1XC-eL3E3wKOd|i0FW!^`@)R3so!#; z?qz1?%a0hM4QI`MV9Z&jBi9)Hgz*)W?d7S~>#OY!0jeXqv$$)Ox`ogpqQs1~a z4;$yBT`5(=qPBlqLL3*%zVy7Xx{xYq>K9j|sxvIOFS#)+u&FX+z`&>;+r8lMS|tIRN8kQs9D-9b4o#v-f0dxj>%ZkXp! zDLk>f=ewBi_SY#8Lr0~+ zta8kS3VWC$phh}N?MK@qGh)9|u4;l%aE3gqDP5FmPQ8ux1_Nde4F;jASJ=&t+BZv9 z0!zC@Oc!ovrIa0o{XV>VGfM-LGdmPvXwB1k5TP z2=_5O_T4j{@ffywu>)Hz)-!}6aXZpDMianDH~a2xjrtVEm{BReq8fo=l!1gBF~>i>VP`cZv;~$>er17(Q?O7Nsc4W z*wq<2X7Cc*>N$x+?O1HbN*j|$vo*eIpGU26Fn&AgFsPMOi#_tE_ETJrFoF zxv@+It1q0?-AN0A*G3X2VO5q;`_xY&RPqO;48~NOd?j3ccYMnY-B(Asuk(m-4KzGL zn#>lGnjI+a))z)RsZ;Nf*%{6aLH=k}=!$b+p;U@!@9MKQ0N+kV*VNiJEm*Ul*A-G- zF(c|ARQuXz9gT(V#tNMW6i0oL$3{lx603;))0{TFV;l7Jx|CxF<`%7g<#{NURQ|wn z-$^45(rRWLi`j-psf}HG`O@nsC^a9`n_te^%J(6Rboy{zUPeqj*ZL<_{jY2n!Gc_+ zSksK@-O-;~PZMQy+s(C7)><&j<8)^Ig7N7qF1e-}rs9X89oG)*B3F*+F#}JhH6IR+{XtmUNlhSwwXcim9<*?-VNHGnhP!Po@xe+YUNfLHN9P3ZR2$*zJz z>SLdqWj}@YAkMJc(0!_Tj{d660McDk$5t^jOmge2SLVD%A5`fqph#++>a!*h`63ah z$IB!xN22fxIs8P3`$Cep;Cy{lUfkL{Iev{WI=bGyn#2|MKx4Fhzry%u>0QNorws9n znpoK&SlW}`P*XBJEblex`~n?K#Fr3AT2$V(k*TqL-p-AJ8*90A zRKz#rm*N29MLt;FHPx$ITsJW0qQvcJVr^G+-EF6S@4rAAgyZCXLR!+!~w4B~=`|DTD|{q~e~;0zwtH_#tn4y_~lla?p%)r9se= z9t?a{t%>>~-G2kjmUvX@E}1i0Vx;G1PcyWSEa(-@77R*>&r1%%9rQ>pJK4tO3)S{q zv-bT`d*?h?Wh349pcLbLT^prO$QO=DS-(6dD$&k+vDfw2MS-w$H7qz2LkmeHp}4kI zF)Q)b#+O>SOo_3yocI2{>3+@2-Y?HfIQ4q&P0V(G#hC7HDeK=)Z^@*oEVcJG*zJ|A zYj}~a4Ocj@?-WuK(^zwPNLSRyUVV41?zM`fO>LNdzIYt$vt%3carcJd zU?wUf_UBTzf8B(F;fHUj;FT#DD*beYX802g5e{D-B-=68!&9%hoHP8wG5O8_aFFg) ztnU1cXG8T)%7Js&{=$$y^ZQ1&AUxU!Y7)~@4=3m47Qh+7Z$%a$^grNyuhC@x~EPZXN2*-K0cP`$cvU=q;{d#Wo~c` zA!lyhex)g3FU)+|ZFXYn+l1uf;3SD>hp7Xaifdl#`K!*T-L|6j-|Sgq;+TH&#eu32 zvHf*Wf{3wv3&PB$R>B2up|O)Bzw@#L#%nl~nR(+4MW17qN4R3_t7K9>plz2D4C}l~ z!uOU2Hk)!SpPLqL4SY65QubE5nMa5Yi>~GAamPo{udI6fu;OS-zkNBqNTZ#hdm}GIoe!ANd8Nff&rQ@cb1D^{-6BU>jHtmTe zNi|f4GCkM;AhpC+|Fa}HL3tI@2M^IL6p1-R`HKNYjO`x>P|y8sJ!>bx-K#YN zt2y;6!gao1Ktnqp)YnG={KrF|mz^C-?y@oonYK<_M}@^#v0@dz)J@YL_KXBzR>s`r z$K36D`Cl0M0@$O%agwS7`%F8~J~0tjo$1mtzWX@A=O8&tYLcpIrTvxO5ES*F2=xLS zFP0&Mp_hTp@V{8N^ua=(2qAAwllxC0uhm-&Kx`EN!%SrcZ7;yi?BsK4wX>uevQl+; zHcfn{2HYs*8{;=aH;{&4?$Bs=bI@CX0` zuC0ug!D!cYqmoNPAB@50eE!R`_~A=0jQ@K%=MZD1t5Kn$8F|SKXZu***&y`TXlQ7% zsC&<7|K1!EpNq-I#Jd0d(+dz)zflSsvnh$~DIBZL-PHE8@ZXzITZ=(C(6c93x#kLW z7Caw?T%{A?pn%3`>wK>Ci$$z`f}Jc9Y}L z4FtIY%Od^uu+XrXA>``7WswWjL^g?_wbRwPtcr*#y}#U{dhlBzI07wFn-oe-5vaFv<)@LZ?ym@^;hf%*j6swW{T_D2u!Ey-Hjb2=s$582OO|V*{uBW zZ{+0xbC@2N^N^}EFJShoLY!94YmI)BED=gw;f3MPKy1kys4!&TAf!6X-^l5XO{rJu z@Rsdj6jkKp(yb&lrLYrxG-z!|F+(SGv-5MZL4Bt552|kU>9OM~_GLUk~y>lIDPDd%-;Jc9-%1D47A>Q?TuT z5-QiE*+=4|-7Vh3>grn0if!@2$Oo4DHB>+J)g&n%f06E1jDzeh?Mx{Rd0&eUowc8+ z{1MehQd!6{2@6v%wO;hbE!|y>E8Of2Bl{hm_N~=WD=$t0u@k2Wh9y5wW;$7 z5);_*qLWUHIZ{55K&AOt5;q&4f~|1zRBn&=lWl$uSSa8QMr$kYIE&e7{H*p85JiW_ zuyg7S-p%vHou%W{($J_79rG1{QT$aGYSn)=E#mPY@6oYKO9xz@urXkQhGPFn8B+19|N7ekope z@63jGHQvE48CI$6M%QP?uP;^@JA%-cBype`*&$iOam(%kq?WpR|M{lNGR}WFXA{5( zG^r;MvLse`BY@c#O#cZOf!v4lFD(5u4fgtM^7Mm(zd_p1QgG#9wAxf4yJT0z%wCak z(ediUmHP&vFANINk8WPG#ZtrVjfX$l+s%4|bfp*#Y)%(wJkyo3nJEvRF;2Bi3?ynd zepY3Nq8y^Ve&{Pg?B+YO!>bTNxiVgGNXtq~iV9m(X1On-0S9Tmw0UWV%zaVQ6@;64 zr=Z~}vwz4(_ir*j48{v(p0G~IyGpsP=bNw5R>tX!yrq1QTJzs~Kk-6{h9R~G$! z5k9+^&un_kN>(yp^LGkF;GfRmkaOKXEF%{dQ#N9Vcw0YH4bpCVjf4KqtryX;igZne za}oTA956OouasDHAqR@$jYo^tcdo?e^S(!F!d^ygnLYo1HLc~2n5;d$V<@=gx&v>_ zlS#;zPu;Wgf0qiQYJjmA3q3+hi5y@c2pgwV;X88gOuM3j_1Xa_R;?H0;*lyF@6b zast8DGXwjSuiwAtP0SgpV4n;W8c3|5i8d!Oup+yukX1j>iPEMYo)wneF@&0r8nD;< zzvqoFoVzD7cuI89X?-^GtK1h^ITa+nbLUg$x!RpxmrZ0RW2m(vIq~sQU4eHjQxS~G zBfyv_(pENQc=;fB_%m=uqMy-e>_X1LVZeN59Dx5wrnCIV()8B>w8G|}zD^JlWxSBQ zP6(O1<=9-vA^$B7maf+RqaR1%@VMCtTCNv->da#RNa$T@|IT{MVrqcJXTsD7DMWL8 z3eiBk1^OR-@Uy^xSth)Y>z;W8;ml+h64t zQakyOHNNvgL5hb^;8MpMK=ZHk94Bdj!;3;4armE7IuNSoUAABjI6=;P=YjnZ7ltbm zqTLQ)P(p;r+0!SeFb&9&sr#7|;Gpx~#lN07<$tos^^6oR{sr>k7f-zD7A3x(rA;DB zP^fx*@lUzqEcJ<35nl)JrBPh;TY?fAyqf;NbaLISQR)EsvabArSikTLuYE<%a$>qn z8NB>A&8re*=Nmvy-=!_vlX6gkr=Lv?J@@guMFA^}R73=wWbp_-6EG1iV0?^wXaG4F zinW|P`49$J#YmzPp%}@IXH#^0%cqls^2RfQ&Yd~*c+3Pa-B69F%A*r3me&B}KwS&! zbX?Gl`Uv zX9oBtTKHrK?MZ!!0N!M`U4Hyq|4WyEeWW#;WS*pfI9_76&a8V9OfWt~&rA2BJW0-d zyaA{S?jUUU5%A;N4d2F}=d`Z~zg z%d1-hIbW^%Zoa+gIQ{)$0%R@Fd8q&DJESB&uQ2&Vchu#Q_^tMso5v}HUVXS_w?TsI z7!y8g@S9KyZ_U#O&lO$#GO@N|2>{9WPgqi}U*=GhJG_U}scGH$;Eua;)p`H>qaDsU zdI5^>x%hIp`RAd9QS{P;3~h(u9ent|C?p7R*xJdD9HXMs_lAypABc<;gY(DlLyGSB zc*(&JMzjynZTD)^!6RjnAIP4;evrwDMmWrRmS;7-@`Tn{(bNa^$U6$umx$44#S(zPVB)m{am!0!{1Vg-dBNg?E zrK%z8Yk!+ca0c0n*}P(>CZf9eayt~JmGAz9r%$&u5yIUNo{0N(P1JW`n!&hWg-P;t z&F<#bINhbAwR_WLbq6R@a33z9u^K8lBY-cwD43fo{M^FhM4sxhI-6TekUisWz6at% zl85j&q)_zujTHDux85H!_Y)tkke>`!m@{6ynJ$l_K|tPsf@>L`EzW4Q@3Uncb!A7- zW(wX)#KWlPkj3VpJOK^R*sq{$#bDaE)Bhf!pifcBrXnAR1UaGWW;*RxXckME4>WEpHt5wsJzb zm!ZWaf@EBss2NFru}cIO%7u5K@o{en{t@4e&7^wkw4}(O<)fgGeHRMs_PWeWdFZTS zy^~&$U52R6cLt3W2K0lvGidnZcC(&o2#*oy0B)oA>8chH)6r#LvS{oeEp6`JX>A@D zXD)?*aPmm_-58DjwZ>E9Ejg#{;`5TTiSi(hnLEAT#mS+KaqJND#pNfd?gP0zMu*_B zsPb$L#vF}&XvIdDJ2$+(3bD?JO*t@*v5{oHMpL-=MIp(HDzN4e^h;8>CM!J0eUOOORnZVf)15N$Y z8PAGu2Ic4IBD6ft;cY(TLYVuR3U!bqwo0;GqCSE1VWXVx`iHFFQk6Xdl>FJg{)TO1 zFkP*on89o_yF04lQRu5n{7WCh%)4g0+ahcI;&bi~LJEtSQ@FS}b<0@=b3b-`{WVM_ zSIlHun#jo`GFfUDQZ>Mma-fzy};CsS84aZ&n_{{HpsUa+< z4rmY$JeHj!tz2HBtZBL-j)$WGUk65|#di9`R`u*uo~x>=!Y*ke(|I6*`IA#rlLA3Y zNAWB(5)ow3#-oYa3Eg(Br#mSV&&9LQ9*dk%!DY%i)}k7N#8N@I!5EkSAHkkJRo`}? zDOquYUzffA=*acp!S=8d&JXW2NfhGrBqt%h6Z6D?n|5k%ImXY}jz`J|IjoGTcW$Zgm*+N&&o^b{*AY5dS}%w?;XVs4^> z!izNP-fJJVJoxNKDZae*Wws!Ge8iGFugp`uZu$nz$`Lb$%Lk5rtfzZ%tI!5+S%#K? z=42?-fh75`7c1O5XtGG>L~!Y-L@UEBLQfX;8^F0+SQ6aXO~A^S7xkd|Iy0v|H$IzZ zNz@;aZF~k+xbmmU@uFnfO)F?P&sVolh5^8!3?U23MC#u1 zAY>LQY*LaB0>UfjFL`-1b1u3mc9+x`H9F}|ThL_4&HvW=G1yEmSlwU21ol~DXzX*` zUbolRGqQ0>a2ykUzH)6lAXAfus?$fWOBAQ*ksSO==Ppy}sf`^Ko_Z%C8ieLu)LNaZ z%{ztZWi56a?OgvNh;f?#&eWitV}0R@lH|ew-w0LMO1G*w6viEnCd1@-tSBTG)Rhro zkC4~$1YhH#YYQgccnA5Wy4k@@Mn@f+h!CSDO%CjhVH?qhL$3(paw{CrGh@99u48$5 z3?M>1SA||9V)ex7VXBsUjwNwtX~%CruZ)j152VM$c3zp>uQ8e3=Rc?~#7IEBRkixt z`+jl86vISHC+i^P-hltkqj&>9{gl5Y9SR63jH3{f1&{xop!b|A;9g#sv zU7`Y9gB0$uFT-$%v9r1(NCUq700GZg9}8cwY^H)@G1r!2(|?I%t9bSLc6j}PCyD?( zNw{oDFu$94cvAQJ@dJOoz}fX?t@{t_ehDnICsCcEAcoWBq5CP$YB2_Cw%2a<=42T( zVQeWLakHYqs7fQAYa*B&_6P2()0~dnQhl{0#&C;%&xX_>tT_qAq9M0Yr+fHFc?KC2 zVIVxI@zJ{b7XmO(5I3*N>EY}Se5(U!G*1a0s>`JN{_W9teh~%?viV?tli}r3+CZ1n z6CrVEUrkbH*+{ihSWZ%@{BkC#MV&@aFjkdUfgEYyJybD_Y|O`$itYo>^ugtW29x!u z(^*G9$I4dTm#&QVpN~Kr9QnXLPjbd#eKQ``P8rO;K0;JR9hBE1TE{v3csVeV%9yo$ z=ZEeYp{8V2!nVW9(vG;|$7m;^R80c<{e%ZjaN#*hLL~SapN_wyCP&GiDh|b3H@o_$ z1i3DHlZJdas^Om73>2jh=B?Zww>Gw?UtJV$l&Ge)x9Xl?w6AP|j~B#|GGy+>wljc2 z{K^WOY8>yVIr`vhC`aXx^T}r644M{TGg2t_AgELo#@R3}#z|jtpluE#+FsQ8Ff4+d z7Rk*(=M=%5AH+OScU)e}DQJGQ>)}U!G}()^W-qMi>Gozr0IERRQv0UINRulT{$m%2 z9@W$e+&MKnb9jGlA+KsSJn@Zd*t2F?Ul;i0ck^hs;f(0g!s=!fBGtw4)Jsohj0j~; zGq$^8Dqi$Zy6I+|QctRt_?|c+cuohxe2b9(Wq1^65KhLQS@ibpZbZMXr}bv1cz5X7 zjk81>myh7mYx6io$gj>y3neEKAvE7r_@XF(Qs2)D$;J7QNy7Js_enywBFU&?i2YSf zx53XWi_Jfe+ApAu>lXOlN06TWqC>HZKis3HAL9rEZ1(JYf-BYD=`5IC2J`n?h27>? zL`Q?!(lVxg-H(XIG=JKGxyR4WSSsasz<+7$>Kq<^>(l3=@uNU{_4#d})EUYAxEo8E zW*}W94h^MTGu|V${e#yb?KE|~#VMDefwVLUbAR@`2f(GSRCW)7tIouC`g(iGdpklL zm$k%3(;EtYHr$iE(olk@LdI4fy6Ek`!5n%dY6 z?b$eBBVqglc^gBG(v8CLwfdb+R99eV|0%=!ECAK9(3o?bayp!^X%KXJ&ZUagZlSw& zH*Ax!SR)rnz+LZk6xL*GTn)hnVY_3e{6zD1idR&@7k|AIr}Rj(*F!s$8~P+>LMEIJ z+F25zUW?Jc2S&q&k@ERvKbCKxqO2tU^*K*@r5rmbkFo40MSQW=EG^;Y$;=17D^rZs znb5*5{}2dyuV}u#dlF(d<5O!O)c0EiGhGg-RQ+486Tp$R#|YoW-tnCO;{UE3{`+4v zDK&^A_7~x#pFF-k-9#5Pa}ub!;ro_ChQ&ya!_WOI08mxIZhB!#4!*TU^^yGeLe>55 z?d6O&Sl{}?W`0cN#_cz1$`9mjDkZSut9QXJ0DjBL&W`@^BTlgA?@}*(O5b%+)ETuh zJ1&SB7uk3lgJ}P)1%2ub}f8?22>Q`F&o@z)vZv}_-jxaA$0UWxJ^dD zQY$e;;-LCn{DgE^%DVCmx}FbYPq<0qzUt z=AX~eQs~Q2>J6U2B;nh7U+Ex`Q)BZvr+w&O0yf9uS4cIaU@c_Ou+GcXdVEpHJHzc( z71f2y|JHuwp8?!CM;F0HNE?L#T<5XYi+RM#BQj_MuM}SDF>>1Hg>d7$WIPT%KR$Sz z6TGuL$>pb8_K=u-IgwPIJ9oU)t?G`a*W2*&={t1gH^uMm`XE<4e!EywW;wkjuF|=h zJJ2#?JX0j@*SX|YWwpm@|I6_@*_R)TgBLhqkz{t1xBuT zpay`IaTl2Rqhb5&+47=GmU2Q;FF$oNh?J-1P?k<>pS7-wknQ)yA_1x=a6;`;eMKbh9~BA=&#|B%uCo#&UL`FX#7Ehqm@tUyTWe1i$>QR$K? zg$u_xCZhGIQF9|({M{FC7LE(hGP|)E<%32SzwANq@TlD`H~Ss($fdevNv_=52y6D4 zR2G_Ai{f|ES~(&RlR*LJmL4^|$7PrxsEx*qBv+eg!n};(tgU9G%fDy#e&I8flW=1* z!YKz0ATG&I8t=Fa&<`oG2fli*JQci`Oq6BJoNI)2QP6P***2>IT-mvFAQ0 zO!KETd@Iw2C+@an`4~~I=G_AX9qrRpQ}9=V>G;JUKiOa1a;cUp+}ry@w0GRn$~E+# z1eK21@-X2l-B30q-93DxIvS5UMe~9lMNbd2q}CA+4w}q0H@bLd83=97>;0D#Yrv=Y zCO;5P!#%r#KkHIRPT@?QU;ve;ruYBT3-HYsvPNiz6!x>ZkmiRuK<&qt8Gix|*bJ@t zf;_tUL@4Q`WM&(y+?-|##2Y!2xJ3qgD($L-vQpaRM%8zH-w8X6|1zNeu=)m^pw}O^ z*Kp9J0g@yfd7l{XPtz^Svj@?}S&pfQ=Ft^THAo}efjB;{oE2pqe`>hCJWWkc9|zTn!6k!J7v~Ki`ppH1PgrY};?_vM{-I zeyDh4O$(%X&4y*R09iQMmkmSjVWMl?SH@a`3!Lf;4W_abNVFny)5>dH`K&3nD5AB-kgB&I^1l|GZ)i+O_PTI1 zi|knU7jJ=(hj5mAi3xtZev`FN=s`P@Sq?4Pzlq@+3FQCA1OMkKbT>Amhw0*6~|(gjKff4j9UK7-9M>>`ZPc)RhAYJ?$k%+*w9(P z>GvCzeAn_zGv4~dhSeV9}+~z6JSvTi zq-S4>MC=t=d^Zd4Nu;a#QYQRUOg>qIJ70e{k>DZt@ePMDLCON15={5oR#G1by9Jk~ zekijJIy6UFyr^+Wv>mQdknlfQXP{;iv7jT6kns7CpIiNt&5~Ck??9845f5fmY_!_K z&BM$*G&H;#`M`eZmx%%M;@xPgv4#<^7;7J5{x9qG9>( zQq-&I58{8u1Ei@XvCtEd*STlK$>Muhs3&kx?~F7$Iw4>WUun|VUi>%X9*Qq9e6W&m z+!*LBQN6w+U5!fFRq`@DNyb*dCnmjnLpYcIk{&Nkrc5r$MDo+dKsA7dWKgM@1*^TX_`4oUH4dxXbljvma|Edd1jo`V{`CLHtxJXNP zt9jaU;oTECKDav^Xo=?nCBnfVV9LkcKvD;6n`LYD&UQ1B|<-wHd3 z=UvUA;y))xKP8=$XBS!38J#r_p^mh*iq>9j*Khktxor)h0m=?K9 z!|^wyd-Vq3EybU@j{oxuP(S`d>Bae=uLAMB?{+-w<73B!@aOpXU%>nni@joQ_SPsp z5G_9V$zN@`*3UaRTw(xO|K{~p{5-1Kn$pB44DpLm&1 zeB6AIPA(u`X$MZYw|vAW_XKgSC;GCuIyaW(P*yt2KX`kw?ThF?x)F z4jGb+BISn55`~2eN^asL6pL#Z&7{CRa{(j9$dxd`oS_PM>4xkC*SKLR2d6GPd|Yj& z23vE0Z$k#Rrd-__=|z1WZZ)n#7vu9W`?Y2`f&>h8$>F`;}u^s$)9K$n|o}xiefPE8~j(K$(&mTX} z!M)zC9*lj*>z1F1I{}l3%A;=Y>MFZ1A7s$CODoRDT)9mS?Pe5JWd3mUM(@Eqsh4-x z7SDLmDcg5h(9g{ah}F7p)8KO?bN$_vm&gViJ_)M5LXtQz3fp$khqnZE$epRx zqisE7BB@8ws3u7sNh<%Pqp{%bggDtn&=XkL(Q@Kcttu4t|Frh)@l5aW|0hL7E?p4j z(nUJNiZJ&g2}R2NnsT4H%iTiK6)EH{a>Y6#eRa-+3_*US+|BkK4+^W4>a&<2!05 zaijgcWAGyr@KCFIZDfHv8sTgr>R49jJXBfJm|RQwn9_`g$XSsN^U$2T>!D0eF2^ig zhH(X2Z$FkL+aim{72B?qEOce0UozQ=@m~p}20^N}DTa7RcdpO;8z zHo%aj-X5=WJ)2pbe2O8G+s59|s&4J2*XX-PI{?A_+9F*oep$m^VRfG8q5d3`^X+-u zpni?PY<1&XnUCh6_r@He%XJQ9(0dF%G5UZxT;W?|5z6a{G!==Q61MKmdxT+m+nc&` ziRaz6G5gv+6;3Q_gKRX4!s!NCkY5pOb%m5rm0|zgx&{BfJd>4b(vz`7@ujTnoZ)gD z;h>3}8lixT*72p{#sLj8_r8}4+dwh56dssOxVV;qXx^iadJ732?644Yh0ZeX34xUe zNLF~54ONN(A+ge(kzDUdyDYCB{KiueU z)9y~$HLC|I^}K{N>0VY6_zNaG+q@E%pNIfElmuii1wUmkvMJs3)=h@F z1-2dzfR9z4fs>x{e`*WdwC|6)!3xG$UbnHH$x7*6y@k#ZXggyjh)|TsC5MBrN3{*+ z%WAD#Uk7ECOFrM|Pynq@POQ&%m06<|Bt`;{iG=5|Qz0@DoNW=PyObZbtWc${s;Y|6 zc&K!--*s#0=I%>th{Qw~g{-)>*iqM&qn80za-YR$#}c!YE+MOJZ6;q%-S(3+Llm3& zb(aHMX@j=}6%%zL%aTAeFCTnhF}+9-Cnh}7vfJ?oH) z(Z34I?vs{RcggjuwpYFHV>i3lgArI}Is~mLns;^l=$|FVE3Q96Y;Qu)DK*zl?upBl zX$F_yp&yHNYwW1xiw1z9_Pk&E&)fPJi1uV6mu>4BZ&f)Ha!(v7KKgVVbWUefdo@IY zx%z5P*Mhndh{YnAz5m=mjzRrGvp+L>rGgu`UX_j6vUD>=6k5}Y$WmYoNQka_VXD&-&)@=g}u*?eSjuK z=>jm=;`V^OF0>F8wvzvVtvqeYCjqgI#yff+xzFdBRGDjWdnh}s>QBIe-t%!d4jzp& zJ~+K0=!5_6pci==9_+Ph!cBYy-bHsx!G>bf|#7Xo=bF6E0F zE+{)dbUuE}MYI)2aiNO|85qv;$YB)Lq3fIou&1X{mng=Nw8VpBu9d@t0=q1cR1@Aix66e)PBG3?Qo8 zl^9)#$55$!c`Vz_8UQdy^mUsVtCB8(kV_WJK@~n*!^?otCF(7p#WDc5A&ikJ95E8g zw}j?34iOoN<%z?~E(wbtUHb>+2l*eRGB(X9;vVjurnT;BuNfVS7zZ)s`pWBtv`&R9 zHP)nRhFCI%TLf5t#sje*KJZhLddir(ZaTgW@0sGy(s*lBXjA=VS`dQa;j(fn@PZ3|%`iw_ z34R27-*ZhLc6Uh-qW@;AZ=Jmhx7t?Z)gIQh^c*f0S@NJ2ef%}0?ap$j8Mns{>8Qfiqm?83OZ)u90P4_*7 z4cJumGYFVJ;e%-xnTbViA*#x7F>k>96WVeM8Gf!yhth)QXhJ78PJKR;=QdOQ6tF^g zUa-{A%uCoa7PGH+FXuqrbrGID!;7|kkL!FHvzWr)J&T&y?WRYO0aJb1Z0x9y5K|Wb zBE~gOcsF$j3H5fSw6ahd0w;=hJ&VUd@MG4wakRItnenu}eGjHh#i!QGR zfij~YvEd0m18U>3u5&)sUk_Rkbikh#L-xBGsxGjC>{VSW)gAOo^l?rjMI(r=^4*rV z%bS{d_z$MPy7d5RdSk{Hx!Rg7M8NJ3 zG6Q?F^Kc28WAIMd^Jc3bO4>b5%k7BQM#2|*6-pb_hRrn$TyxupE8NRU?7M|w?Jx73 z#n@3Cr6~FZ%U3K|1ztRB*#V;77G8qK!tlUSSPPly@KR-Ydm`nS-*#GQWTzA-8F}o; z@$_JqrOyBy*LQ~lAg(?2IIVmfjT+i3AB)uT(Q7cLrbL3jE?>PQGaad7wU#D5-D(i= z%IxcL&Omdg3LLnrs7UpV`zF1{Nu)%>NWIdf$m~0-?9x=I`H)g_Me$G+lhyqf@w@On zlO0VAO^aj0KO5dNGDop}xVq>sQwbps6fVnoU#s1nR>4Wdii9iZz(J)ce&nCH0M7Sq zR=glvF>i1fB`k=GrxIPvPS-Ov(-e*1DaTJTod0Sr(i{l``cK#PE=3@y@Zhti)#RG) zQPL3f!#UVvN0E*rU1O!X!BaSX$M;Eck2SN}mNLwUrD;?|RV+W*RNtj_Ssgj}X;t@+ z!RuZZg*Lx2kb&<@nGdzC^s2#?)}~9+lkq!rab*tHHQ#eP>eizAN8hXQ`Je3^rtS`v ziGJj`&x-lJZ}k8~(hXdO^&!-YTQdJ@l4;zg4R$$RPwa(P!M?mmVtu!gNZu}q%^xe) zT=w;>%^fI}=|@fbo1F=s3OpDdtC@fL%#V2KchOKEZJS+!^NBYrQNTo@tVF51_?01G zF`tiy@8)8R6o^bJ2C7@bS{w+96WVVQRlZkYe_3cJUK ze;%^Vc?R8YSVWYKj~beuqaNYHAw@Qr$3_*9;%cP3T9l@P zXItDz1P3XFZ`)VKoO;7uqD-Wm--t7eMmI8$~m82vaso)BZLrou^-CjIrUfzpo`_*up zr#0N#jIZ3=(`uh}>HgAfH8*w;T|Hdzmvpm%i@!2b(XFR*!bXr7*Ug3 zm1GnxY`H272V!x~v|JN``rZ+%o(9idgqeEq-70A2_||?#i$WElB|mUGa@b=d zRyAa*xopfR{hmxW2;sX`k!9||-T~Incb_PJqXNz9?a>L-W2J?kCSKV*WssEL`#msp zgUZi`UtJ(+JgSMM|F)ytGUHrLn^FC^`aM^;QeyP=uaM0kahglKUe&hc=dA&Z6}~cE zkE`uMZdj_mc$+^ya3QO%r;NOmlHvNUasAt)_NGrSyfVM$w6w%<9h7A%-5j=^trY-% zPXHR22E0wYI(LZE#UA#OvO$S>TPuWr8=sC%s?9P()RHi=;Hv) z?bzd2d4L8|t(QLvWUhV}6+IiEVE7R_`YRqR- zz&d}2NrBCs-}Sh9I1IKZD2>&vNec~Mw5TLAt*;5CGzD}Ao>L;`&-VsT<>VZ68~+l- z?H<7xM}nH?vo~-!ddj82{5OWAHK^qHRcXFq8UA2r>;`+`yl(ug;KSNwTl{b~uohxI0+rxIUmgV4dLhkTNyx6`_Ptc2jc1!xDNYmp>Dl zani5dBD#|sj9=t(>~Q^~6n|PecBg!ar|r9URm4^~))i8ekuJw3iobGj zsH1+V8lU`c8`LH@yg>VFNEunSvGl#euBB#Sa zojIIT|8+rG7jP25`QRYOc#JDBQj>5IrZHMzS?n?2rNh8Hzmnr3>5ceekl)`jBV?ms zGNtdzj-vJ4XbcD3Do*Uox=%%M4OL$`8vpu>>k~~2;M((QZa1t!j|$F3Xo)*HAvhy! zU!L}xv1E1zl)rgMGJxCjPv+jS^C^fdm{vIK$$602ONgFsNWtBHe%&7OQIW8Bx4#PeP6bcx zsa{;me8Jm{^P|NHFi`2`{uP)!mCt;R9cc)Vq7st?DMwe*b68H!H##g@7XWVk(5)mr z5U~B|jQf`AofGGNuPU}CE$UV;2W;CD_XN=$J#`kuhiiCcHM~{WRe48bu*NUqDg>Zxd9G&z9K%EBI2z0fL zceo9zl4>umjMd`K`OJrg`j}8LVYLp&?oAz1Vf|8R6}3s4 zpE#|r#pxgPTU^)igf>TCofMbc!&d64Y;|j^?(LB)fh!hP4RX+EXvMr#C%KUOtC`EZ z%(CF)A0}5dk4rlD<=&jDfaK0p4{1|Z=I^+2_m1DLT6(p#JX6_VR2KA*FVZ$IMWmO9% zkcJ1ApY{8m)f9;i^nxYrlKhED@Uve1aD~tKlVlwC5wKzIfkFmUpPwNV&fa01lxq=5 zQ>YXC6rLq2UM`Xywpl_z}*QDyC0LbRtK19$t zLS43fFPIgux<&-@VKGyY>5q`Vw1~saU1{4{mYYE#{LN7YV{8!5w<{szps_ShKVXaONP!v$_eD|sYpZF}6k5^#4pUN+s>kT)x> zUo;VUqwTcR`69hg^DN+IaXoY*<=GIL`zG6YR&_l{1bM&(ZsJm-oW;4D>N^C^Yx?Q?@V0(CHtJdK;45AcntPD z#n)(t&37Ru077MxxBo>DsPqFQEe+q>y@TYb^;+n#AV|xpA?{y8+yv^0J2{z#?prcB z1VCCW8ZL>$FD3q*4hu+APkeZ|oN?cdN5cYulG7nm_5|&>XR=togI>Jhk=jp~{g(XC z+|4h-X&)_%k4mHnU6q|?lc~a7anl{bcNJP^c4ZhhNsnRYIx zbjRP8#WtUFM(T9fy14&y4bKFxxeOQdy&K%C*F|*oe)t$Fttwwr+8DL4+UZgil#5kn z-9@D!uZ25y_bJToF|F3Ero&>j#_>`P=k@pl&i5;20D|H4V#6YE@Xa zohzzxfZl}NV+zMsPHt7F6PxA&h5B8FDV^7iiXT-0wzkq8kl2p24FBC`A)5c6Ye|O2 zWiK)uAVE#2-@|9o503o@Fy}70_UghN>&DRZVSv~2n2<#rafm@-%v7j9qbPdVwM}q& z-As>Yy_l$WVk8G1Jas!{uoMy|H*>A`fPqi0nr?%u83QU$B)+-5y^6ZukgvY(FW8cX znhWO#uGTuDtAx7W|BJja)9kF*#YFZLa;aD81HJoh&HLENNpIQb10#K4`Z2RN7(ol& zmAFXPkaidCEi7Kt4ZEQ&=xc07kBUR9`;%rnX@c0+7G$*$6<54#Gn2i*jZAt!Pc|A^ zToHl>bj+_;oQrUSnpA zB~kcZIz^kLq?qiyYneKB6ELDyyNI~oq1b_Dm2K9U8z1mx7djeDSR71PuuZgD43$^2 za3Nq{o)kj)5*Ip`QeWR&(A4?<$H-<9VE}GXFuFf5n0XUCXJcFk4P1zr8E+ZeNnwSBdDI0 zI46(9p-zgBFG<8=2;>(Gb${mYpZZ9xK*z-xRrc1%FugFhbPQPg^mz=x^LEAko)45s z9CljC!bcGttIU9kP>@vd#Vx<>{czQAwA%F*(;HH4L*KfxNVs(F*m*U8k0D~r78iL) zC_)yVVmgYs;dLPZaq@{P<}2|3cwIP;3EIxXk6?(hb#zhqO}DPj$%Ls_7;`qUc6!Q@?uj0 zL(&D6i1VPf)(cY?{`i*BoY&Vyg?>QRTZ3EJmp1;&| zueHWNH>R{9KR*IbPna*a<&S0ddmLMrE1~^%98`SV_7AH%ErG!YE?2w{YQ;~k9_(tS zWzR{7Q0RQ=;3pAPkud^pwpFyRSQ zH%jAVL1)i{RQ*?ft7>H6=x%+=6S!*` z8X_Nr!PT!cg|I1n6(C@>HYm@-vbo=jI}JP1uzZ{aN~id z<(f}<5{fJ$V_xg!J^qgcyL5>NAe@(QuR-6)0;lt7;~v-M*2!+Go$rUOek>rwq07o~ z$OqxCxulhoEgN}xwMOmJqS^`yCOPd%v01a1BJ&cw zK5Vo)iADP@C&sjRe3!v1Ht%pkpouvc>w$HuH5$)7B z%ZK#yi}S#as>alA#mgh@j6&f2)&-tDg@MaE1kFIi-Dk&u5pFUPvt1djhz;g=0a3rR;jf z3!z3Yj=E*F`xZ!nYDsPRaoyY}Ut@P0wae3`25?N_k{wVx^m!l8L9FLj2cG9U^uvL* zqhNjo-{Gee+jjldE{jX~%;cp}!9^Iht`n+y8HshhHWjgtFUPy79oisC=ocx{JvN=0Ib#Ax+)sipHspN+&H z>3@%a?$;IaaQnf;Ap*7{a)_t_h0Trix`Vf)i}Z!SE{-8;WjmmxaHk_&9Pv_DO>qo~ zvMcw6+HWPK0pknqv*v-|!!-t1BYV#EYUn$M=9!N%l>3_T=z_1o!@O9l4|shjEW2l< zLW+;)-kAE*=q24Ms?z$M+}mRs1-Dqf)Z2?W2urSCo(Wu5v|t|+nb9yj#y=^k~&)CXZ@8wg8iP2K(sJK5V9uXfOOQ*Driran0O3 z*~7^*Y13{*UlviRwSGRoEzt?vcVG6@sagMI=D2GudBTsKqH%}2hH}p420Vech8JF+ zOg&@$cUe#ecJPZt?`m5ze@6UZc%CzK_{r5vuYcTtF`DS)veyzRI@ZE9IB)BDjr)HO zWqrcv9dPO?Ws!1R9w@B&e6g=SpZ;d1vEG2K+6p-2p|fXIS^NmFnlPk9+x%cweKJjSKY;WQRG8$7#4Mjsmk8(Qv`s znV^~&{R{_hd*$9x_dAlg3Rf590~c>R(4O$nn?Vy*^Gca{Fp$oPGHqv)WympZ`P4Sw z5lrftC57E&e(4f|c`I`S&a})yF1O~n^e}-8N^Nfl8+zP4;2gdgkej|c&W0m?0qx&Q zS{9QNsY32|En=Y;=K}b}&KN+j%mxU(P@bJZw&lCM6S6>*yUKt^C@fH~lpD0bw6(d4 z=PupoiJ=b!78f7L;JHQ_M@483;Z-kqc!(Gyc*Fdduv9(Z>*RI`!6bd1XC#yV25&uZL!Q%k_|WbRaPP)w-SwVSc)~d-i==T3>Az zA9?HK{J>|GB>eHwiYlSX{!+`0N5%YaC$*ODHRCCxteWE zD};Yv*|9@K>;NLYTgwzDfLLgq(;MUmwwSvWU+xC-mK{aBdkvoN=tIyZL+Q3ve2`;=mD}}QL9h8D zRrJ(8d8P1qex2mxAl<7aB@x{?0BR74ha;p$Fv2-7kf~T#`jR;XpYqxyhaGjjPbXyR zV!-DmzM<722rw;WFqRYj(u0R%Xgp;c)KV66WeVYE;%WP^x>x0k+mrqQ1UR)IYPW+N$hzK3iBid(xY>0oe>6`K;(=&Y@Iw z!$wIaU8m0V{ga-m=h*>aA?DXk>$*Dn(SbWm3v0wh>s)(Ws?Oxy4h|e&E$uHLlm;Y1 ztjo#c*BV^s3_=e4Jh5-I>@6vih8w?`ZkK4}oAL5m^DmY_VRw_mcG(r~Y8khyy%G+q{@MFCN7ssu1HcrkfbB$mnf4@tLN~Vx@yt*u z3z|-)ew|)h$<|yvYv}~H2_z|R+^`>4mgKikvfV-IP$3?`e)P)*?PIH%z+9(^~ydIUJsZMPY@^_qKbJk>+9SpOn7s2EGE$=A#Czp@i4da7 z2CPs}-ShNYB?mE0iTOoMyR9L8fUb7qemkU__G6FS#4nfr=&T5=+HGI1$TQJ)$Ji9pTP0>8PM#N-`$g2xnG_;)mZ6o-z_FfE9ShP ziDrL+crft?2`Z;<#qzAb|M7zTqJ97MStyRBnEXSHrDYNVRnMho`omE2Wc-8ezYb|n zU0r2R9NX3%+=B&ocL)x_CBY%c;4TR=!QCMcl3)>BhMm|oYS^*5x=>UAa zcmBl-zqHtB@`+~y0dx;~;^ZeB^<+s)4W42fbt^kj;k?_Fg^)X(aSI+YKounM--v>n z>wHXkDSS3ify2T2hTr~ux{A6xYG&R-a($up%_Z^s`b18xg8SFxXGK*9<%8|5_MLq` z!uIpMeOr9$k*4(IlwL8hqR3RN^z^fmX0`@@^Wqff$W60<|F{Q(bx+=i&~l%nVb2($ z;mv`M#n*=~#u5{*`fetR?ACMJTsl78A{a&+KMQ=8Tg$Ag8U18Ts*S9+b_j}X_C+vV z2IsSq#+r%)6E$K=03WBVVz=h-K<`?VZYfo;{8rj|6~erG?g+zgtON{2YCx!gI=t6m zR^Z9dnu9cWY&-0(FY~_S7*Y(B)&KDI#wrG)^#r|mn-MYkBlSMOe^)6rZzDG3PWNP) z;?QW!X?ORzjQ{!SewbCqeWIB=pZy2LtwW?n(Soi*QG0RNZmFsG${=CnJ=O~iG;~}5 z0DujM@p`HYbavITezy)q@ z<61?inw*9Sljdkyd@A}!2vKYe7-Q(oaE?vqsHXS#3iG~nn$tBnQv2DnmOwhzm4goB z#D&Hx6AS$X`^G~xg*=WJ5l?3(ha{@s4F4O-Lh}%H5)J^MK@I@mKZIiE=IZU>>it(F z4MrAT@aN>WJY2tBGMr1yc3ppBcLJ{)lb603(3|eM29@^G&-l-F6cyK^*wKK7jTlj+ zdYds@aArU5M;=k$SkF~?wzzGfoM68x*cR>6H*wer5XY4r~_cNb>@DlINGX?F#)@ z5Wf<5g`VQF39FZNKqjJUR!mLUgM7<3a`q3>wBea%QpS{3Kv-`>9WW^Hd_>)6yBqpx zqFB`z9wQwq>Tn z{w1Afr!{o|9@{&uGjg5!r35mE994e`9iI)I1*f6Ir_16KtR_-L>X}%$Nl;d`gII;y zRLmKv@SuIrV=VsQ`Sp(BbDR9>{kBXc{5 zL4!}&;VwT-G*amws)?#r$vImrae^BKDjdRH%`pwl#digyEG70NHzm~~CEU?-4Onqk z)LGd$HzYTrw$a9K3V)UhFgREGpK5y)WqSQHY$Cn+dPcm8LtlUf+1&G5JZPFiT_vHLT475z@jcw| zQwO1cF&g=H8iD!6u40w&PB&>adv>NagZ3-w`Ow+GASoy`g`fZ4&6Z@*Y1#B=^GJyH z^fIei;<>9hgI(bzsB!&mpCcl`Mz#J(ftgwuoi(qUn@0WM(vnvBddU$U=6dT=TZcA5 zCQ&A;%iHm&=1dLIp-$I5dY-kBP_}+pe7mAWWP>Zr708fJ%Is zw*@j?bTZ{EcwQ9vS+OvtBYPSm$#;+(1H(g$({-m;6=!}!hfLX-ueD_&d@dFPJtfmG zWwS%FHLcWA-RvKoV?;fVfPZvZ`#QrI(eJHH39luPNGy+uI)D%(u$R6bqNC1QW;x1$ zhdHa8ET7=t*}Ec+)RuX>%nHhDOmt=pKNkkQHh5_F?sCFy z62x1q5jhzZc*lS`2F`E`I~TIJccXt3*cplF9a*a9T~salM(yS+^z^i60Y~lwBdKyA z3g9xl2%SP%m`s@-8CTt6buGR-Frhp{ZeP(L+=}P1%3fX&tJ5iD|FxlQvh5pKjk*UBEKRVt0GzQF~Nt1nud(geDlrE(ed^+{IRg%CHp%w^V8N8@qq-R8e$J3OkBxV zw3a3!WO1CVaJ_e9vE{he3wCv(QWmDN+hi*g#j%E2yjnj7eu}|oTQYu{z7A{0B{bW+ zAB{9A-+Hf+%I{-VIVpx4jKxr%m@-7hj^n+84Xxw7=Gc$m9>B=2d-E<%FX9wi7-g59 zAWD^pa3GN>84R}}qIDsM3Z}{iC5hJ4sssg6gEvQIxl_yoE z;EJ>@^0QZeL-Z#}K9@hQ8s zCKZ}p42*-cYx5T2@$Bq3SaGD(QkLJ3wcNGHn+&5b6*yb{0LDM!?hIvLDRPgz$Q{Qg zC5J6aOS~n^!^%I9`r-&1xS49*D`{A3qQMbZ)8keG#ohIV@Qr~KP$_yNK6dG6T}irq zu!`&Z;oI%Y;i6h=XtN(@zY@Ah(KZ3E27&nEwZt(}!AJ zgcchGWpUH}Ghz%yU91}1zqEI{fUF}HxixDrRMg!bC3N4L8w?les zJxZUHADQ-^MT`PB6+tR4Knq#i-(c~q=&qHP=-Ms@ZDF=r5*1n=k9b3_lQ$!>Zf|Wq zbYp3oT%LuE(1Ybgp2v$?&3>QGNgf|8?ol@=p*CZajH=Qo63fcIJFD=klj6kc`MS;c zi$6z}G_=V771S?P8#9}pD;Z{YglExcwRa+u*aXs(bUWLk-KQPjSn^JJzRaLXjc({q ziB~_R$`cC|vt-OLsP0!`May4Ko?iNX`nd_OdCz=@L5$(1*O>uZ&s%=;1|vI0Xg8&z ztd-{aVs86(EZPwMov0Y2=W>Kg%^vaOouZ3-^;#O>5nnCKagZ^yRR1Lw3!xlIKoYUB z5$v4tH$O76FPGq{^LV_;G)#BF8Ze*ag%Z6htmJc16R>QA@kWB;Dh53oiLt?Woc~2i zXdW+Od^un;A$aHT?(%hu^~?IlMHanQqqYwGRdFUp*q1v9lDesvTAToD@+5o{M9nZLV6d zKV5_ul}{{-&}%VaVRP!+#-+UE&|{MuQ^UpCC9>{13TFonsyXWd4S)|N0#184Ir^Z_ z-pRw$RLR`cC`q;gBe>|3O+G@R^?q)?o#KdkM!RBMN*N`Qq)o*Ni~L~7_~D~77{V=A z_hGbXvg93aOz2EG)g!(=qrMGPF!SL+v8&x9Q&ff>_0qI|k&A4l z8C)#5Yjhg+DGeEp#*049XWJ4}#%Lx~WNFy%T4U(NTHcS3MQaxZ7)SzDelter5)soP zu+b_oz>&D=&ZAA{irY?O+Qcj|KRI`gZ&XuoBSNrE5QH$TnBJp{#2bpG6#OiM>2U%9xPqWbaS@-s2Bt`fc zk-hwk_B@5Qx#r%UJ$j?I4nz6|Y61pc+*Ig_+B;=iJDvH{w`TDSmi5z(rppzLXYEe( zbPcXy>k9skSImFvxkz1}@YMUX(IfR%`)o7nkGZhL?q1bX4%XX~~4@?>Xdb5(Ku zqHKCqcYR}IdeL=#`}fE}*dreE(Q)1xV0D3@=vK->@LWS&xRYrBBfQ6JmAa}ig9j^~ zfnJnQT!+w*rpmG%dVZmFWEy*JMhO1)i{atr=Ip%xM4^r925#u+!*8~or6#7@zR{a0 z#ib>o9*p>dFwSr1)w@n?2Y?y4#zPFJ4`tYOz&lE&(m0oX3i95_- z#c?L7MSvhm;ozPizDpqQkjrr_(EV{Vmc>Tip_#GgBhJa_R7JUg88_V-;4 zoYMM&P8?#$9!~S{_ej+g_nt1=Dl#Uwy}5yr6Q_KW+dOq>wvsa-2Cm8cJ_5Vt;#Vl6pFxgXs#NJc zSuHbeM1FQuXL8hXpKdES{N9TKR=r?sOAU<7vfy@ZDV?ijN%c1bLf{J3h-;1?ZYadh z$c9%$3Y*wIGTcMhg$4#Uv9A}>S`4TbI z(nt8h-s($uK!+qG^4f@Dl9>u=HelL?CF`>RJbEb!Jh7xhhEVy)@;&@p#O3g?M; zIYJ{kqJQw5t!zj>xE_;8x>Nj^9_JC6QPw~Q#YfLtx||_#RQLvxq_$>0{lK}knP6_tRt>BirsC8gYOg9xreYBu||jZvJ1vv)Rs96KtzQ(bu$_~ zI>OO1$-e7SIkr<=4c%dhuk^q*grJiZhDL8H_%T`|S{|Q(+|hV< z84op--PoGhIF=>S^fgi`-yGozH(_e37DP3m7?i8 zh@mO2JEQd>pIL#&UThk~rR392vo6;KL;TqKBGpsE&R3C-$pm-u{Kb)L|-*%gTb2xvk9Q2uxM-xJrv^e>?I|NG!~cYXDzmp{d%e;hHr zLHS>4=}+jN;?Fkk0Y{ARlPRpTIvi=O18L(nGZW-l`WG7!TA2 S0Kj}W98my(gNFqG!2baZs - -/**实现模块**/ - -//下面四种函数的时间复杂度值得分析一二 - -//逐步递增型爱你 -void LoveYou0(int n) { - int i = 1; - while (i <= n) { - printf("I love you %d \n", i); - i++; - } - printf("I love you more than %d\n", n); -} - -//嵌套循环型爱你 -void loveYou1(int n) { - int i = 1; - while (i <= n) { - i++; - printf("I love you %d\n", i); - for (int j = 1; j < n; j++) { - printf("I love you too\n"); - } - } - printf("I love you more than %d\n", n); -} - -//指数递增型爱你 -void loveYou2(int n) { - int i = 1; - while (i <= n) { - printf("I love you %d\n", i); - i = i * 2; - } - printf("I love you more than %d\n ", n); -} - -//搜索数字型爱你 -void loveYou3(int flag[], int n) { - printf("I Am kim\n"); - for (int i = 0; i < n; i++) { - //我觉这里应该是数组长度 - if (flag[i] == n) { - printf("I love you %d\n", n); - break;//找到之后就跳出循环 - } - } -} - -//递归型爱你 -void loveYou4(int n) { - int a, b, c; - if (n > 1) { - loveYou4(n - 1); - } - printf("I love you %d\n", n); -}//递归调用会带来多余的内存开销 - -/**实现模块**/ - -/**测试模块**/ - -//测试函数 -void testModule() { - LoveYou0(30); - loveYou1(30); - loveYou2(30); - - int array[5] = {2, 10, 100, 1000, 10000}; - //声明一个数组并初始化 - loveYou3(array, 10); - loveYou4(4); -} - -/**测试模块**/ - -int main() { - testModule(); - return 0; -} +// +// Created by kim on 2020/6/17. +// Copyright (c) Kim Yang All rights reserved. +// + +#include + +/**实现模块**/ + +//下面四种函数的时间复杂度值得分析一二 + +//逐步递增型爱你 +void LoveYou0(int n) { + int i = 1; + while (i <= n) { + printf("I love you %d \n", i); + i++; + } + printf("I love you more than %d\n", n); +} + +//嵌套循环型爱你 +void loveYou1(int n) { + int i = 1; + while (i <= n) { + i++; + printf("I love you %d\n", i); + for (int j = 1; j < n; j++) { + printf("I love you too\n"); + } + } + printf("I love you more than %d\n", n); +} + +//指数递增型爱你 +void loveYou2(int n) { + int i = 1; + while (i <= n) { + printf("I love you %d\n", i); + i = i * 2; + } + printf("I love you more than %d\n ", n); +} + +//搜索数字型爱你 +void loveYou3(int flag[], int n) { + printf("I Am kim\n"); + for (int i = 0; i < n; i++) { + //我觉这里应该是数组长度 + if (flag[i] == n) { + printf("I love you %d\n", n); + break;//找到之后就跳出循环 + } + } +} + +//递归型爱你 +void loveYou4(int n) { + int a, b, c; + if (n > 1) { + loveYou4(n - 1); + } + printf("I love you %d\n", n); +}//递归调用会带来多余的内存开销 + +/**实现模块**/ + +/**测试模块**/ + +//测试函数 +void testModule() { + LoveYou0(30); + loveYou1(30); + loveYou2(30); + + int array[5] = {2, 10, 100, 1000, 10000}; + //声明一个数组并初始化 + loveYou3(array, 10); + loveYou4(4); +} + +/**测试模块**/ + +int main() { + testModule(); + return 0; +} diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_0_SqList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_0_SqList.cpp index 66b5813..bf83d1e 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_0_SqList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_0_SqList.cpp @@ -1,224 +1,224 @@ -// -// Created by kim on 2020/6/17. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序表——静态分配的实现方式 - -/**定义模块**/ - -#include - -#define MaxSize 10 - -typedef struct { - int data[MaxSize]; - int length; -} SqList; - -//函数声明 -void InitList(SqList &L); //初始化 -bool Empty(SqList L); //判空 -bool ListInsert(SqList &L, int i, int e); //插入 -bool ListDelete(SqList &L, int i, int &e); //删除 -int GetElem(SqList L, int i); //按位查找 -int LocateElem(SqList L, int e); //按值查找 -bool LocateChangeElem(SqList &L, int e, int em); //按值修改 -bool getChangeElem(SqList &L, int i, int em); //按位修改 - -void PrintSqList(SqList L); //打印函数 -void testModule(); //测试模块 - -/**定义模块**/ - -/**实现模块**/ - -//初始化 -void InitList(SqList &L) { - for (int i = 0; i < MaxSize; i++) { - L.data[i] = 0;//将所有元素的初始值默认设置为0 - //这一步其实可以省略,但是省略之后,有可能受到内存中"脏数据"的影响 - } - L.length = 0; - -} - -//判空 -bool Empty(SqList L) { - return (L.length == 0); -} - -//插入 -bool ListInsert(SqList &L, int i, int e) { - //判断插入的位置是否合法, - if (i < 1 || i > L.length + 1) - return false; - //判断表是否存满了 - if (L.length >= MaxSize) - return false; - - //后面的元素后移 - for (int j = L.length; j >= i; j--) { - L.data[j] = L.data[j - 1]; - } - L.data[i - 1] = e; - L.length++; - return true; -} - -//删除 -bool ListDelete(SqList &L, int i, int &e) { - //判断i的位置是否合法 - if (i < 0 || i > L.length) { - return false; - } - //取出将要被删除的数 - e = L.data[i - 1]; - //将其后的数据前移 - for (int j = i; j <= L.length; j++) { - L.data[j - 1] = L.data[j]; - } - //线性表长度减一 - L.length--; - return true; -} - -//查找 -//按位查找 -int GetElem(SqList L, int i) { - //判断是否越界 - if (i < 0 || i > L.length) - return -1; - return L.data[i - 1]; -} - -//按值查找 -int LocateElem(SqList L, int e) { - //循环出查找 - for (int i = 0; i < L.length; i++) { - if (L.data[i] == e) - return i + 1; //返回位序 - } - return -1; -} - -//改 -//先查找后改值 -//由此分为两种方式,先按位查找后改值;或先按值查找后改值 -//先按值查找后改值 -bool LocateChangeElem(SqList &L, int e, int em) { - //按值查找得到位序 - int bitOrder = LocateElem(L, e); - //改值 - if (bitOrder != -1) { - L.data[bitOrder] = em; - return true; - } else { - return false; - } -} - -//先按位序查找后改值 -bool getChangeElem(SqList &L, int i, int em) { - //注意由于是改值涉及修改原数据,所以需要用引用传递的方式 - //给的位序,首先判断i是否合法 - if (i < 0 || i >= L.length)return false; - - //由于是用数组实现的方式,可以直接利用i查找 - L.data[i] = em; - return true; - -} - - -//销毁 -//由于静态分配方式是通过声明数组的方式实现的,故不需要手动销毁SqList表,在使用完成之后,系统会自动删除数据并回收数据空间 - -/**实现模块**/ - -/**测试模块**/ - -//测试 -//打印整个顺序表 -void PrintSqList(SqList L) { - //循环打印 - printf("开始打印顺序表\n"); - for (int i = 0; i < L.length; i++) { - printf("Data[%d]==%d\n", i, L.data[i]); - } - printf("打印结束!\n"); -} - -//测试函数 -void testModule() { - SqList L; - InitList(L); - -// 初试化一些值 - L.data[0] = 1; - L.data[1] = 2; - L.data[2] = 3; - L.length = 3; - - //插入操作 - if (ListInsert(L, 2, 3)) { - printf("插入成功了\n"); - } else { - printf("插入失败了,i的位置不合法,请检查\n"); - } - - //删除操作 - int e = -1; - if (ListDelete(L, 2, e)) { - printf("删除成功!删除的值是:%d\n", e); - } else { - printf("删除失败,请检查位序是否正确\n"); - } - - //数组当前长度 - printf("数组当前长度是多少?%d\n", L.length); - - //查找第一个元素是什么? - printf("第一个元素是什么?\n %d\n", GetElem(L, 1)); - - //查找值为3的元素在什么位置 - printf("第一个值为3的元素在什么位置?\n %d \n", LocateElem(L, 3)); - - //打印输出 - PrintSqList(L); - - //测试改模块功能是否正常 - int e1 = 2; - int em1 = 6; - int i = 1; - int em2 = 7; - printf("开始测试【改】\n" - "第一种方式先按值查找后改值\n"); - if (LocateChangeElem(L, e1, em1)) { - printf("第一种先按值查找后改值成功啦,改变后的值如下:\n"); - PrintSqList(L); - } else { - printf("第一种先按值查找后改值失败了,再检查一下吧!\n"); - } - printf("第二种先按位序查找后改值\n"); - if (getChangeElem(L, i, em2)) { - printf("第二种先按位序查找后改值的方式成功啦,改变后的值如下:\n"); - PrintSqList(L); - } else { - printf("第二种先按位序查找后改值的方式失败了,再检查一下吧!\n"); - } - if (Empty(L)) { - printf("顺序表为空!\n"); - } else { - printf("顺序表非空!\n"); - } - - //打印输出 - PrintSqList(L); -} -/**测试模块**/ -//主函数 -int main() { - testModule(); - return 0; +// +// Created by kim on 2020/6/17. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序表——静态分配的实现方式 + +/**定义模块**/ + +#include + +#define MaxSize 10 + +typedef struct { + int data[MaxSize]; + int length; +} SqList; + +//函数声明 +void InitList(SqList &L); //初始化 +bool Empty(SqList L); //判空 +bool ListInsert(SqList &L, int i, int e); //插入 +bool ListDelete(SqList &L, int i, int &e); //删除 +int GetElem(SqList L, int i); //按位查找 +int LocateElem(SqList L, int e); //按值查找 +bool LocateChangeElem(SqList &L, int e, int em); //按值修改 +bool getChangeElem(SqList &L, int i, int em); //按位修改 + +void PrintSqList(SqList L); //打印函数 +void testModule(); //测试模块 + +/**定义模块**/ + +/**实现模块**/ + +//初始化 +void InitList(SqList &L) { + for (int i = 0; i < MaxSize; i++) { + L.data[i] = 0;//将所有元素的初始值默认设置为0 + //这一步其实可以省略,但是省略之后,有可能受到内存中"脏数据"的影响 + } + L.length = 0; + +} + +//判空 +bool Empty(SqList L) { + return (L.length == 0); +} + +//插入 +bool ListInsert(SqList &L, int i, int e) { + //判断插入的位置是否合法, + if (i < 1 || i > L.length + 1) + return false; + //判断表是否存满了 + if (L.length >= MaxSize) + return false; + + //后面的元素后移 + for (int j = L.length; j >= i; j--) { + L.data[j] = L.data[j - 1]; + } + L.data[i - 1] = e; + L.length++; + return true; +} + +//删除 +bool ListDelete(SqList &L, int i, int &e) { + //判断i的位置是否合法 + if (i < 0 || i > L.length) { + return false; + } + //取出将要被删除的数 + e = L.data[i - 1]; + //将其后的数据前移 + for (int j = i; j <= L.length; j++) { + L.data[j - 1] = L.data[j]; + } + //线性表长度减一 + L.length--; + return true; +} + +//查找 +//按位查找 +int GetElem(SqList L, int i) { + //判断是否越界 + if (i < 0 || i > L.length) + return -1; + return L.data[i - 1]; +} + +//按值查找 +int LocateElem(SqList L, int e) { + //循环出查找 + for (int i = 0; i < L.length; i++) { + if (L.data[i] == e) + return i + 1; //返回位序 + } + return -1; +} + +//改 +//先查找后改值 +//由此分为两种方式,先按位查找后改值;或先按值查找后改值 +//先按值查找后改值 +bool LocateChangeElem(SqList &L, int e, int em) { + //按值查找得到位序 + int bitOrder = LocateElem(L, e); + //改值 + if (bitOrder != -1) { + L.data[bitOrder] = em; + return true; + } else { + return false; + } +} + +//先按位序查找后改值 +bool getChangeElem(SqList &L, int i, int em) { + //注意由于是改值涉及修改原数据,所以需要用引用传递的方式 + //给的位序,首先判断i是否合法 + if (i < 0 || i >= L.length)return false; + + //由于是用数组实现的方式,可以直接利用i查找 + L.data[i] = em; + return true; + +} + + +//销毁 +//由于静态分配方式是通过声明数组的方式实现的,故不需要手动销毁SqList表,在使用完成之后,系统会自动删除数据并回收数据空间 + +/**实现模块**/ + +/**测试模块**/ + +//测试 +//打印整个顺序表 +void PrintSqList(SqList L) { + //循环打印 + printf("开始打印顺序表\n"); + for (int i = 0; i < L.length; i++) { + printf("Data[%d]==%d\n", i, L.data[i]); + } + printf("打印结束!\n"); +} + +//测试函数 +void testModule() { + SqList L; + InitList(L); + +// 初试化一些值 + L.data[0] = 1; + L.data[1] = 2; + L.data[2] = 3; + L.length = 3; + + //插入操作 + if (ListInsert(L, 2, 3)) { + printf("插入成功了\n"); + } else { + printf("插入失败了,i的位置不合法,请检查\n"); + } + + //删除操作 + int e = -1; + if (ListDelete(L, 2, e)) { + printf("删除成功!删除的值是:%d\n", e); + } else { + printf("删除失败,请检查位序是否正确\n"); + } + + //数组当前长度 + printf("数组当前长度是多少?%d\n", L.length); + + //查找第一个元素是什么? + printf("第一个元素是什么?\n %d\n", GetElem(L, 1)); + + //查找值为3的元素在什么位置 + printf("第一个值为3的元素在什么位置?\n %d \n", LocateElem(L, 3)); + + //打印输出 + PrintSqList(L); + + //测试改模块功能是否正常 + int e1 = 2; + int em1 = 6; + int i = 1; + int em2 = 7; + printf("开始测试【改】\n" + "第一种方式先按值查找后改值\n"); + if (LocateChangeElem(L, e1, em1)) { + printf("第一种先按值查找后改值成功啦,改变后的值如下:\n"); + PrintSqList(L); + } else { + printf("第一种先按值查找后改值失败了,再检查一下吧!\n"); + } + printf("第二种先按位序查找后改值\n"); + if (getChangeElem(L, i, em2)) { + printf("第二种先按位序查找后改值的方式成功啦,改变后的值如下:\n"); + PrintSqList(L); + } else { + printf("第二种先按位序查找后改值的方式失败了,再检查一下吧!\n"); + } + if (Empty(L)) { + printf("顺序表为空!\n"); + } else { + printf("顺序表非空!\n"); + } + + //打印输出 + PrintSqList(L); +} +/**测试模块**/ +//主函数 +int main() { + testModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_1_SqList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_1_SqList.cpp index 35590b4..6d19fd4 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_1_SqList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_1_SqList.cpp @@ -1,215 +1,215 @@ -// -// Created by kim on 2020/6/17. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序表——动态分配的实现方式 - -#include -#include - -/**定义模块**/ - -#define InitSize 10 -typedef struct { - int *data; //指示动态分配数组的指针 - int MaxSize;//顺序表的最大容量 - int length;//顺序表当前的长度 -} SeqList; - -//函数声明 -bool InitList(SeqList &L); //初始化 -bool Empty(SeqList L); //判空 -bool Full(SeqList L); //判满 -void IncreaseSize(SeqList &L, int len); //动态扩展空间 -bool ListInsert(SeqList &L, int i, int e); //插入 -int GetElem(SeqList L, int i); //按位查找 -int LocateElem(SeqList L, int e); //按值查找 -bool ListDelete(SeqList &L, int i, int &e); //删除 -void DestroySqList(SeqList &L); //销毁 - -/**定义模块**/ - - -/**实现模块**/ - -//初始化 -bool InitList(SeqList &L) { - //用 malloc 函数申请一片连续的存储空间 - L.data = (int *) malloc(InitSize * sizeof(int)); - if (L.data == NULL) - //要细心呀,这里不小心写成了赋值语句,但是没有报错,找了半天错误! - return false; - //(int *) 是指针的强制类型转换 - L.length = 0; - L.MaxSize = InitSize; - return true; -} - -//判空 -bool Empty(SeqList L) { - return (L.length == 0); -} - -//判满 -bool Full(SeqList L) { - return (L.length >= L.MaxSize); -} - -//扩展空间 -void IncreaseSize(SeqList &L, int len) { - printf("开始扩展表存储空间。。。\n"); - int *p = L.data; - L.data = (int *) malloc((InitSize + len) * sizeof(int)); - printf("开始复制转移数据。。。\n"); - for (int i = 0; i < L.length; i++) { - L.data[i] = p[i]; - } - printf("之前内存空间的长度是:%d\n", L.MaxSize); - L.MaxSize = L.MaxSize + len; - free(p); - //malloc 函数用于申请内存空间;free 函数用于释放内存空间; - printf("现在的内存空间长度是%d\n", L.MaxSize); -} - -//插入 -bool ListInsert(SeqList &L, int i, int e) { - //判断插入的位置是否合法, - if (i < 1 || i > L.length + 1) - return false; - //判断表是否存满了 -// if (L.length>=L.MaxSize) -// return false; - if (Full(L)) - return false; - - //后面的元素后移 - for (int j = L.length; j >= i; j--) { - L.data[j] = L.data[j - 1]; - } - L.data[i - 1] = e; - L.length++; - return true; -} - - -//按位查找 -int GetElem(SeqList L, int i) { - //判断是否越界 - if (i < 0 || i > L.length) - return -1; - return L.data[i - 1]; -} - -//按值查找 -int LocateElem(SeqList L, int e) { - //循环出查找 - for (int i = 0; i < L.length; i++) { - if (L.data[i] == e) - return i + 1; //返回位序 - } - return -1; -} - -//删除 -bool ListDelete(SeqList &L, int i, int &e) { - //判断i的位置是否合法 - if (i < 0 || i > L.length) { - return false; - } - //取出将要被删除的数 - e = L.data[i - 1]; - //将其后的数据前移 - for (int j = i; j <= L.length; j++) { - L.data[j - 1] = L.data[j]; - } - //线性表长度减一 - L.length--; - return true; -} - -//销毁 -//由于动态分配方式使用malloc申请的内存空间,故需要使用free函数手动释放空间! -void DestroySqList(SeqList &L) { - free(L.data); - L.data = NULL; - L.length = 0; -} - -/**实现模块**/ - - -/**测试模块**/ - -//测试 -//打印整个顺序表 -void PrintSqList(SeqList L) { - if (L.data == NULL || L.length == 0) - printf("这是一个空表!"); - else { - //循环打印 - printf("开始打印顺序表\n"); - for (int i = 0; i < L.length; i++) { - printf("Data[%d]==%d\n", i, L.data[i]); - } - printf("打印结束!\n"); - } -} - -//测试输出 -void TestPrint(bool test, char message[]) { - if (test) - printf("%s成功啦!\n", message); - else - printf("%s失败啦!\n", message); -} - -void testModule() { - SeqList L; - - TestPrint(InitList(L), "初始化"); - -// 初试化一些值 - L.data[0] = 1; - L.data[1] = 2; - L.data[2] = 3; - L.length = 3; - PrintSqList(L); - - //循环插入直到表满 - int i = 4; - int InsertValue = 4; - while (L.length < L.MaxSize) { - TestPrint(ListInsert(L, i, InsertValue), "插入"); - i++; - InsertValue++; - } - PrintSqList(L); - - //表满则扩展空间 - if (Full(L))IncreaseSize(L, 5); - - //按位查找 - printf("第5个元素是%d\n", GetElem(L, 5)); - - //按值查找 - printf("值为6的元素的位序是%d\n", LocateElem(L, 6)); - - //删除 - int e; - TestPrint(ListDelete(L, 4, e), "删除"); - printf("删除的元素是%d\n", e); - PrintSqList(L); - - //销毁 - DestroySqList(L); - TestPrint(Empty(L), "删除"); - PrintSqList(L); -} - -/**测试模块**/ - -int main() { - testModule(); - return 0; +// +// Created by kim on 2020/6/17. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序表——动态分配的实现方式 + +#include +#include + +/**定义模块**/ + +#define InitSize 10 +typedef struct { + int *data; //指示动态分配数组的指针 + int MaxSize;//顺序表的最大容量 + int length;//顺序表当前的长度 +} SeqList; + +//函数声明 +bool InitList(SeqList &L); //初始化 +bool Empty(SeqList L); //判空 +bool Full(SeqList L); //判满 +void IncreaseSize(SeqList &L, int len); //动态扩展空间 +bool ListInsert(SeqList &L, int i, int e); //插入 +int GetElem(SeqList L, int i); //按位查找 +int LocateElem(SeqList L, int e); //按值查找 +bool ListDelete(SeqList &L, int i, int &e); //删除 +void DestroySqList(SeqList &L); //销毁 + +/**定义模块**/ + + +/**实现模块**/ + +//初始化 +bool InitList(SeqList &L) { + //用 malloc 函数申请一片连续的存储空间 + L.data = (int *) malloc(InitSize * sizeof(int)); + if (L.data == NULL) + //要细心呀,这里不小心写成了赋值语句,但是没有报错,找了半天错误! + return false; + //(int *) 是指针的强制类型转换 + L.length = 0; + L.MaxSize = InitSize; + return true; +} + +//判空 +bool Empty(SeqList L) { + return (L.length == 0); +} + +//判满 +bool Full(SeqList L) { + return (L.length >= L.MaxSize); +} + +//扩展空间 +void IncreaseSize(SeqList &L, int len) { + printf("开始扩展表存储空间。。。\n"); + int *p = L.data; + L.data = (int *) malloc((InitSize + len) * sizeof(int)); + printf("开始复制转移数据。。。\n"); + for (int i = 0; i < L.length; i++) { + L.data[i] = p[i]; + } + printf("之前内存空间的长度是:%d\n", L.MaxSize); + L.MaxSize = L.MaxSize + len; + free(p); + //malloc 函数用于申请内存空间;free 函数用于释放内存空间; + printf("现在的内存空间长度是%d\n", L.MaxSize); +} + +//插入 +bool ListInsert(SeqList &L, int i, int e) { + //判断插入的位置是否合法, + if (i < 1 || i > L.length + 1) + return false; + //判断表是否存满了 +// if (L.length>=L.MaxSize) +// return false; + if (Full(L)) + return false; + + //后面的元素后移 + for (int j = L.length; j >= i; j--) { + L.data[j] = L.data[j - 1]; + } + L.data[i - 1] = e; + L.length++; + return true; +} + + +//按位查找 +int GetElem(SeqList L, int i) { + //判断是否越界 + if (i < 0 || i > L.length) + return -1; + return L.data[i - 1]; +} + +//按值查找 +int LocateElem(SeqList L, int e) { + //循环出查找 + for (int i = 0; i < L.length; i++) { + if (L.data[i] == e) + return i + 1; //返回位序 + } + return -1; +} + +//删除 +bool ListDelete(SeqList &L, int i, int &e) { + //判断i的位置是否合法 + if (i < 0 || i > L.length) { + return false; + } + //取出将要被删除的数 + e = L.data[i - 1]; + //将其后的数据前移 + for (int j = i; j <= L.length; j++) { + L.data[j - 1] = L.data[j]; + } + //线性表长度减一 + L.length--; + return true; +} + +//销毁 +//由于动态分配方式使用malloc申请的内存空间,故需要使用free函数手动释放空间! +void DestroySqList(SeqList &L) { + free(L.data); + L.data = NULL; + L.length = 0; +} + +/**实现模块**/ + + +/**测试模块**/ + +//测试 +//打印整个顺序表 +void PrintSqList(SeqList L) { + if (L.data == NULL || L.length == 0) + printf("这是一个空表!"); + else { + //循环打印 + printf("开始打印顺序表\n"); + for (int i = 0; i < L.length; i++) { + printf("Data[%d]==%d\n", i, L.data[i]); + } + printf("打印结束!\n"); + } +} + +//测试输出 +void TestPrint(bool test, char message[]) { + if (test) + printf("%s成功啦!\n", message); + else + printf("%s失败啦!\n", message); +} + +void testModule() { + SeqList L; + + TestPrint(InitList(L), "初始化"); + +// 初试化一些值 + L.data[0] = 1; + L.data[1] = 2; + L.data[2] = 3; + L.length = 3; + PrintSqList(L); + + //循环插入直到表满 + int i = 4; + int InsertValue = 4; + while (L.length < L.MaxSize) { + TestPrint(ListInsert(L, i, InsertValue), "插入"); + i++; + InsertValue++; + } + PrintSqList(L); + + //表满则扩展空间 + if (Full(L))IncreaseSize(L, 5); + + //按位查找 + printf("第5个元素是%d\n", GetElem(L, 5)); + + //按值查找 + printf("值为6的元素的位序是%d\n", LocateElem(L, 6)); + + //删除 + int e; + TestPrint(ListDelete(L, 4, e), "删除"); + printf("删除的元素是%d\n", e); + PrintSqList(L); + + //销毁 + DestroySqList(L); + TestPrint(Empty(L), "删除"); + PrintSqList(L); +} + +/**测试模块**/ + +int main() { + testModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_2_LinkList1.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_2_LinkList1.cpp index 048f877..dadec77 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_2_LinkList1.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_2_LinkList1.cpp @@ -1,158 +1,158 @@ -// -// Created by kim on 2020/6/19. -// Copyright (c) Kim Yang All rights reserved. -// - -//带头节点的单链表 - -#include -#include - -/**定义模块**/ - -typedef struct LNode { - int data; - LNode *next; -} LNode, *LinkList; - -//函数定义 -bool InitList(LinkList &L); //初始化 -bool Empty(LinkList L); //盘空 -bool ListInsert(LinkList &L, int i, int e);//按位插入 -bool InsertNextNode(LNode *p, int e);//指定节点的后插操作 -bool InsertPriorNode(LNode *p, int e);//指定节点的前插操作————先完成后插,再交换数据以实现前插 -bool ListDelete(LinkList &L, int i, int &e);//按指定位序删除节点并返回其值 -bool DeleteNode(LNode *p);//删除指定节点 -/**定义模块**/ - - -/**实现模块**/ - -//初试化(带有头节点) -bool InitList(LinkList &L) { - L = (LNode *) malloc(sizeof(LNode));//分配一个头节点 - if (L == NULL) - return false;//头节点分配失败,可能是内存不足 - L->next = NULL;//头节点之后暂时没有节点,头节点也不存放数据 - return true; -} - -//判空 -bool Empty(LinkList L) { -// if(L->next==NULL) -// return true; -// else -// return false; - return (L->next == NULL); -} - -//按位插入 -bool ListInsert(LinkList &L, int i, int e) { - if (i < 1)return false;//判断位序i是否合法 - LNode *p;//指针指向当前扫面到的节点 - int j = 0;//记录p指向的节点的位序 - p = L;//L指向头节点,从头开始 - while (p != NULL && j < i - 1) { - //循环扫描 - p = p->next; - j++; - } - if (p == NULL) //i值超过来表长,不合法 - return false; - LNode *s = (LNode *) malloc(sizeof(LNode)); - s->data = e; - //下面的顺序不可交换 - s->next = p->next; - p->next = s; - return true; -} - -//指定节点的后插操作 -bool InsertNextNode(LNode *p, int e) { - if (p == NULL) - return false;//判断指定节点是否存在 - LNode *s = (LNode *) malloc(sizeof(LNode)); - if (s == NULL)return false;//分配内存失败 - s->data = e; - s->next = p->next; - p->next = s; - return true; -} - -//指定节点的前插操作 -//先完成后插,再交换数据以实现前插 -bool InsertPriorNode(LNode *p, int e) { - if (p == NULL)return false; - LNode *s = (LNode *) malloc(sizeof(LNode)); - if (s == NULL)return false; - s->next = p->next; - p->next = s; - s->data = p->data; - p->data = e; - return true; -} - -//按指定位序删除节点并返回其值 -bool ListDelete(LinkList &L, int i, int &e) { - if (i < 1)return false; - LNode *p; - int j = 0; - p = L; - while (p != NULL && j < i - 1) { - p = p->next; - j++; - } - LNode *q = p->next; - e = q->data; - p->next = q->next; - free(q); - return true; -} - -//删除指定节点 -bool DeleteNode(LNode *p) { - -} - -/**实现模块**/ - -/**测试模块**/ -//Test -void TestPrint(bool test, char about[]) { - if (test) - printf("%s成功\n", about); - else - printf("%s失败\n", about); -} - -void PrintList(LinkList L) { - //循环打印整个链表 - LNode *p = L->next;//扫描指针 - int j = 0; - if (p == NULL)printf("这是一个空表\n"); - while (p != NULL) { - printf("LinkList[%d]=%d\n", j, p->data); - p = p->next; - j++; - } - -} - -void TestModule() { - LinkList L; - TestPrint(InitList(L), "初始化"); - PrintList(L); - TestPrint(ListInsert(L, 1, 3), "按位插入"); - PrintList(L); - int e; - TestPrint(ListDelete(L, 1, e), "删除"); - PrintList(L); - printf("被删除的数据是:%d\n", e); -} - -/**测试模块**/ - -int main() { - TestModule(); - return 0; +// +// Created by kim on 2020/6/19. +// Copyright (c) Kim Yang All rights reserved. +// + +//带头节点的单链表 + +#include +#include + +/**定义模块**/ + +typedef struct LNode { + int data; + LNode *next; +} LNode, *LinkList; + +//函数定义 +bool InitList(LinkList &L); //初始化 +bool Empty(LinkList L); //盘空 +bool ListInsert(LinkList &L, int i, int e);//按位插入 +bool InsertNextNode(LNode *p, int e);//指定节点的后插操作 +bool InsertPriorNode(LNode *p, int e);//指定节点的前插操作————先完成后插,再交换数据以实现前插 +bool ListDelete(LinkList &L, int i, int &e);//按指定位序删除节点并返回其值 +bool DeleteNode(LNode *p);//删除指定节点 +/**定义模块**/ + + +/**实现模块**/ + +//初试化(带有头节点) +bool InitList(LinkList &L) { + L = (LNode *) malloc(sizeof(LNode));//分配一个头节点 + if (L == NULL) + return false;//头节点分配失败,可能是内存不足 + L->next = NULL;//头节点之后暂时没有节点,头节点也不存放数据 + return true; +} + +//判空 +bool Empty(LinkList L) { +// if(L->next==NULL) +// return true; +// else +// return false; + return (L->next == NULL); +} + +//按位插入 +bool ListInsert(LinkList &L, int i, int e) { + if (i < 1)return false;//判断位序i是否合法 + LNode *p;//指针指向当前扫面到的节点 + int j = 0;//记录p指向的节点的位序 + p = L;//L指向头节点,从头开始 + while (p != NULL && j < i - 1) { + //循环扫描 + p = p->next; + j++; + } + if (p == NULL) //i值超过来表长,不合法 + return false; + LNode *s = (LNode *) malloc(sizeof(LNode)); + s->data = e; + //下面的顺序不可交换 + s->next = p->next; + p->next = s; + return true; +} + +//指定节点的后插操作 +bool InsertNextNode(LNode *p, int e) { + if (p == NULL) + return false;//判断指定节点是否存在 + LNode *s = (LNode *) malloc(sizeof(LNode)); + if (s == NULL)return false;//分配内存失败 + s->data = e; + s->next = p->next; + p->next = s; + return true; +} + +//指定节点的前插操作 +//先完成后插,再交换数据以实现前插 +bool InsertPriorNode(LNode *p, int e) { + if (p == NULL)return false; + LNode *s = (LNode *) malloc(sizeof(LNode)); + if (s == NULL)return false; + s->next = p->next; + p->next = s; + s->data = p->data; + p->data = e; + return true; +} + +//按指定位序删除节点并返回其值 +bool ListDelete(LinkList &L, int i, int &e) { + if (i < 1)return false; + LNode *p; + int j = 0; + p = L; + while (p != NULL && j < i - 1) { + p = p->next; + j++; + } + LNode *q = p->next; + e = q->data; + p->next = q->next; + free(q); + return true; +} + +//删除指定节点 +bool DeleteNode(LNode *p) { + +} + +/**实现模块**/ + +/**测试模块**/ +//Test +void TestPrint(bool test, char about[]) { + if (test) + printf("%s成功\n", about); + else + printf("%s失败\n", about); +} + +void PrintList(LinkList L) { + //循环打印整个链表 + LNode *p = L->next;//扫描指针 + int j = 0; + if (p == NULL)printf("这是一个空表\n"); + while (p != NULL) { + printf("LinkList[%d]=%d\n", j, p->data); + p = p->next; + j++; + } + +} + +void TestModule() { + LinkList L; + TestPrint(InitList(L), "初始化"); + PrintList(L); + TestPrint(ListInsert(L, 1, 3), "按位插入"); + PrintList(L); + int e; + TestPrint(ListDelete(L, 1, e), "删除"); + PrintList(L); + printf("被删除的数据是:%d\n", e); +} + +/**测试模块**/ + +int main() { + TestModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_3_LinkList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_3_LinkList.cpp index 2eaa587..22cb4fa 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_3_LinkList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_3_LinkList.cpp @@ -1,120 +1,120 @@ -// -// Created by kim on 2020/6/19. -// Copyright (c) Kim Yang All rights reserved. -// - -//不带头节点的单链表 - -#include -#include - -/**定义模块**/ -typedef struct LNode { - int data; - struct LNode *next; -} LNode, *LinkList; -//等价于 -//struct LNode{ -// int data; -// struct LNode *next; -//}; -// -//typedef struct LNode LNode; -//typedef struct LNode *LinkList; - -//函数声明 -bool InitList(LinkList &L);//初始化 -bool Empty(LinkList L);//判断是否为空 -bool ListInsert(LinkList &L, int i, int e);//插入 - -/**定义模块**/ - - -/**实现模块**/ - -//初始化 -bool InitList(LinkList &L) { - L = NULL;//空表暂时没有任何数据 - return true; -} - -//判断是否为空 -bool Empty(LinkList L) { - return (L == NULL); -} -//等价于 -//bool Empty1(LinkList L){ -// if (L==NULL) -// return true; -// else -// return false; -//} - -bool ListInsert(LinkList &L, int i, int e) { - if (i < 1)return false;//判断位序i是否合法 - //不带头节点时,插入位置正好为表头时,得单独处理 - if (i = 1) { - LNode *s = (LNode *) malloc(sizeof(LNode)); - s->data = e; - s->next = L; - L = s; - return true; - } - LNode *p;//指针指向当前扫面到的节点 - int j = 0;//记录p指向的节点的位序 - p = L;//L指向头节点,从头开始 - while (p != NULL && j < i - 1) { - //循环扫描 - p = p->next; - j++; - } - if (p == NULL) //i值超过来表长,不合法 - return false; - LNode *s = (LNode *) malloc(sizeof(LNode)); - s->data = e; - //下面的顺序不可交换 - s->next = p->next; - p->next = s; - return true; -} - -/**实现模块**/ - - -/**测试模块**/ - -//Test -void TestPrint(bool test, char about[]) { - if (test) - printf("%s成功\n", about); - else - printf("%s失败\n", about); -} - -void PrintList(LinkList L) { - //循环打印整个链表 - LNode *p = L;//扫描指针 - int j = 0; - if (p == NULL)printf("这是一个空表\n"); - while (p != NULL) { - printf("LinkList[%d]=%d", j, p->data); - p = p->next; - j++; - } -} - -void TestModule() { - LinkList L; - TestPrint(InitList(L), "初始化"); - PrintList(L); - TestPrint(ListInsert(L, 1, 2), "按位插入"); - PrintList(L); -} - -/**测试模块**/ - -int main() { - TestModule(); - return 0; - +// +// Created by kim on 2020/6/19. +// Copyright (c) Kim Yang All rights reserved. +// + +//不带头节点的单链表 + +#include +#include + +/**定义模块**/ +typedef struct LNode { + int data; + struct LNode *next; +} LNode, *LinkList; +//等价于 +//struct LNode{ +// int data; +// struct LNode *next; +//}; +// +//typedef struct LNode LNode; +//typedef struct LNode *LinkList; + +//函数声明 +bool InitList(LinkList &L);//初始化 +bool Empty(LinkList L);//判断是否为空 +bool ListInsert(LinkList &L, int i, int e);//插入 + +/**定义模块**/ + + +/**实现模块**/ + +//初始化 +bool InitList(LinkList &L) { + L = NULL;//空表暂时没有任何数据 + return true; +} + +//判断是否为空 +bool Empty(LinkList L) { + return (L == NULL); +} +//等价于 +//bool Empty1(LinkList L){ +// if (L==NULL) +// return true; +// else +// return false; +//} + +bool ListInsert(LinkList &L, int i, int e) { + if (i < 1)return false;//判断位序i是否合法 + //不带头节点时,插入位置正好为表头时,得单独处理 + if (i = 1) { + LNode *s = (LNode *) malloc(sizeof(LNode)); + s->data = e; + s->next = L; + L = s; + return true; + } + LNode *p;//指针指向当前扫面到的节点 + int j = 0;//记录p指向的节点的位序 + p = L;//L指向头节点,从头开始 + while (p != NULL && j < i - 1) { + //循环扫描 + p = p->next; + j++; + } + if (p == NULL) //i值超过来表长,不合法 + return false; + LNode *s = (LNode *) malloc(sizeof(LNode)); + s->data = e; + //下面的顺序不可交换 + s->next = p->next; + p->next = s; + return true; +} + +/**实现模块**/ + + +/**测试模块**/ + +//Test +void TestPrint(bool test, char about[]) { + if (test) + printf("%s成功\n", about); + else + printf("%s失败\n", about); +} + +void PrintList(LinkList L) { + //循环打印整个链表 + LNode *p = L;//扫描指针 + int j = 0; + if (p == NULL)printf("这是一个空表\n"); + while (p != NULL) { + printf("LinkList[%d]=%d", j, p->data); + p = p->next; + j++; + } +} + +void TestModule() { + LinkList L; + TestPrint(InitList(L), "初始化"); + PrintList(L); + TestPrint(ListInsert(L, 1, 2), "按位插入"); + PrintList(L); +} + +/**测试模块**/ + +int main() { + TestModule(); + return 0; + } \ No newline at end of file diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_4_DLinkList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_4_DLinkList.cpp index 1af0cfb..1ffcaaf 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_4_DLinkList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_4_DLinkList.cpp @@ -1,131 +1,131 @@ -// -// Created by kim on 2020/6/20. -// Copyright (c) Kim Yang All rights reserved. -// - -//带有头节点版本——双链表 - -#include -#include - -/**定义模块**/ - -typedef struct DNode { - int data;//数据域 - struct DNode *prior, *next;//前指针和后指针 -} DNode, *DLinkList; - -//函数声明 -bool InitDLinkList(DLinkList &L);//初始化 -bool Empty(DLinkList L);//判空 -bool InsertNextElem(DNode *p, DNode *s);//指定节点的后插操作 -bool DeleteNextNode(DNode *p);//删除P节点的后继节点 -bool DestroyList(DLinkList &L);//销毁整个表 -bool PrintNextElems(DNode *p);//从P点向后遍历 -bool PrintPriorElems(DNode *p);//从P点向前遍历 -bool PrintPriorElemsOverHead(DNode *p);//从P点向前遍历(跳过头节点) -/**定义模块**/ - - -/**实现模块**/ - -//初始化 -bool InitDLinkList(DLinkList &L) { - L = (DNode *) malloc(sizeof(DNode));//分配一个头节点 - if (L == NULL) - return false; - L->prior == NULL;//头节点前后指针都指向空 - L->next == NULL; - return true; -} - -//判空 -bool Empty(DLinkList L) { - return (L->next == NULL); -} - -//指定节点的后插操作 -bool InsertNextElem(DNode *p, DNode *s) { - //注意顺序不可交换 - s->next = p->next; - p->next->prior = s; - s->prior = p; - p->next = s; -} - -//删除P节点的后继节点 -bool DeleteNextNode(DNode *p) { - if (p == NULL)return false;//p节点为空 - DNode *q = p->next; - if (q == NULL)return false;//P节点没有后继 - p->next = q->next; - if (q->next != NULL)//q不是最后一个节点 - q->next->prior = p; - free(q);//手动释放内存空间 - return true; -} - -//销毁整个表 -bool DestroyList(DLinkList &L) { - //循环删除并释放每个节点 - while (L->next != NULL) - DeleteNextNode(L); - free(L);//释放头节点 - L = NULL;//头指针指向NULL - -} - -//从P点向后遍历 -bool PrintNextElems(DNode *p) { - if (p == NULL)return false;// - while (p != NULL) { - printf("当前节点的值是:%d", p->data); - p = p->next; - } - return true; -} - -//从P点向前遍历 -bool PrintPriorElems(DNode *p) { - if (p == NULL)return false;// - while (p != NULL) { - printf("当前节点的值是:%d", p->data); - p = p->prior; - } - return true; -} - -//从P点向前遍历(跳过头节点) -bool PrintPriorElemsOverHead(DNode *p) { - if (p == NULL)return false;// - while (p->prior != NULL) { - printf("当前节点的值是:%d", p->data); - p = p->prior; - } - return true; -} - -/**实现模块**/ - - -/**测试模块**/ - -//测试函数 -void TestPrint(bool test, char message[]) { - if (test) - printf("%s成功啦!\n", message); - else - printf("%s失败啦!\n", message); -} - -void TestModule() { - DLinkList L; - TestPrint(InitDLinkList(L), "初始化"); -} - -/**测试模块**/ - -int main() { - TestModule(); - return 0; -} +// +// Created by kim on 2020/6/20. +// Copyright (c) Kim Yang All rights reserved. +// + +//带有头节点版本——双链表 + +#include +#include + +/**定义模块**/ + +typedef struct DNode { + int data;//数据域 + struct DNode *prior, *next;//前指针和后指针 +} DNode, *DLinkList; + +//函数声明 +bool InitDLinkList(DLinkList &L);//初始化 +bool Empty(DLinkList L);//判空 +bool InsertNextElem(DNode *p, DNode *s);//指定节点的后插操作 +bool DeleteNextNode(DNode *p);//删除P节点的后继节点 +bool DestroyList(DLinkList &L);//销毁整个表 +bool PrintNextElems(DNode *p);//从P点向后遍历 +bool PrintPriorElems(DNode *p);//从P点向前遍历 +bool PrintPriorElemsOverHead(DNode *p);//从P点向前遍历(跳过头节点) +/**定义模块**/ + + +/**实现模块**/ + +//初始化 +bool InitDLinkList(DLinkList &L) { + L = (DNode *) malloc(sizeof(DNode));//分配一个头节点 + if (L == NULL) + return false; + L->prior == NULL;//头节点前后指针都指向空 + L->next == NULL; + return true; +} + +//判空 +bool Empty(DLinkList L) { + return (L->next == NULL); +} + +//指定节点的后插操作 +bool InsertNextElem(DNode *p, DNode *s) { + //注意顺序不可交换 + s->next = p->next; + p->next->prior = s; + s->prior = p; + p->next = s; +} + +//删除P节点的后继节点 +bool DeleteNextNode(DNode *p) { + if (p == NULL)return false;//p节点为空 + DNode *q = p->next; + if (q == NULL)return false;//P节点没有后继 + p->next = q->next; + if (q->next != NULL)//q不是最后一个节点 + q->next->prior = p; + free(q);//手动释放内存空间 + return true; +} + +//销毁整个表 +bool DestroyList(DLinkList &L) { + //循环删除并释放每个节点 + while (L->next != NULL) + DeleteNextNode(L); + free(L);//释放头节点 + L = NULL;//头指针指向NULL + +} + +//从P点向后遍历 +bool PrintNextElems(DNode *p) { + if (p == NULL)return false;// + while (p != NULL) { + printf("当前节点的值是:%d", p->data); + p = p->next; + } + return true; +} + +//从P点向前遍历 +bool PrintPriorElems(DNode *p) { + if (p == NULL)return false;// + while (p != NULL) { + printf("当前节点的值是:%d", p->data); + p = p->prior; + } + return true; +} + +//从P点向前遍历(跳过头节点) +bool PrintPriorElemsOverHead(DNode *p) { + if (p == NULL)return false;// + while (p->prior != NULL) { + printf("当前节点的值是:%d", p->data); + p = p->prior; + } + return true; +} + +/**实现模块**/ + + +/**测试模块**/ + +//测试函数 +void TestPrint(bool test, char message[]) { + if (test) + printf("%s成功啦!\n", message); + else + printf("%s失败啦!\n", message); +} + +void TestModule() { + DLinkList L; + TestPrint(InitDLinkList(L), "初始化"); +} + +/**测试模块**/ + +int main() { + TestModule(); + return 0; +} diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_5_RLinkList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_5_RLinkList.cpp index a5eedd1..c74bf0e 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_5_RLinkList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_5_RLinkList.cpp @@ -1,51 +1,51 @@ -// -// Created by kim on 2020/6/20. -// Copyright (c) Kim Yang All rights reserved. -// - -//循环单链表 -#include -#include - -/**定义模块**/ - -typedef struct LNode{ - int data; - struct LNode *next; -}LNode,*LinkList; - -//函数声明 -bool InitRLinkList(LinkList &L);//初始化 -bool IsTail(LinkList L,LNode *p);//判断P是不是表尾指针 - -/**定义模块**/ - -/**实现模块**/ - -//初始化一个循环单链表 -bool InitRLinkList(LinkList &L){ - L=(LNode *)malloc(sizeof(LNode));//分配一个头节点 - if (L=NULL) - return false;//内存不足,分配失败; - L->next=L;//头节点nex指向头节点,以此形成循环链表 - return true; -} - -//判断P是不是表尾指针 -bool IsTail(LinkList L,LNode *p){ - return (p->next==L); -} - -/**实现模块**/ - -/**测试模块**/ -void TestModule(){ - -} - -/**测试模块**/ - -int main(){ - TestModule(); - return 0; -} +// +// Created by kim on 2020/6/20. +// Copyright (c) Kim Yang All rights reserved. +// + +//循环单链表 +#include +#include + +/**定义模块**/ + +typedef struct LNode{ + int data; + struct LNode *next; +}LNode,*LinkList; + +//函数声明 +bool InitRLinkList(LinkList &L);//初始化 +bool IsTail(LinkList L,LNode *p);//判断P是不是表尾指针 + +/**定义模块**/ + +/**实现模块**/ + +//初始化一个循环单链表 +bool InitRLinkList(LinkList &L){ + L=(LNode *)malloc(sizeof(LNode));//分配一个头节点 + if (L=NULL) + return false;//内存不足,分配失败; + L->next=L;//头节点nex指向头节点,以此形成循环链表 + return true; +} + +//判断P是不是表尾指针 +bool IsTail(LinkList L,LNode *p){ + return (p->next==L); +} + +/**实现模块**/ + +/**测试模块**/ +void TestModule(){ + +} + +/**测试模块**/ + +int main(){ + TestModule(); + return 0; +} diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_6_RDLinkList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_6_RDLinkList.cpp index 244503c..7f87000 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_6_RDLinkList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_6_RDLinkList.cpp @@ -1,70 +1,70 @@ -// -// Created by kim on 2020/6/20. -// Copyright (c) Kim Yang All rights reserved. -// - -//循环双链表 -#include -#include - -/**定义模块**/ - -typedef struct DNode{ - int data; - struct DNode *prior,*next; -}DNode,*DLinkList; - -//函数声明 -bool InitRDLinkList(DLinkList &L);//初始化 -bool iTail(DLinkList L,DNode *p);//判断节点p是不是循环双链表的表尾节点 -bool InsertNextDNode(DNode *p,DNode *s);//在p节点之后插入s节点 -bool DeleteNextDNode(DLinkList &L,DNode *p);//删除操作 - -/**定义模块**/ - -/**实现模块**/ - -//初始化 -bool InitRDLinkList(DLinkList &L){ - L=(DNode *)malloc(sizeof(DNode));//分配头节点 - if (L==NULL)return false; - L->prior=L; - L->next=L;//循环抱住自己 - return true; -} - -//判断节点p是不是循环双链表的表尾节点 -bool iTail(DLinkList L,DNode *p){ - return (p->next==L); -} - -//在p节点之后插入s节点 -bool InsertNextDNode(DNode *p,DNode *s){ - s->next=p->next; - p->next->prior=s; - s->prior=p; - p->next=s; - return true; -} - -//删除操作 -bool DeleteNextDNode(DLinkList &L,DNode *p){ - DNode *q = p->next; - p->next=q->next; - q->next->prior=p; - free(q); - return true; -} -/**实现模块**/ - -/**测试模块**/ -void TestModule(){ - -} - -/**测试模块**/ - -int main(){ - TestModule(); - return 0; +// +// Created by kim on 2020/6/20. +// Copyright (c) Kim Yang All rights reserved. +// + +//循环双链表 +#include +#include + +/**定义模块**/ + +typedef struct DNode{ + int data; + struct DNode *prior,*next; +}DNode,*DLinkList; + +//函数声明 +bool InitRDLinkList(DLinkList &L);//初始化 +bool iTail(DLinkList L,DNode *p);//判断节点p是不是循环双链表的表尾节点 +bool InsertNextDNode(DNode *p,DNode *s);//在p节点之后插入s节点 +bool DeleteNextDNode(DLinkList &L,DNode *p);//删除操作 + +/**定义模块**/ + +/**实现模块**/ + +//初始化 +bool InitRDLinkList(DLinkList &L){ + L=(DNode *)malloc(sizeof(DNode));//分配头节点 + if (L==NULL)return false; + L->prior=L; + L->next=L;//循环抱住自己 + return true; +} + +//判断节点p是不是循环双链表的表尾节点 +bool iTail(DLinkList L,DNode *p){ + return (p->next==L); +} + +//在p节点之后插入s节点 +bool InsertNextDNode(DNode *p,DNode *s){ + s->next=p->next; + p->next->prior=s; + s->prior=p; + p->next=s; + return true; +} + +//删除操作 +bool DeleteNextDNode(DLinkList &L,DNode *p){ + DNode *q = p->next; + p->next=q->next; + q->next->prior=p; + free(q); + return true; +} +/**实现模块**/ + +/**测试模块**/ +void TestModule(){ + +} + +/**测试模块**/ + +int main(){ + TestModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_1_LinearList/DS_1_7_SLinkList.cpp b/DataStructure/Src/DS_1_LinearList/DS_1_7_SLinkList.cpp index b0fc513..e98eda9 100644 --- a/DataStructure/Src/DS_1_LinearList/DS_1_7_SLinkList.cpp +++ b/DataStructure/Src/DS_1_LinearList/DS_1_7_SLinkList.cpp @@ -1,55 +1,55 @@ -// -// Created by kim on 2020/6/20. -// Copyright (c) Kim Yang All rights reserved. -// - -//静态链表 -#include -#include -#define MaxSize 10 - -/**定义模块**/ - -//第一种定义方法 -struct Node0{ - int data; - int next; -}; - -//第二种定义方法 -typedef struct Node{ - int data; - int next; -}SLinkList[MaxSize]; -//相比之下,第二种方法可读性更强!,推荐 - -//函数声明 - -/**定义模块**/ - -/**实现模块**/ - -void testSLinkList(){ - //声明时 - struct Node0 a[MaxSize]; -} - -void TestSLinkList(){ - //第二种方法声明时 - SLinkList a; -} -/**实现模块**/ - -/**测试模块**/ -void TestModule(){ - -} - - -/**测试模块**/ - -int main(){ - //后续来填坑吧!! - TestModule(); - return 0; +// +// Created by kim on 2020/6/20. +// Copyright (c) Kim Yang All rights reserved. +// + +//静态链表 +#include +#include +#define MaxSize 10 + +/**定义模块**/ + +//第一种定义方法 +struct Node0{ + int data; + int next; +}; + +//第二种定义方法 +typedef struct Node{ + int data; + int next; +}SLinkList[MaxSize]; +//相比之下,第二种方法可读性更强!,推荐 + +//函数声明 + +/**定义模块**/ + +/**实现模块**/ + +void testSLinkList(){ + //声明时 + struct Node0 a[MaxSize]; +} + +void TestSLinkList(){ + //第二种方法声明时 + SLinkList a; +} +/**实现模块**/ + +/**测试模块**/ +void TestModule(){ + +} + + +/**测试模块**/ + +int main(){ + //后续来填坑吧!! + TestModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_0_SqStack.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_0_SqStack.cpp index 7e9b7ec..2398990 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_0_SqStack.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_0_SqStack.cpp @@ -1,217 +1,217 @@ -// -// Created by kim on 2020/6/21. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序栈的实现 -#include - -/**定义模块**/ - -# define MaxSize 10 -typedef struct { - int data[MaxSize]; - int top; -} SqStack; - -//函数声明 -void InitStack(SqStack &S);//初始化 -bool Push(SqStack &S, int t);//入栈 -bool Pop(SqStack &S, int &x);//出栈,并打印出栈顶元素 -bool GetTop(SqStack S, int &x);//读取栈顶元素 -int GetTopOther(SqStack S);//读取栈顶元素的第二种实现方式 - -void InitStack1(SqStack &S);//初始化1 -bool Push1(SqStack &S, int t);//入栈,初始化1 -bool Pop1(SqStack &S, int &x);//出栈,并打印出栈顶元素,初始化1 -bool GetTop1(SqStack S, int &x);//读取栈顶元素,初始化1 -int GetTopOther1(SqStack S);//读取栈顶元素的第二种实现方式 -/**定义模块**/ - -/**实现模块**/ - -//初始化 -void InitStack(SqStack &S) { - S.top = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 -} - -//初始化1 -void InitStack1(SqStack &S) { - S.top = 0;//这种初始化方式,栈顶指针始终会指向栈顶元素的下一空元素 -} - -//入栈 -bool Push(SqStack &S, int t) { - if (S.top == MaxSize - 1)return false;//栈满 - S.data[++S.top] = t; -// 等价下面两个语句 -// S.top+=1;//先将栈顶指针指向下一个位置 -// S.data[S.top]=t;//再填充元素 - return true; -} - -//入栈,初始化1 -bool Push1(SqStack &S, int t) { - if (S.top == MaxSize)return false;//栈满,注意初始化条件不一样判空的条件也不一样了 - S.data[S.top++] = t; -// 等价下面两个语句 -// S.data[S.top]=t; -// S.top+=1; -//注意初始化方式不同,上边的顺序也不一样了,先填充元素,再移动指针 - return true; -} - -//出栈,并打印出栈顶元素 -bool Pop(SqStack &S, int &x) { - //判断 - if (S.top == -1)return false;//栈空报错 - x = S.data[S.top--]; -// 等价于下面 -// x=S.data[S.top];//先取元素 -// S.top -=1;//再改指针 - return true; -} - -//出栈,并打印出栈顶元素,初始化1 -bool Pop1(SqStack &S, int &x) { - //判断 - if (S.top == 0)return false;//栈空报错,注意判空条件 - x = S.data[--S.top]; -// 等价于下面 -// S.top -=1; -// x=S.data[S.top]; -//注意初始化方式不同,上边的顺序也不一样了,先将指针指向当前栈顶元素,再将其取出 - return true; -} - -//读取栈顶元素 -bool GetTop(SqStack S, int &x) { - if (S.top == -1)return false; - x = S.data[S.top]; - return true; -} - -//读取栈顶元素,初始化1 -bool GetTop1(SqStack S, int &x) { - if (S.top == 0)return false; - x = S.data[S.top - 1];//注意按初始化1的方式,这里指针减1才是栈顶元素的位置, - // 同时注意不能使用--S.top,因为这里是读取,不可修改原栈,所以不可和出栈一样 - //但即时这里你错误使用了--S.top,也不会有问题,因为此处的S是值传递,非引用传递,所以你修改的也只是复制之后的S,不会影响原栈S,即时这样也不建议使用--S.top,如果老师较真的话,可以扣分哒 - return true; -} - -//读取栈顶元素的第二种实现方式 -//利用返回值返回栈顶元素,若成功就返回栈顶元素,失败就返回-1; -//缺点:如果栈顶元素就是-1,容易造成误判,正因它的缺点,如果考试考到了它,写这种方式应该是会被扣部分分数的 -int GetTopOther(SqStack S) { - if (S.top == -1)return -1; - return S.data[S.top]; -} - -int GetTopOther1(SqStack S) { - if (S.top == 0)return -1; - return S.data[S.top - 1]; -} -/**实现模块**/ - -/**测试模块**/ - -//打印整个栈 -void PrintStack(SqStack S) { - printf("从栈顶元素开始,栈如下:\n"); - while (S.top >= 0) {//注意判空的条件 - printf("S[%d]=%d\n", S.top, S.data[S.top--]); - } - printf("栈打印完毕\n"); -} - -//打印整个栈,初始化方式1 -void PrintStack1(SqStack S) { - printf("从栈顶元素开始,栈如下:\n"); - while (S.top > 0) {//注意判空的条件 - printf("S1[%d]=%d\n", S.top - 1, S.data[--S.top]);//初始化方式1得先移动指针再获取元素 - } - printf("栈打印完毕\n"); -} - - -void testStack() { - printf("开始测试\n"); - SqStack S; - printf("测试第一种初始化方式\n"); - InitStack(S); - if (Push(S, 1)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push(S, 2)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack(S); - int x; - if (Pop(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - PrintStack(S); - int x1; - if (GetTop(S, x1)) { - printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); - } else { - printf("读取栈顶元素失败,再检查一下吧!\n"); - } - int x4 = GetTopOther(S); - if (x4 != -1) { - printf("第二种读取栈顶元素的方式成功了,栈顶元素为:%d\n", x4); - } else { - printf("第二种读取栈顶元素的方式失败了\n"); - } - - - printf("测试第二种初始化方式\n"); - SqStack S1; - InitStack1(S1); - if (Push1(S1, 1)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push1(S1, 2)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack1(S1); - int x2; - if (Pop1(S1, x2)) { - printf("出栈成功,弹出的元素为[%d]\n", x2); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - PrintStack1(S1); - int x3; - if (GetTop1(S1, x3)) { - printf("读取栈顶元素成功了,栈顶元素为:%d\n", x3); - } else { - printf("读取栈顶元素失败,再检查一下吧!\n"); - } - int x5 = GetTopOther1(S1); - if (x5 != -1) { - printf("第二种读取栈顶元素的方式成功了,栈顶元素为:%d\n", x5); - } else { - printf("第二种读取栈顶元素的方式失败了\n"); - } - - printf("测试完毕了!\n"); -} -/**测试模块**/ - -int main() { - printf("Hello, SqStack!"); - testStack(); - return 0; +// +// Created by kim on 2020/6/21. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序栈的实现 +#include + +/**定义模块**/ + +# define MaxSize 10 +typedef struct { + int data[MaxSize]; + int top; +} SqStack; + +//函数声明 +void InitStack(SqStack &S);//初始化 +bool Push(SqStack &S, int t);//入栈 +bool Pop(SqStack &S, int &x);//出栈,并打印出栈顶元素 +bool GetTop(SqStack S, int &x);//读取栈顶元素 +int GetTopOther(SqStack S);//读取栈顶元素的第二种实现方式 + +void InitStack1(SqStack &S);//初始化1 +bool Push1(SqStack &S, int t);//入栈,初始化1 +bool Pop1(SqStack &S, int &x);//出栈,并打印出栈顶元素,初始化1 +bool GetTop1(SqStack S, int &x);//读取栈顶元素,初始化1 +int GetTopOther1(SqStack S);//读取栈顶元素的第二种实现方式 +/**定义模块**/ + +/**实现模块**/ + +//初始化 +void InitStack(SqStack &S) { + S.top = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 +} + +//初始化1 +void InitStack1(SqStack &S) { + S.top = 0;//这种初始化方式,栈顶指针始终会指向栈顶元素的下一空元素 +} + +//入栈 +bool Push(SqStack &S, int t) { + if (S.top == MaxSize - 1)return false;//栈满 + S.data[++S.top] = t; +// 等价下面两个语句 +// S.top+=1;//先将栈顶指针指向下一个位置 +// S.data[S.top]=t;//再填充元素 + return true; +} + +//入栈,初始化1 +bool Push1(SqStack &S, int t) { + if (S.top == MaxSize)return false;//栈满,注意初始化条件不一样判空的条件也不一样了 + S.data[S.top++] = t; +// 等价下面两个语句 +// S.data[S.top]=t; +// S.top+=1; +//注意初始化方式不同,上边的顺序也不一样了,先填充元素,再移动指针 + return true; +} + +//出栈,并打印出栈顶元素 +bool Pop(SqStack &S, int &x) { + //判断 + if (S.top == -1)return false;//栈空报错 + x = S.data[S.top--]; +// 等价于下面 +// x=S.data[S.top];//先取元素 +// S.top -=1;//再改指针 + return true; +} + +//出栈,并打印出栈顶元素,初始化1 +bool Pop1(SqStack &S, int &x) { + //判断 + if (S.top == 0)return false;//栈空报错,注意判空条件 + x = S.data[--S.top]; +// 等价于下面 +// S.top -=1; +// x=S.data[S.top]; +//注意初始化方式不同,上边的顺序也不一样了,先将指针指向当前栈顶元素,再将其取出 + return true; +} + +//读取栈顶元素 +bool GetTop(SqStack S, int &x) { + if (S.top == -1)return false; + x = S.data[S.top]; + return true; +} + +//读取栈顶元素,初始化1 +bool GetTop1(SqStack S, int &x) { + if (S.top == 0)return false; + x = S.data[S.top - 1];//注意按初始化1的方式,这里指针减1才是栈顶元素的位置, + // 同时注意不能使用--S.top,因为这里是读取,不可修改原栈,所以不可和出栈一样 + //但即时这里你错误使用了--S.top,也不会有问题,因为此处的S是值传递,非引用传递,所以你修改的也只是复制之后的S,不会影响原栈S,即时这样也不建议使用--S.top,如果老师较真的话,可以扣分哒 + return true; +} + +//读取栈顶元素的第二种实现方式 +//利用返回值返回栈顶元素,若成功就返回栈顶元素,失败就返回-1; +//缺点:如果栈顶元素就是-1,容易造成误判,正因它的缺点,如果考试考到了它,写这种方式应该是会被扣部分分数的 +int GetTopOther(SqStack S) { + if (S.top == -1)return -1; + return S.data[S.top]; +} + +int GetTopOther1(SqStack S) { + if (S.top == 0)return -1; + return S.data[S.top - 1]; +} +/**实现模块**/ + +/**测试模块**/ + +//打印整个栈 +void PrintStack(SqStack S) { + printf("从栈顶元素开始,栈如下:\n"); + while (S.top >= 0) {//注意判空的条件 + printf("S[%d]=%d\n", S.top, S.data[S.top--]); + } + printf("栈打印完毕\n"); +} + +//打印整个栈,初始化方式1 +void PrintStack1(SqStack S) { + printf("从栈顶元素开始,栈如下:\n"); + while (S.top > 0) {//注意判空的条件 + printf("S1[%d]=%d\n", S.top - 1, S.data[--S.top]);//初始化方式1得先移动指针再获取元素 + } + printf("栈打印完毕\n"); +} + + +void testStack() { + printf("开始测试\n"); + SqStack S; + printf("测试第一种初始化方式\n"); + InitStack(S); + if (Push(S, 1)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push(S, 2)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack(S); + int x; + if (Pop(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + PrintStack(S); + int x1; + if (GetTop(S, x1)) { + printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); + } else { + printf("读取栈顶元素失败,再检查一下吧!\n"); + } + int x4 = GetTopOther(S); + if (x4 != -1) { + printf("第二种读取栈顶元素的方式成功了,栈顶元素为:%d\n", x4); + } else { + printf("第二种读取栈顶元素的方式失败了\n"); + } + + + printf("测试第二种初始化方式\n"); + SqStack S1; + InitStack1(S1); + if (Push1(S1, 1)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push1(S1, 2)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack1(S1); + int x2; + if (Pop1(S1, x2)) { + printf("出栈成功,弹出的元素为[%d]\n", x2); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + PrintStack1(S1); + int x3; + if (GetTop1(S1, x3)) { + printf("读取栈顶元素成功了,栈顶元素为:%d\n", x3); + } else { + printf("读取栈顶元素失败,再检查一下吧!\n"); + } + int x5 = GetTopOther1(S1); + if (x5 != -1) { + printf("第二种读取栈顶元素的方式成功了,栈顶元素为:%d\n", x5); + } else { + printf("第二种读取栈顶元素的方式失败了\n"); + } + + printf("测试完毕了!\n"); +} +/**测试模块**/ + +int main() { + printf("Hello, SqStack!"); + testStack(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_1_ShStack.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_1_ShStack.cpp index 0353fc4..c29685d 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_1_ShStack.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_1_ShStack.cpp @@ -1,178 +1,178 @@ -// -// Created by kim on 2020/7/28. -// Copyright (c) Kim Yang All rights reserved. -// - -//共享顺序栈的实现 -//简单来说就是两个栈共享一片存储空间,提高顺序栈的对存储空间的使用率 -#include - -/**定义模块**/ -# define MaxSize 10 -typedef struct { - int data[MaxSize]; - int top0; - int top1; -} ShStack; -//从结构体的定义就可以看出来,两个共享栈的根源就在于定义两个指针 - -//函数声明 -void InitStack(ShStack &S);//初始化 -bool Push0(ShStack &S, int t);//入栈0 -bool Push1(ShStack &S, int t);//入栈1 -bool Pop0(ShStack &S, int &x);//出栈,并打印出栈顶元素 -bool Pop1(ShStack &S, int &x);//出栈1 -bool GetTop0(ShStack S, int &x);//读取栈顶元素,栈0 -bool GetTop1(ShStack S, int &x);//栈1 -/**定义模块**/ - -/**实现模块**/ -//初始化 -void InitStack(ShStack &S) { - S.top0 = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 - S.top1 = MaxSize;//这里的MaxSize就是所谓的第二个栈的栈底 - //可以根据顺序栈的第二种初试化方式,思考一下这种共享顺序栈的第二种初始化方式 - //S.top0=0 - //S.top1=MaxSize-1 -} - - -//入栈0 -bool Push0(ShStack &S, int t) { - if (S.top0 + 1 == S.top1)return false;//注意共享栈满的条件 - S.data[++S.top0] = t;//仔细品味一下这个++S.top - return true; -} - -//入栈1 -bool Push1(ShStack &S, int t) { - if (S.top0 + 1 == S.top1)return false;//注意共享栈满的条件 - S.data[--S.top1] = t;//仔细品味一下这个--S.top,想想为什么? - return true; -} - - -//出栈,并打印出栈顶元素 -bool Pop0(ShStack &S, int &x) { - //判断 - if (S.top0 == -1)return false;//栈空报错 - x = S.data[S.top0--]; -// 等价于下面 -// x=S.data[S.top];//先取元素 -// S.top -=1;//再改指针 - return true; -} - -//出栈1 -bool Pop1(ShStack &S, int &x) { - //判断 - if (S.top1 == MaxSize)return false;//注意一下它的栈空报错条件 - x = S.data[S.top1++];//注意这个栈修改指针是++ -// 等价于下面 -// x=S.data[S.top];//先取元素 -// S.top +=1;//再改指针 - return true; -} - -//读取栈顶元素,栈0 -bool GetTop0(ShStack S, int &x) { - if (S.top0 == -1)return false; - x = S.data[S.top0]; - return true; -} - -//栈1 -bool GetTop1(ShStack S, int &x) { - if (S.top1 == MaxSize)return false; - x = S.data[S.top1]; - return true; -} -/**实现模块**/ - -/**测试模块**/ -//打印整个栈,栈0 -void PrintStack0(ShStack S) { - printf("从栈顶元素开始,栈如下:\n"); - while (S.top0 > -1) {//注意判空的条件 - printf("S[%d]=%d\n", S.top0, S.data[S.top0--]); - } - printf("栈打印完毕\n"); -} - -//打印整个栈 -void PrintStack1(ShStack S) { - printf("从栈顶元素开始,栈如下:\n"); - while (S.top1 < MaxSize) {//注意判空的条件 - printf("S[%d]=%d\n", S.top1, S.data[S.top1++]); - } - printf("栈打印完毕\n"); -} - -void testShStack() { - printf("开始测试\n"); - ShStack S; - InitStack(S); - printf("测试第一个栈\n"); - if (Push0(S, 1)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push0(S, 2)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack0(S); - int x; - if (Pop0(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - PrintStack0(S); - int x1; - if (GetTop0(S, x1)) { - printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); - } else { - printf("读取栈顶元素失败,再检查一下吧!\n"); - } - - - printf("测试第二个栈\n"); - if (Push1(S, 10)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push1(S, 9)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack1(S); - int x3; - if (Pop1(S, x3)) { - printf("出栈成功,弹出的元素为:%d\n", x3); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - PrintStack1(S); - int x4; - if (GetTop1(S, x4)) { - printf("读取栈顶元素成功了,栈顶元素为:%d\n", x4); - } else { - printf("读取栈顶元素失败,再检查一下吧!\n"); - } - - - printf("测试完毕了!\n"); -} - -/**测试模块**/ - -int main() { - printf("Hello, ShStack!"); - testShStack(); - return 0; +// +// Created by kim on 2020/7/28. +// Copyright (c) Kim Yang All rights reserved. +// + +//共享顺序栈的实现 +//简单来说就是两个栈共享一片存储空间,提高顺序栈的对存储空间的使用率 +#include + +/**定义模块**/ +# define MaxSize 10 +typedef struct { + int data[MaxSize]; + int top0; + int top1; +} ShStack; +//从结构体的定义就可以看出来,两个共享栈的根源就在于定义两个指针 + +//函数声明 +void InitStack(ShStack &S);//初始化 +bool Push0(ShStack &S, int t);//入栈0 +bool Push1(ShStack &S, int t);//入栈1 +bool Pop0(ShStack &S, int &x);//出栈,并打印出栈顶元素 +bool Pop1(ShStack &S, int &x);//出栈1 +bool GetTop0(ShStack S, int &x);//读取栈顶元素,栈0 +bool GetTop1(ShStack S, int &x);//栈1 +/**定义模块**/ + +/**实现模块**/ +//初始化 +void InitStack(ShStack &S) { + S.top0 = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 + S.top1 = MaxSize;//这里的MaxSize就是所谓的第二个栈的栈底 + //可以根据顺序栈的第二种初试化方式,思考一下这种共享顺序栈的第二种初始化方式 + //S.top0=0 + //S.top1=MaxSize-1 +} + + +//入栈0 +bool Push0(ShStack &S, int t) { + if (S.top0 + 1 == S.top1)return false;//注意共享栈满的条件 + S.data[++S.top0] = t;//仔细品味一下这个++S.top + return true; +} + +//入栈1 +bool Push1(ShStack &S, int t) { + if (S.top0 + 1 == S.top1)return false;//注意共享栈满的条件 + S.data[--S.top1] = t;//仔细品味一下这个--S.top,想想为什么? + return true; +} + + +//出栈,并打印出栈顶元素 +bool Pop0(ShStack &S, int &x) { + //判断 + if (S.top0 == -1)return false;//栈空报错 + x = S.data[S.top0--]; +// 等价于下面 +// x=S.data[S.top];//先取元素 +// S.top -=1;//再改指针 + return true; +} + +//出栈1 +bool Pop1(ShStack &S, int &x) { + //判断 + if (S.top1 == MaxSize)return false;//注意一下它的栈空报错条件 + x = S.data[S.top1++];//注意这个栈修改指针是++ +// 等价于下面 +// x=S.data[S.top];//先取元素 +// S.top +=1;//再改指针 + return true; +} + +//读取栈顶元素,栈0 +bool GetTop0(ShStack S, int &x) { + if (S.top0 == -1)return false; + x = S.data[S.top0]; + return true; +} + +//栈1 +bool GetTop1(ShStack S, int &x) { + if (S.top1 == MaxSize)return false; + x = S.data[S.top1]; + return true; +} +/**实现模块**/ + +/**测试模块**/ +//打印整个栈,栈0 +void PrintStack0(ShStack S) { + printf("从栈顶元素开始,栈如下:\n"); + while (S.top0 > -1) {//注意判空的条件 + printf("S[%d]=%d\n", S.top0, S.data[S.top0--]); + } + printf("栈打印完毕\n"); +} + +//打印整个栈 +void PrintStack1(ShStack S) { + printf("从栈顶元素开始,栈如下:\n"); + while (S.top1 < MaxSize) {//注意判空的条件 + printf("S[%d]=%d\n", S.top1, S.data[S.top1++]); + } + printf("栈打印完毕\n"); +} + +void testShStack() { + printf("开始测试\n"); + ShStack S; + InitStack(S); + printf("测试第一个栈\n"); + if (Push0(S, 1)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push0(S, 2)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack0(S); + int x; + if (Pop0(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + PrintStack0(S); + int x1; + if (GetTop0(S, x1)) { + printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); + } else { + printf("读取栈顶元素失败,再检查一下吧!\n"); + } + + + printf("测试第二个栈\n"); + if (Push1(S, 10)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push1(S, 9)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack1(S); + int x3; + if (Pop1(S, x3)) { + printf("出栈成功,弹出的元素为:%d\n", x3); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + PrintStack1(S); + int x4; + if (GetTop1(S, x4)) { + printf("读取栈顶元素成功了,栈顶元素为:%d\n", x4); + } else { + printf("读取栈顶元素失败,再检查一下吧!\n"); + } + + + printf("测试完毕了!\n"); +} + +/**测试模块**/ + +int main() { + printf("Hello, ShStack!"); + testShStack(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_2_LiStack.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_2_LiStack.cpp index 9f35271..9148340 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_2_LiStack.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_2_LiStack.cpp @@ -1,130 +1,130 @@ -// -// Created by kim on 2020/7/28. -// Copyright (c) Kim Yang All rights reserved. -// - -//链栈的实现 -#include -#include - -/**定义模块**/ -# define MaxSize 10 -typedef struct LinkNode { - int data; - struct LinkNode *next; -} *LinkStack; - -//函数声明 -bool InitStack(LinkStack &LS);//初始化 -bool Push(LinkStack &LS, int t);//入栈 参考头插法建立单链表 -bool Pop(LinkStack &LS, int &x);//出栈,并打印出栈顶元素 -bool GetTop(LinkStack LS, int &x);//读取栈顶元素,栈 - -/**定义模块**/ - -/**实现模块**/ - -bool InitStack(LinkStack &LS) { - LS = (LinkNode *) malloc(sizeof(LinkNode));//分配一个头节点 - if (LS == NULL) { - return false; - } - LS->next = NULL; - return true; -} - -bool Push(LinkStack &LS, int t) { - //入站不需要检查 - LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); - if (s == NULL)return false; - s->data = t; - s->next = LS->next; - LS->next = s; - return true; -} - -bool Pop(LinkStack &LS, int &x) { - //判断 - if (LS->next == NULL)return false;//栈空,这里的条件 - LinkNode *q; - q = LS->next; - LS->next = q->next; - x = q->data; - free(q); - return true; -} - -bool GetTop(LinkStack LS, int &x) { - if (LS == NULL)return false; - x = LS->next->data; - return true; -} - -/**实现模块**/ - -/**测试模块**/ -//打印整个栈,栈 -void PrintStack(LinkStack LS) { - printf("从栈顶元素开始,栈如下:\n"); - int i = 0; - int x; - LinkNode *p = LS->next; - while (p != NULL) {//注意判空的条件 - printf("S[%d]=%d\n", i, p->data); - p = p->next; - i++; - } - printf("栈打印完毕\n"); -} - -void testLinkStack() { - printf("开始测试\n"); - LinkStack S; - InitStack(S); - printf("测试第一个栈\n"); - if (Push(S, 1)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push(S, 2)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack(S); - int x; - if (Pop(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - - PrintStack(S); - int x1; - if (GetTop(S, x1)) { - printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); - } else { - printf("读取栈顶元素失败,再检查一下吧!\n"); - } - - if (Pop(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - if (Pop(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - - printf("测试完毕了!\n"); -} -/**测试模块**/ - -int main() { - printf("Hello, LinkNode!"); - testLinkStack(); - return 0; +// +// Created by kim on 2020/7/28. +// Copyright (c) Kim Yang All rights reserved. +// + +//链栈的实现 +#include +#include + +/**定义模块**/ +# define MaxSize 10 +typedef struct LinkNode { + int data; + struct LinkNode *next; +} *LinkStack; + +//函数声明 +bool InitStack(LinkStack &LS);//初始化 +bool Push(LinkStack &LS, int t);//入栈 参考头插法建立单链表 +bool Pop(LinkStack &LS, int &x);//出栈,并打印出栈顶元素 +bool GetTop(LinkStack LS, int &x);//读取栈顶元素,栈 + +/**定义模块**/ + +/**实现模块**/ + +bool InitStack(LinkStack &LS) { + LS = (LinkNode *) malloc(sizeof(LinkNode));//分配一个头节点 + if (LS == NULL) { + return false; + } + LS->next = NULL; + return true; +} + +bool Push(LinkStack &LS, int t) { + //入站不需要检查 + LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); + if (s == NULL)return false; + s->data = t; + s->next = LS->next; + LS->next = s; + return true; +} + +bool Pop(LinkStack &LS, int &x) { + //判断 + if (LS->next == NULL)return false;//栈空,这里的条件 + LinkNode *q; + q = LS->next; + LS->next = q->next; + x = q->data; + free(q); + return true; +} + +bool GetTop(LinkStack LS, int &x) { + if (LS == NULL)return false; + x = LS->next->data; + return true; +} + +/**实现模块**/ + +/**测试模块**/ +//打印整个栈,栈 +void PrintStack(LinkStack LS) { + printf("从栈顶元素开始,栈如下:\n"); + int i = 0; + int x; + LinkNode *p = LS->next; + while (p != NULL) {//注意判空的条件 + printf("S[%d]=%d\n", i, p->data); + p = p->next; + i++; + } + printf("栈打印完毕\n"); +} + +void testLinkStack() { + printf("开始测试\n"); + LinkStack S; + InitStack(S); + printf("测试第一个栈\n"); + if (Push(S, 1)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push(S, 2)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack(S); + int x; + if (Pop(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + + PrintStack(S); + int x1; + if (GetTop(S, x1)) { + printf("读取栈顶元素成功了,栈顶元素为:%d\n", x1); + } else { + printf("读取栈顶元素失败,再检查一下吧!\n"); + } + + if (Pop(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + if (Pop(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + + printf("测试完毕了!\n"); +} +/**测试模块**/ + +int main() { + printf("Hello, LinkNode!"); + testLinkStack(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp index c075e83..2ac7ee5 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_3_SqQueue0.cpp @@ -1,116 +1,116 @@ -// -// Created by kim yang on 2020/7/31. -// Copyright (c) Kim Yang All rights reserved. -// - -//循环顺序队列的第一种实现方式 - -#include - -/**定义模块**/ -#define MaxSize 10 - -typedef struct { - int data[MaxSize];// - int front, rear;//对头指针和队尾指针 -} SqQueue; - -//函数声明 - -void InitQueue(SqQueue &Q);//初始化 -bool QueueEmpty(SqQueue Q);//判空 -bool EnQueue(SqQueue &Q, int t);//入队操作 -bool DeQueue(SqQueue &Q, int &x);//出队操作 -bool GetHead(SqQueue Q, int &x);//获取队头元素,用x返回 - -/**定义模块**/ - -/**实现模块**/ - -void InitQueue(SqQueue &Q) { - Q.rear = Q.front = 0;//初始化时,队头队尾都指向0 -} - -bool QueueEmpty(SqQueue Q) { - if (Q.front == Q.rear) - return true; - else - return true; -} - -bool EnQueue(SqQueue &Q, int t) { - if ((Q.rear + 1) % MaxSize == Q.front)return false;//队满,注意这里的判满条件 - //这里的判满条件会造成浪费一个存储空间的问题 - Q.data[Q.rear] = t; - Q.rear = (Q.rear + 1) % MaxSize;//通过取余操作让整个队列循环起来 - return true; -} - -bool DeQueue(SqQueue &Q, int &x) { - if (Q.rear == Q.front)return false;//队空 - x = Q.data[Q.front]; - Q.front = (Q.front + 1) % MaxSize; - return true; -} - -bool GetHead(SqQueue Q, int &x) { - if (Q.front == Q.rear)return false; - x = Q.data[Q.front]; - return true; -} - -/**实现模块**/ - -/**测试模块**/ -//打印整个队列 -void PrintQueue(SqQueue Q) { - printf("开始打印队列\n"); - while (Q.front != Q.rear) { - printf("Q[%d]=%d\n", Q.front, Q.data[Q.front]); - Q.front = (Q.front + 1) % MaxSize; - } - printf("打印完毕!\n"); -} - -//测试 -void TestQueue() { - printf("开始测试!\n"); - SqQueue Q; - InitQueue(Q); - if (EnQueue(Q, 1)) { - printf("入队成功啦!\n"); - } else { - printf("入队失败了\n"); - } - if (EnQueue(Q, 2)) { - printf("入队又成功啦!\n"); - } else { - printf("入队又失败了\n"); - } - PrintQueue(Q); - int x; - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (GetHead(Q, x)) { - printf("获取队头成功!,队头元素为:%d\n", x); - } else { - printf("获取队头元素失败!"); - } - if (QueueEmpty(Q)) { - printf("队空啦\n"); - } else { - printf("队非空\n"); - } - - printf("结束测试!\n"); -} -/**测试模块**/ - -int main() { - TestQueue(); - return 0; -} - +// +// Created by kim yang on 2020/7/31. +// Copyright (c) Kim Yang All rights reserved. +// + +//循环顺序队列的第一种实现方式 + +#include + +/**定义模块**/ +#define MaxSize 10 + +typedef struct { + int data[MaxSize];// + int front, rear;//对头指针和队尾指针 +} SqQueue; + +//函数声明 + +void InitQueue(SqQueue &Q);//初始化 +bool QueueEmpty(SqQueue Q);//判空 +bool EnQueue(SqQueue &Q, int t);//入队操作 +bool DeQueue(SqQueue &Q, int &x);//出队操作 +bool GetHead(SqQueue Q, int &x);//获取队头元素,用x返回 + +/**定义模块**/ + +/**实现模块**/ + +void InitQueue(SqQueue &Q) { + Q.rear = Q.front = 0;//初始化时,队头队尾都指向0 +} + +bool QueueEmpty(SqQueue Q) { + if (Q.front == Q.rear) + return true; + else + return true; +} + +bool EnQueue(SqQueue &Q, int t) { + if ((Q.rear + 1) % MaxSize == Q.front)return false;//队满,注意这里的判满条件 + //这里的判满条件会造成浪费一个存储空间的问题 + Q.data[Q.rear] = t; + Q.rear = (Q.rear + 1) % MaxSize;//通过取余操作让整个队列循环起来 + return true; +} + +bool DeQueue(SqQueue &Q, int &x) { + if (Q.rear == Q.front)return false;//队空 + x = Q.data[Q.front]; + Q.front = (Q.front + 1) % MaxSize; + return true; +} + +bool GetHead(SqQueue Q, int &x) { + if (Q.front == Q.rear)return false; + x = Q.data[Q.front]; + return true; +} + +/**实现模块**/ + +/**测试模块**/ +//打印整个队列 +void PrintQueue(SqQueue Q) { + printf("开始打印队列\n"); + while (Q.front != Q.rear) { + printf("Q[%d]=%d\n", Q.front, Q.data[Q.front]); + Q.front = (Q.front + 1) % MaxSize; + } + printf("打印完毕!\n"); +} + +//测试 +void TestQueue() { + printf("开始测试!\n"); + SqQueue Q; + InitQueue(Q); + if (EnQueue(Q, 1)) { + printf("入队成功啦!\n"); + } else { + printf("入队失败了\n"); + } + if (EnQueue(Q, 2)) { + printf("入队又成功啦!\n"); + } else { + printf("入队又失败了\n"); + } + PrintQueue(Q); + int x; + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (GetHead(Q, x)) { + printf("获取队头成功!,队头元素为:%d\n", x); + } else { + printf("获取队头元素失败!"); + } + if (QueueEmpty(Q)) { + printf("队空啦\n"); + } else { + printf("队非空\n"); + } + + printf("结束测试!\n"); +} +/**测试模块**/ + +int main() { + TestQueue(); + return 0; +} + diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp index 2ff5244..2f946c8 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_4_SqQueue1.cpp @@ -1,120 +1,120 @@ -// -// Created by kim yang on 2020/8/1. -// Copyright (c) Kim Yang All rights reserved. -// - -//循环顺序队列的第二种实现方式 - -#include - -/**定义模块**/ -#define MaxSize 10 - -typedef struct { - int data[MaxSize];// - int front, rear;//对头指针和队尾指针 - int size;//利用size变量记录队列长度,并用作判满的条件!有了size就不会浪费一个存储空间 -} SqQueue; - -//函数声明 -void InitQueue(SqQueue &Q);//初始化 -bool QueueEmpty(SqQueue Q);//判空 -bool EnQueue(SqQueue &Q, int t);//入队操作 -bool DeQueue(SqQueue &Q, int &x);//出队操作 -bool GetHead(SqQueue Q, int &x);//获取队头元素,用x返回 -/**定义模块**/ - -/**实现模块**/ -void InitQueue(SqQueue &Q) { - Q.rear = Q.front = 0;//初始化时,队头队尾都指向0 - Q.size = 0;//初试长度 -} - -bool QueueEmpty(SqQueue Q) { - if (Q.size == 0)//有了size,条件不一样了 - return true; - else - return true; -} - -bool EnQueue(SqQueue &Q, int t) { - if (Q.size == MaxSize)return false;//队满,注意这里的判满条件 - Q.data[Q.rear] = t; - Q.rear = (Q.rear + 1) % MaxSize;//通过取余操作让整个队列循环起来 - Q.size++; - return true; -} - -bool DeQueue(SqQueue &Q, int &x) { - if (Q.size == 0)return false;//队空 - x = Q.data[Q.front]; - Q.front = (Q.front + 1) % MaxSize; - Q.size--; - return true; -} - -bool GetHead(SqQueue Q, int &x) { - if (Q.size == 0)return false; - x = Q.data[Q.front]; - return true; -} -/**实现模块**/ - -/**测试模块**/ -//打印整个队列 -void PrintQueue(SqQueue Q) { - printf("开始打印队列\n"); - while (Q.front != Q.rear) { - printf("Q[%d]=%d\n", Q.front, Q.data[Q.front]); - Q.front = (Q.front + 1) % MaxSize; - } - printf("打印完毕!\n"); -} - -//测试 -void TestQueue() { - printf("开始测试!\n"); - SqQueue Q; - InitQueue(Q); - if (EnQueue(Q, 1)) { - printf("入队成功啦!\n"); - } else { - printf("入队失败了\n"); - } - if (EnQueue(Q, 2)) { - printf("入队又成功啦!\n"); - } else { - printf("入队又失败了\n"); - } - PrintQueue(Q); - int x; - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (GetHead(Q, x)) { - printf("获取队头成功!,队头元素为:%d\n", x); - } else { - printf("获取队头元素失败!\n"); - } - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (QueueEmpty(Q)) { - printf("队空啦\n"); - } else { - printf("队非空\n"); - } - - - printf("结束测试!\n"); -} -/**测试模块**/ - -int main() { - TestQueue(); - return 0; +// +// Created by kim yang on 2020/8/1. +// Copyright (c) Kim Yang All rights reserved. +// + +//循环顺序队列的第二种实现方式 + +#include + +/**定义模块**/ +#define MaxSize 10 + +typedef struct { + int data[MaxSize];// + int front, rear;//对头指针和队尾指针 + int size;//利用size变量记录队列长度,并用作判满的条件!有了size就不会浪费一个存储空间 +} SqQueue; + +//函数声明 +void InitQueue(SqQueue &Q);//初始化 +bool QueueEmpty(SqQueue Q);//判空 +bool EnQueue(SqQueue &Q, int t);//入队操作 +bool DeQueue(SqQueue &Q, int &x);//出队操作 +bool GetHead(SqQueue Q, int &x);//获取队头元素,用x返回 +/**定义模块**/ + +/**实现模块**/ +void InitQueue(SqQueue &Q) { + Q.rear = Q.front = 0;//初始化时,队头队尾都指向0 + Q.size = 0;//初试长度 +} + +bool QueueEmpty(SqQueue Q) { + if (Q.size == 0)//有了size,条件不一样了 + return true; + else + return true; +} + +bool EnQueue(SqQueue &Q, int t) { + if (Q.size == MaxSize)return false;//队满,注意这里的判满条件 + Q.data[Q.rear] = t; + Q.rear = (Q.rear + 1) % MaxSize;//通过取余操作让整个队列循环起来 + Q.size++; + return true; +} + +bool DeQueue(SqQueue &Q, int &x) { + if (Q.size == 0)return false;//队空 + x = Q.data[Q.front]; + Q.front = (Q.front + 1) % MaxSize; + Q.size--; + return true; +} + +bool GetHead(SqQueue Q, int &x) { + if (Q.size == 0)return false; + x = Q.data[Q.front]; + return true; +} +/**实现模块**/ + +/**测试模块**/ +//打印整个队列 +void PrintQueue(SqQueue Q) { + printf("开始打印队列\n"); + while (Q.front != Q.rear) { + printf("Q[%d]=%d\n", Q.front, Q.data[Q.front]); + Q.front = (Q.front + 1) % MaxSize; + } + printf("打印完毕!\n"); +} + +//测试 +void TestQueue() { + printf("开始测试!\n"); + SqQueue Q; + InitQueue(Q); + if (EnQueue(Q, 1)) { + printf("入队成功啦!\n"); + } else { + printf("入队失败了\n"); + } + if (EnQueue(Q, 2)) { + printf("入队又成功啦!\n"); + } else { + printf("入队又失败了\n"); + } + PrintQueue(Q); + int x; + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (GetHead(Q, x)) { + printf("获取队头成功!,队头元素为:%d\n", x); + } else { + printf("获取队头元素失败!\n"); + } + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (QueueEmpty(Q)) { + printf("队空啦\n"); + } else { + printf("队非空\n"); + } + + + printf("结束测试!\n"); +} +/**测试模块**/ + +int main() { + TestQueue(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp index da5d0f7..9183d27 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_5_SqQueue2.cpp @@ -1,121 +1,121 @@ -// -// Created by kim yang on 2020/8/1. -// Copyright (c) Kim Yang All rights reserved. -// - -//循环顺序队列的第二种实现方式 - -#include - -/**定义模块**/ -#define MaxSize 10 - -typedef struct { - int data[MaxSize];// - int front,rear;//对头指针和队尾指针 - int tag;//利用tag变量记录最后一次操作是什么,0为删除,1为插入,并用作判满的条件!有了tag就不会浪费一个存储空间 -}SqQueue; - -//函数声明 -void InitQueue(SqQueue &Q);//初始化 -bool QueueEmpty(SqQueue Q);//判空 -bool EnQueue(SqQueue &Q,int t);//入队操作 -bool DeQueue(SqQueue &Q,int &x);//出队操作 -bool GetHead(SqQueue Q,int &x);//获取队头元素,用x返回 -/**定义模块**/ - -/**实现模块**/ - - -void InitQueue(SqQueue &Q) { - Q.rear=Q.front=0;//初始化时,队头队尾都指向0 - Q.tag=0;//初始化最后一次的操作状态 -} - -bool QueueEmpty(SqQueue Q) { - if(Q.front==Q.rear&&Q.tag==0)//有了tag,条件不一样了 - return true; - else - return true; -} - -bool EnQueue(SqQueue &Q, int t) { - if(Q.front==Q.rear&&Q.tag==1)return false;//队满,注意这里的判满条件 - Q.data[Q.rear]=t; - Q.rear=(Q.rear+1)%MaxSize;//通过取余操作让整个队列循环起来 - Q.tag=1; - return true; -} - -bool DeQueue(SqQueue &Q, int &x) { - if(Q.rear==Q.front&&Q.tag==0)return false;//队空 - x=Q.data[Q.front]; - Q.front=(Q.front+1)%MaxSize; - Q.tag==0; - return true; -} - -bool GetHead(SqQueue Q, int &x) { - if (Q.rear==Q.front&&Q.tag==0)return false; - x=Q.data[Q.front]; - return true; -} -/**实现模块**/ - -/**测试模块**/ -//打印整个队列 -void PrintQueue(SqQueue Q){ - printf("开始打印队列\n"); - while(Q.front!=Q.rear){ - printf("Q[%d]=%d\n",Q.front,Q.data[Q.front]); - Q.front=(Q.front+1)%MaxSize; - } - printf("打印完毕!\n"); -} - -//测试 -void TestQueue(){ - printf("开始测试!\n"); - SqQueue Q; - InitQueue(Q); - if (EnQueue(Q, 1)) { - printf("入队成功啦!\n"); - } else { - printf("入队失败了\n"); - } - if (EnQueue(Q, 2)) { - printf("入队又成功啦!\n"); - } else { - printf("入队又失败了\n"); - } - PrintQueue(Q); - int x; - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (GetHead(Q, x)) { - printf("获取队头成功!,队头元素为:%d\n", x); - } else { - printf("获取队头元素失败!\n"); - } - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (QueueEmpty(Q)) { - printf("队空啦\n"); - } else { - printf("队非空\n"); - } - - printf("结束测试!\n"); -} -/**测试模块**/ - -int main(){ - TestQueue(); - return 0; +// +// Created by kim yang on 2020/8/1. +// Copyright (c) Kim Yang All rights reserved. +// + +//循环顺序队列的第二种实现方式 + +#include + +/**定义模块**/ +#define MaxSize 10 + +typedef struct { + int data[MaxSize];// + int front,rear;//对头指针和队尾指针 + int tag;//利用tag变量记录最后一次操作是什么,0为删除,1为插入,并用作判满的条件!有了tag就不会浪费一个存储空间 +}SqQueue; + +//函数声明 +void InitQueue(SqQueue &Q);//初始化 +bool QueueEmpty(SqQueue Q);//判空 +bool EnQueue(SqQueue &Q,int t);//入队操作 +bool DeQueue(SqQueue &Q,int &x);//出队操作 +bool GetHead(SqQueue Q,int &x);//获取队头元素,用x返回 +/**定义模块**/ + +/**实现模块**/ + + +void InitQueue(SqQueue &Q) { + Q.rear=Q.front=0;//初始化时,队头队尾都指向0 + Q.tag=0;//初始化最后一次的操作状态 +} + +bool QueueEmpty(SqQueue Q) { + if(Q.front==Q.rear&&Q.tag==0)//有了tag,条件不一样了 + return true; + else + return true; +} + +bool EnQueue(SqQueue &Q, int t) { + if(Q.front==Q.rear&&Q.tag==1)return false;//队满,注意这里的判满条件 + Q.data[Q.rear]=t; + Q.rear=(Q.rear+1)%MaxSize;//通过取余操作让整个队列循环起来 + Q.tag=1; + return true; +} + +bool DeQueue(SqQueue &Q, int &x) { + if(Q.rear==Q.front&&Q.tag==0)return false;//队空 + x=Q.data[Q.front]; + Q.front=(Q.front+1)%MaxSize; + Q.tag==0; + return true; +} + +bool GetHead(SqQueue Q, int &x) { + if (Q.rear==Q.front&&Q.tag==0)return false; + x=Q.data[Q.front]; + return true; +} +/**实现模块**/ + +/**测试模块**/ +//打印整个队列 +void PrintQueue(SqQueue Q){ + printf("开始打印队列\n"); + while(Q.front!=Q.rear){ + printf("Q[%d]=%d\n",Q.front,Q.data[Q.front]); + Q.front=(Q.front+1)%MaxSize; + } + printf("打印完毕!\n"); +} + +//测试 +void TestQueue(){ + printf("开始测试!\n"); + SqQueue Q; + InitQueue(Q); + if (EnQueue(Q, 1)) { + printf("入队成功啦!\n"); + } else { + printf("入队失败了\n"); + } + if (EnQueue(Q, 2)) { + printf("入队又成功啦!\n"); + } else { + printf("入队又失败了\n"); + } + PrintQueue(Q); + int x; + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (GetHead(Q, x)) { + printf("获取队头成功!,队头元素为:%d\n", x); + } else { + printf("获取队头元素失败!\n"); + } + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (QueueEmpty(Q)) { + printf("队空啦\n"); + } else { + printf("队非空\n"); + } + + printf("结束测试!\n"); +} +/**测试模块**/ + +int main(){ + TestQueue(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_6_LiQueue0.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_6_LiQueue0.cpp index a156579..75cbec9 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_6_LiQueue0.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_6_LiQueue0.cpp @@ -1,125 +1,125 @@ -// -// Created by kim yang on 2020/8/2. -// Copyright (c) Kim Yang All rights reserved. -// - -//链式队列(带头节点版本) - -#include -#include - -/**定义模块**/ -typedef struct LinkNode { - int data; - struct LinkNode *next; -} LinkNode; - -typedef struct { - LinkNode *front, *rear; -} LinkQueue; - -//函数声明 -void InitQueue(LinkQueue &Q);//初始化 -bool EnQueue(LinkQueue &Q, int x);//入队操作 -bool DeQueue(LinkQueue &Q, int &x);//出队 -bool GetHead(LinkQueue Q, int &x);//获取头元素 -bool QueueEmpty(LinkQueue Q);//判空 -/**定义模块**/ - -/**实现模块**/ -void InitQueue(LinkQueue &Q) { - Q.front = Q.rear = (LinkNode *) malloc(sizeof(LinkNode)); - //初始化时,front 、rear 都指向头节点 - Q.front->next = NULL; -} - -bool EnQueue(LinkQueue &Q, int x) { - //判满?链式存储一般不需要判满,除非内存不足 - LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); - if (s == NULL)return false; - s->data = x; - s->next = NULL; - Q.rear->next = s;//新节点插入到rear之后 - Q.rear = s;//修改表尾指针 - return true; -} - -bool DeQueue(LinkQueue &Q, int &x) { - if (Q.front == Q.rear)return false;//队空 - LinkNode *p = Q.front->next;//用指针p记录队头元素 - x = p->data;//用x变量返回队头元素 - Q.front->next = p->next;//修改头节点的next指针 - if (Q.rear == p)//此次是最后一个节点出队 - Q.rear = Q.front;//修改rear指针,思考一下为什么? - free(p); //释放节点空间 - return true; -} - -bool GetHead(LinkQueue Q, int &x) { - if (Q.front == Q.rear)return false;//队空 - x = Q.front->next->data;//用x变量返回队头元素 - return true; -} - -bool QueueEmpty(LinkQueue Q) { - return Q.front == Q.rear ? true : false; -} -/**实现模块**/ - -/**测试模块**/ -void PrintQueue(LinkQueue Q) { - printf("开始打印队列\n"); - int i = 0; - while (Q.front != Q.rear) { - Q.front = Q.front->next; - printf("Q[%d]=%d\n", i++, Q.front->data); - } - printf("打印完毕!\n"); -} - -//测试函数 -void TestLinkQueue() { - printf("开始测试!\n"); - LinkQueue Q; - InitQueue(Q); - if (EnQueue(Q, 1)) { - printf("入队成功啦!\n"); - } else { - printf("入队失败了\n"); - } - if (EnQueue(Q, 2)) { - printf("入队又成功啦!\n"); - } else { - printf("入队又失败了\n"); - } - PrintQueue(Q); - int x; - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (GetHead(Q, x)) { - printf("获取队头成功!,队头元素为:%d\n", x); - } else { - printf("获取队头元素失败!\n"); - } - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (QueueEmpty(Q)) { - printf("队空啦\n"); - } else { - printf("队非空\n"); - } - - printf("测试结束!\n"); -} -/**测试模块**/ - -int main() { - TestLinkQueue(); - return 0; +// +// Created by kim yang on 2020/8/2. +// Copyright (c) Kim Yang All rights reserved. +// + +//链式队列(带头节点版本) + +#include +#include + +/**定义模块**/ +typedef struct LinkNode { + int data; + struct LinkNode *next; +} LinkNode; + +typedef struct { + LinkNode *front, *rear; +} LinkQueue; + +//函数声明 +void InitQueue(LinkQueue &Q);//初始化 +bool EnQueue(LinkQueue &Q, int x);//入队操作 +bool DeQueue(LinkQueue &Q, int &x);//出队 +bool GetHead(LinkQueue Q, int &x);//获取头元素 +bool QueueEmpty(LinkQueue Q);//判空 +/**定义模块**/ + +/**实现模块**/ +void InitQueue(LinkQueue &Q) { + Q.front = Q.rear = (LinkNode *) malloc(sizeof(LinkNode)); + //初始化时,front 、rear 都指向头节点 + Q.front->next = NULL; +} + +bool EnQueue(LinkQueue &Q, int x) { + //判满?链式存储一般不需要判满,除非内存不足 + LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); + if (s == NULL)return false; + s->data = x; + s->next = NULL; + Q.rear->next = s;//新节点插入到rear之后 + Q.rear = s;//修改表尾指针 + return true; +} + +bool DeQueue(LinkQueue &Q, int &x) { + if (Q.front == Q.rear)return false;//队空 + LinkNode *p = Q.front->next;//用指针p记录队头元素 + x = p->data;//用x变量返回队头元素 + Q.front->next = p->next;//修改头节点的next指针 + if (Q.rear == p)//此次是最后一个节点出队 + Q.rear = Q.front;//修改rear指针,思考一下为什么? + free(p); //释放节点空间 + return true; +} + +bool GetHead(LinkQueue Q, int &x) { + if (Q.front == Q.rear)return false;//队空 + x = Q.front->next->data;//用x变量返回队头元素 + return true; +} + +bool QueueEmpty(LinkQueue Q) { + return Q.front == Q.rear ? true : false; +} +/**实现模块**/ + +/**测试模块**/ +void PrintQueue(LinkQueue Q) { + printf("开始打印队列\n"); + int i = 0; + while (Q.front != Q.rear) { + Q.front = Q.front->next; + printf("Q[%d]=%d\n", i++, Q.front->data); + } + printf("打印完毕!\n"); +} + +//测试函数 +void TestLinkQueue() { + printf("开始测试!\n"); + LinkQueue Q; + InitQueue(Q); + if (EnQueue(Q, 1)) { + printf("入队成功啦!\n"); + } else { + printf("入队失败了\n"); + } + if (EnQueue(Q, 2)) { + printf("入队又成功啦!\n"); + } else { + printf("入队又失败了\n"); + } + PrintQueue(Q); + int x; + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (GetHead(Q, x)) { + printf("获取队头成功!,队头元素为:%d\n", x); + } else { + printf("获取队头元素失败!\n"); + } + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (QueueEmpty(Q)) { + printf("队空啦\n"); + } else { + printf("队非空\n"); + } + + printf("测试结束!\n"); +} +/**测试模块**/ + +int main() { + TestLinkQueue(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_7_LiQueue1.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_7_LiQueue1.cpp index f5952f1..9ffc0e4 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_7_LiQueue1.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_7_LiQueue1.cpp @@ -1,131 +1,131 @@ -// -// Created by kim yang on 2020/8/3. -// Copyright (c) Kim Yang All rights reserved. -// - -//链式队列(带头节点版本) - -#include -#include - -/**定义模块**/ - -typedef struct LinkNode { - int data; - struct LinkNode *next; -} LinkNode; - -typedef struct { - LinkNode *front, *rear; -} LinkQueue; - -//函数声明 -void InitQueue(LinkQueue &Q);//初始化 -bool EnQueue(LinkQueue &Q, int x);//入队操作 -bool DeQueue(LinkQueue &Q, int &x);//出队 -bool GetHead(LinkQueue Q, int &x);//获取队头元素 -bool QueueEmpty(LinkQueue Q);//判空 -/**定义模块**/ - -/**实现模块**/ -void InitQueue(LinkQueue &Q) { - Q.front = Q.rear = NULL; - //不带头点,初始化时,front 、rear 指向NULL -} - -bool EnQueue(LinkQueue &Q, int x) { - //判满?链式存储一般不需要判满,除非内存不足 - LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); - if (s == NULL)return false; - s->data = x; - s->next = NULL; - if (Q.front == NULL) { - //不带头节点插入第一个元素时,需要做特殊处理 - Q.rear = Q.front = s; - } else { - //非第一个元素 - Q.rear->next = s;//新节点插入到rear之后 - Q.rear = s;//修改表尾指针 - } - return true; -} - -bool DeQueue(LinkQueue &Q, int &x) { - if (Q.front == NULL&&Q.rear==NULL)return false;//队空 - LinkNode *p = Q.front;//用指针p记录队头元素 - x = p->data;//用x变量返回队头元素 - Q.front = p->next;//修改头节点的next指针 - if (Q.rear == p)//此次是最后一个节点出队 - Q.rear = Q.front = NULL;//修改rear指针,思考一下为什么?修改为判空的条件 - free(p); //释放节点空间 - return true; -} - -bool GetHead(LinkQueue Q, int &x) { - if (Q.front == NULL&&Q.rear==NULL)return false;//队空 - x = Q.front->data;//用x变量返回队头元素 - return true; -} - -bool QueueEmpty(LinkQueue Q) { - return Q.front == Q.rear ? true : false; -} -/**实现模块**/ - -/**测试模块**/ -void PrintQueue(LinkQueue Q) { - printf("开始打印队列\n"); - int i = 0; - while (Q.front != NULL&&Q.rear!=NULL) { - printf("Q[%d]=%d\n", i++, Q.front->data); - Q.front = Q.front->next; - } - printf("打印完毕!\n"); -} - -//测试函数 -void TestLinkQueue() { - printf("开始测试!\n"); - LinkQueue Q; - InitQueue(Q); - if (EnQueue(Q, 1)) { - printf("入队成功啦!\n"); - } else { - printf("入队失败了\n"); - } - if (EnQueue(Q, 2)) { - printf("入队又成功啦!\n"); - } else { - printf("入队又失败了\n"); - } - PrintQueue(Q); - int x; - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (GetHead(Q, x)) { - printf("获取队头成功!,队头元素为:%d\n", x); - } else { - printf("获取队头元素失败!\n"); - } - if (DeQueue(Q, x)) { - printf("出队成功,弹出的元素为:%d\n", x); - } else { - printf("出队失败了,再检出一下吧!\n"); - } - if (QueueEmpty(Q)) { - printf("队空啦\n"); - } else { - printf("队非空\n"); - } - - printf("测试结束!\n"); -} -/**测试模块**/ - -int main() { - TestLinkQueue(); - return 0; +// +// Created by kim yang on 2020/8/3. +// Copyright (c) Kim Yang All rights reserved. +// + +//链式队列(带头节点版本) + +#include +#include + +/**定义模块**/ + +typedef struct LinkNode { + int data; + struct LinkNode *next; +} LinkNode; + +typedef struct { + LinkNode *front, *rear; +} LinkQueue; + +//函数声明 +void InitQueue(LinkQueue &Q);//初始化 +bool EnQueue(LinkQueue &Q, int x);//入队操作 +bool DeQueue(LinkQueue &Q, int &x);//出队 +bool GetHead(LinkQueue Q, int &x);//获取队头元素 +bool QueueEmpty(LinkQueue Q);//判空 +/**定义模块**/ + +/**实现模块**/ +void InitQueue(LinkQueue &Q) { + Q.front = Q.rear = NULL; + //不带头点,初始化时,front 、rear 指向NULL +} + +bool EnQueue(LinkQueue &Q, int x) { + //判满?链式存储一般不需要判满,除非内存不足 + LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); + if (s == NULL)return false; + s->data = x; + s->next = NULL; + if (Q.front == NULL) { + //不带头节点插入第一个元素时,需要做特殊处理 + Q.rear = Q.front = s; + } else { + //非第一个元素 + Q.rear->next = s;//新节点插入到rear之后 + Q.rear = s;//修改表尾指针 + } + return true; +} + +bool DeQueue(LinkQueue &Q, int &x) { + if (Q.front == NULL&&Q.rear==NULL)return false;//队空 + LinkNode *p = Q.front;//用指针p记录队头元素 + x = p->data;//用x变量返回队头元素 + Q.front = p->next;//修改头节点的next指针 + if (Q.rear == p)//此次是最后一个节点出队 + Q.rear = Q.front = NULL;//修改rear指针,思考一下为什么?修改为判空的条件 + free(p); //释放节点空间 + return true; +} + +bool GetHead(LinkQueue Q, int &x) { + if (Q.front == NULL&&Q.rear==NULL)return false;//队空 + x = Q.front->data;//用x变量返回队头元素 + return true; +} + +bool QueueEmpty(LinkQueue Q) { + return Q.front == Q.rear ? true : false; +} +/**实现模块**/ + +/**测试模块**/ +void PrintQueue(LinkQueue Q) { + printf("开始打印队列\n"); + int i = 0; + while (Q.front != NULL&&Q.rear!=NULL) { + printf("Q[%d]=%d\n", i++, Q.front->data); + Q.front = Q.front->next; + } + printf("打印完毕!\n"); +} + +//测试函数 +void TestLinkQueue() { + printf("开始测试!\n"); + LinkQueue Q; + InitQueue(Q); + if (EnQueue(Q, 1)) { + printf("入队成功啦!\n"); + } else { + printf("入队失败了\n"); + } + if (EnQueue(Q, 2)) { + printf("入队又成功啦!\n"); + } else { + printf("入队又失败了\n"); + } + PrintQueue(Q); + int x; + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (GetHead(Q, x)) { + printf("获取队头成功!,队头元素为:%d\n", x); + } else { + printf("获取队头元素失败!\n"); + } + if (DeQueue(Q, x)) { + printf("出队成功,弹出的元素为:%d\n", x); + } else { + printf("出队失败了,再检出一下吧!\n"); + } + if (QueueEmpty(Q)) { + printf("队空啦\n"); + } else { + printf("队非空\n"); + } + + printf("测试结束!\n"); +} +/**测试模块**/ + +int main() { + TestLinkQueue(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_2_StackAndQueue/DS_2_8_QueueApplication.cpp b/DataStructure/Src/DS_2_StackAndQueue/DS_2_8_QueueApplication.cpp index 6eab01f..c864577 100644 --- a/DataStructure/Src/DS_2_StackAndQueue/DS_2_8_QueueApplication.cpp +++ b/DataStructure/Src/DS_2_StackAndQueue/DS_2_8_QueueApplication.cpp @@ -1,133 +1,133 @@ -// -// Created by kim yang on 2020/8/3. -// Copyright (c) Kim Yang All rights reserved. -// - -//栈的应用——扩号匹配问题 - -#include - -/**定义模块**/ -# define MaxSize 10 -typedef struct { - char data[MaxSize]; - int top; -} SqStack; - -//函数声明 -//以下都是基础操作定义以及实现的方式和前面一样 -void InitStack(SqStack &S);//初始化 -bool Push(SqStack &S, char t);//入栈 -bool Pop(SqStack &S, char &x);//出栈,并打印出栈顶元素 -bool StackEmpty (SqStack S);//判栈空 -//以上都是基础操作定义以及实现的方式和前面一样 -//括号匹配问题 -bool bracketCheck(char str[],int length); -/**定义模块**/ - -/**实现模块**/ -void InitStack(SqStack &S) { - S.top = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 -} - -bool Push(SqStack &S, char t) { - if (S.top == MaxSize - 1)return false;//栈满 - S.data[++S.top] = t; -// 等价下面两个语句 -// S.top+=1;//先将栈顶指针指向下一个位置 -// S.data[S.top]=t;//再填充元素 - return true; -} - -bool Pop(SqStack &S, char &x) { - //判断 - if (S.top == -1)return false;//栈空报错 - x = S.data[S.top--]; -// 等价于下面 -// x=S.data[S.top];//先取元素 -// S.top -=1;//再改指针 - return true; -} - -bool StackEmpty(SqStack S) { - return S.top==-1; -} - -bool bracketCheck(char *str, int length) { - SqStack S; - InitStack(S); - for (int i = 0; i = 0) {//注意判空的条件 - printf("S[%d]=%d\n", S.top, S.data[S.top--]); - } - printf("栈打印完毕\n"); -} - -void TestQueueApplication(){ - printf("开始测试\n"); - - /**基础操作测试**/ - - SqStack S; - printf("测试第一种初始化方式\n"); - InitStack(S); - if (Push(S, 1)) { - printf("入栈成功啦!\n"); - } else { - printf("入栈失败了\n"); - } - if (Push(S, 2)) { - printf("入栈又成功啦!\n"); - } else { - printf("入栈又失败了\n"); - } - PrintStack(S); - char x; - if (Pop(S, x)) { - printf("出栈成功,弹出的元素为:%d\n", x); - } else { - printf("出栈失败了,再检出一下吧!\n"); - } - - /**测试括号问题部分源码**/ - if(bracketCheck("[({})]",6)) - printf("字符串括号匹配成功\n"); - else - printf("字符串括号匹配失败\n"); - if(bracketCheck("[({})",5)) - printf("字符串括号匹配成功\n"); - else - printf("字符串括号匹配失败\n"); - - printf("测试完毕了!\n"); -} -/**测试模块**/ - -int main(){ - TestQueueApplication(); - return 0; -} +// +// Created by kim yang on 2020/8/3. +// Copyright (c) Kim Yang All rights reserved. +// + +//栈的应用——扩号匹配问题 + +#include + +/**定义模块**/ +# define MaxSize 10 +typedef struct { + char data[MaxSize]; + int top; +} SqStack; + +//函数声明 +//以下都是基础操作定义以及实现的方式和前面一样 +void InitStack(SqStack &S);//初始化 +bool Push(SqStack &S, char t);//入栈 +bool Pop(SqStack &S, char &x);//出栈,并打印出栈顶元素 +bool StackEmpty (SqStack S);//判栈空 +//以上都是基础操作定义以及实现的方式和前面一样 +//括号匹配问题 +bool bracketCheck(char str[],int length); +/**定义模块**/ + +/**实现模块**/ +void InitStack(SqStack &S) { + S.top = -1;//这种初始化的方式,栈顶指针始终指向栈顶元素 +} + +bool Push(SqStack &S, char t) { + if (S.top == MaxSize - 1)return false;//栈满 + S.data[++S.top] = t; +// 等价下面两个语句 +// S.top+=1;//先将栈顶指针指向下一个位置 +// S.data[S.top]=t;//再填充元素 + return true; +} + +bool Pop(SqStack &S, char &x) { + //判断 + if (S.top == -1)return false;//栈空报错 + x = S.data[S.top--]; +// 等价于下面 +// x=S.data[S.top];//先取元素 +// S.top -=1;//再改指针 + return true; +} + +bool StackEmpty(SqStack S) { + return S.top==-1; +} + +bool bracketCheck(char *str, int length) { + SqStack S; + InitStack(S); + for (int i = 0; i = 0) {//注意判空的条件 + printf("S[%d]=%d\n", S.top, S.data[S.top--]); + } + printf("栈打印完毕\n"); +} + +void TestQueueApplication(){ + printf("开始测试\n"); + + /**基础操作测试**/ + + SqStack S; + printf("测试第一种初始化方式\n"); + InitStack(S); + if (Push(S, 1)) { + printf("入栈成功啦!\n"); + } else { + printf("入栈失败了\n"); + } + if (Push(S, 2)) { + printf("入栈又成功啦!\n"); + } else { + printf("入栈又失败了\n"); + } + PrintStack(S); + char x; + if (Pop(S, x)) { + printf("出栈成功,弹出的元素为:%d\n", x); + } else { + printf("出栈失败了,再检出一下吧!\n"); + } + + /**测试括号问题部分源码**/ + if(bracketCheck("[({})]",6)) + printf("字符串括号匹配成功\n"); + else + printf("字符串括号匹配失败\n"); + if(bracketCheck("[({})",5)) + printf("字符串括号匹配成功\n"); + else + printf("字符串括号匹配失败\n"); + + printf("测试完毕了!\n"); +} +/**测试模块**/ + +int main(){ + TestQueueApplication(); + return 0; +} diff --git a/DataStructure/Src/DS_3_String/DS_3_0_SString.cpp b/DataStructure/Src/DS_3_String/DS_3_0_SString.cpp index 1d8a510..d000708 100644 --- a/DataStructure/Src/DS_3_String/DS_3_0_SString.cpp +++ b/DataStructure/Src/DS_3_String/DS_3_0_SString.cpp @@ -1,350 +1,350 @@ -// -// Created by Kim Yang on 2020/8/3. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序存储——静态数组实现方式(定长顺序存储),注意下面实现在数组中存放字符串时,都会舍弃,Str[0],第一个结点的空间,以保证字符下标和数组下标保证一致 -#include -#include - -/**定义模块**/ - -#define MAXLEN 15 //预定义最大串长为15 - -typedef struct { - char ch[MAXLEN];//每个分量存储一个字符 - int length; //串的实际长度 -} SString; - -//函数声明 -void InitStr(SString &S);//初始化 -bool StrAssign(SString &T, char *str, int strLength);//赋值操作 -void StrCopy(SString &T, SString S);//复制操作 -bool StrEmpty(SString S);//判空 -void Concat(SString &T, SString S1, SString S2);//串链操作 -bool SubString(SString &Sub, SString S, int pos, int len);//求子串 -int StrCompare(SString S, SString T);//比较操作,若S>T,则返回值>0;若S=T,则返回值=0;若S S.length)return false; - for (int i = pos; i < pos + len; ++i) - Sub.ch[i - pos + 1] = S.ch[i]; - Sub.length = len; - return true; -} - -//比较操作,若S>T,则返回值>0;若S=T,则返回值=0;若S T.length) {//匹配成功 - return k; - } else { - return 0; - } -} - -//简单模式匹配——王道教材写法 -int Index_Simple_CSKaoYan(SString S, SString T) { - int i = 1;//i记录当前主串指针 - int j = 1;//j记录模式串指针 - while (i <= S.length && j <= T.length) { - if (S.ch[i] == T.ch[j]) { - ++i; - ++j;//继续比较后续字符 - } else { - i = i - j + 2; //检查下一个字串 - j = 1;//重制j的值 - } - } - if (j > T.length) {//匹配成功 - return i - T.length; - } else { - return 0; - } -} - -//求模式串T的next数组 -void getNext(SString T, int *next) { - int i = 1, j = 0; - next[1] = 0; - while (i < T.length) { - if (j == 0 || T.ch[i] == T.ch[j]) { - ++i; - ++j; - //如果pi=pj,则next[j+1]=next[j]+1 - next[i] = j; - } else { - //否则令j=next[j],循环继续 - j = next[j]; - } - } -} - -//KMP1 -int Index_KMP(SString S, SString T) { - int i = 1, j = 1; - int next[T.length + 1]; - getNext(T, next); - while (i <= S.length && j <= T.length) { - if (j == 0 || S.ch[i] == T.ch[j]) { - ++i; - ++j;//继续比较后继字符 - } else { - j = next[j];//模式串向右移动 - } - } - if (j > T.length)//匹配成功 - return i - T.length; - else - return 0; -} - -//优化next数组 -void Get_BetterNext(SString T, int *betterNext) { - int i = 1, j = 0; - int next[T.length + 1]; - getNext(T, next);//先求出next数组 - betterNext[1] = 0;//令betterNext[1]=0 - for (int j = 2; j <= T.length; ++j) { - if (T.ch[next[j]] == T.ch[j]) - betterNext[j] = betterNext[next[j]];//这里涉及三个数组的对比,仔细看看 - else - betterNext[j] = next[j]; - } -} -//KMP1 -int Index_KMP1(SString S, SString T,int next[]) { - int i = 1, j = 1; -// int next[T.length + 1]; -// getNext(T, next); - while (i <= S.length && j <= T.length) { - if (j == 0 || S.ch[i] == T.ch[j]) { - ++i; - ++j;//继续比较后继字符 - } else { - j = next[j];//模式串向右移动 - } - } - if (j > T.length)//匹配成功 - return i - T.length; - else - return 0; -} - -//清空操作 -void ClearStr(SString &S) { - S.length = 0; - memset(S.ch, '\0', MAXLEN);//用到了一个cstring库中的memset函数 -} - -//销毁操作 -//void DestoryString(SString &S) { -// -//} -//基于数组实现的字符串存储会自动销毁,无须单独销毁 - -/**实现模块**/ - -/**测试模块**/ -void printDs(SString S, char *StrName) { - printf("当前%s字符串内容为:", StrName); - for (int i = 1; i <= S.length; ++i) { - if (S.ch[i] != '\0') - printf("%c", S.ch[i]);//注意输出单个字符用的是%c,而%s是输出一个字符串 - } - printf("\n"); -} - -void testBoolOperate(bool result, char *message, char *success, char *fail) { - if (result) { - printf("%s%s\n", message, success); - } else { - printf("%s%s\n", message, fail); - } -} - -void testModule() { - printf("开始测试!\n"); - - SString S, T; - InitStr(S); - InitStr(T); - char str1[] = "kim";//使用这种初始化列表进行初始化,最后会数组会多一个结束符'\0' - // char str1[] = {'k','i','m'}; - // 而这种不会,所以在选择初始化方式的时候尽量做到统一,否则你很有可能因为'\0'而匹配不到子串 - - char str2[] = "kimYang"; - testBoolOperate(StrAssign(S, str1, 3), "赋值操作", "成功啦!", "失败啦!"); - printDs(S, "S"); - testBoolOperate(StrAssign(T, str2, 7), "赋值操作", "又成功啦!", "失败啦!"); - printDs(T, "T"); - - SString S1; - InitStr(S1); - StrCopy(S1, S); - printDs(S1, "S1"); - - SString S2; - InitStr(S2); - Concat(S2, S, T); - printDs(S2, "串链结束后S2"); - - SString S3; - InitStr(S3); - testBoolOperate(SubString(S3, T, 2, 4), "取子串操作", "成功啦", "失败啦"); - printDs(S3, "当前取出的S3"); - - if (0 == StrCompare(S, S1)) { - printf("两字符串一样\n"); - } else { - printf("两个字符串不一样!\n"); - } - - int n = Index(T, S3); - if (0 == n) { - printf("主串T中不含子串S3\n"); - } else { - printf("主串T中含有S3,其下标为:%d\n", n); - } - - int n1 = Index_Simple(T, S3); - if (0 == n1) { - printf("主串T中不含子串S3\n"); - } else { - printf("主串T中含有S3,其下标为:%d\n", n1); - } - - int n2 = Index_Simple_CSKaoYan(T, S3); - if (0 == n2) { - printf("主串T中不含子串S3\n"); - } else { - printf("主串T中含有S3,其下标为:%d\n", n2); - } - - int n3 = Index_KMP(T, S3); - if (0 == n3) { - printf("主串T中不含子串S3\n"); - } else { - printf("主串T中含有S3,其下标为:%d\n", n3); - } - - int betterNext[S3.length+1]; - Get_BetterNext(S3,betterNext); - int n4=Index_KMP1(T,S3,betterNext); - if (0 == n4) { - printf("主串T中不含子串S3\n"); - } else { - printf("主串T中含有S3,其下标为:%d\n", n4); - } - - - - printf("测试结束!\n"); -} - -/**测试模块**/ - -int main() { - testModule(); - return 0; -} - +// +// Created by Kim Yang on 2020/8/3. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序存储——静态数组实现方式(定长顺序存储),注意下面实现在数组中存放字符串时,都会舍弃,Str[0],第一个结点的空间,以保证字符下标和数组下标保证一致 +#include +#include + +/**定义模块**/ + +#define MAXLEN 15 //预定义最大串长为15 + +typedef struct { + char ch[MAXLEN];//每个分量存储一个字符 + int length; //串的实际长度 +} SString; + +//函数声明 +void InitStr(SString &S);//初始化 +bool StrAssign(SString &T, char *str, int strLength);//赋值操作 +void StrCopy(SString &T, SString S);//复制操作 +bool StrEmpty(SString S);//判空 +void Concat(SString &T, SString S1, SString S2);//串链操作 +bool SubString(SString &Sub, SString S, int pos, int len);//求子串 +int StrCompare(SString S, SString T);//比较操作,若S>T,则返回值>0;若S=T,则返回值=0;若S S.length)return false; + for (int i = pos; i < pos + len; ++i) + Sub.ch[i - pos + 1] = S.ch[i]; + Sub.length = len; + return true; +} + +//比较操作,若S>T,则返回值>0;若S=T,则返回值=0;若S T.length) {//匹配成功 + return k; + } else { + return 0; + } +} + +//简单模式匹配——王道教材写法 +int Index_Simple_CSKaoYan(SString S, SString T) { + int i = 1;//i记录当前主串指针 + int j = 1;//j记录模式串指针 + while (i <= S.length && j <= T.length) { + if (S.ch[i] == T.ch[j]) { + ++i; + ++j;//继续比较后续字符 + } else { + i = i - j + 2; //检查下一个字串 + j = 1;//重制j的值 + } + } + if (j > T.length) {//匹配成功 + return i - T.length; + } else { + return 0; + } +} + +//求模式串T的next数组 +void getNext(SString T, int *next) { + int i = 1, j = 0; + next[1] = 0; + while (i < T.length) { + if (j == 0 || T.ch[i] == T.ch[j]) { + ++i; + ++j; + //如果pi=pj,则next[j+1]=next[j]+1 + next[i] = j; + } else { + //否则令j=next[j],循环继续 + j = next[j]; + } + } +} + +//KMP1 +int Index_KMP(SString S, SString T) { + int i = 1, j = 1; + int next[T.length + 1]; + getNext(T, next); + while (i <= S.length && j <= T.length) { + if (j == 0 || S.ch[i] == T.ch[j]) { + ++i; + ++j;//继续比较后继字符 + } else { + j = next[j];//模式串向右移动 + } + } + if (j > T.length)//匹配成功 + return i - T.length; + else + return 0; +} + +//优化next数组 +void Get_BetterNext(SString T, int *betterNext) { + int i = 1, j = 0; + int next[T.length + 1]; + getNext(T, next);//先求出next数组 + betterNext[1] = 0;//令betterNext[1]=0 + for (int j = 2; j <= T.length; ++j) { + if (T.ch[next[j]] == T.ch[j]) + betterNext[j] = betterNext[next[j]];//这里涉及三个数组的对比,仔细看看 + else + betterNext[j] = next[j]; + } +} +//KMP1 +int Index_KMP1(SString S, SString T,int next[]) { + int i = 1, j = 1; +// int next[T.length + 1]; +// getNext(T, next); + while (i <= S.length && j <= T.length) { + if (j == 0 || S.ch[i] == T.ch[j]) { + ++i; + ++j;//继续比较后继字符 + } else { + j = next[j];//模式串向右移动 + } + } + if (j > T.length)//匹配成功 + return i - T.length; + else + return 0; +} + +//清空操作 +void ClearStr(SString &S) { + S.length = 0; + memset(S.ch, '\0', MAXLEN);//用到了一个cstring库中的memset函数 +} + +//销毁操作 +//void DestoryString(SString &S) { +// +//} +//基于数组实现的字符串存储会自动销毁,无须单独销毁 + +/**实现模块**/ + +/**测试模块**/ +void printDs(SString S, char *StrName) { + printf("当前%s字符串内容为:", StrName); + for (int i = 1; i <= S.length; ++i) { + if (S.ch[i] != '\0') + printf("%c", S.ch[i]);//注意输出单个字符用的是%c,而%s是输出一个字符串 + } + printf("\n"); +} + +void testBoolOperate(bool result, char *message, char *success, char *fail) { + if (result) { + printf("%s%s\n", message, success); + } else { + printf("%s%s\n", message, fail); + } +} + +void testModule() { + printf("开始测试!\n"); + + SString S, T; + InitStr(S); + InitStr(T); + char str1[] = "kim";//使用这种初始化列表进行初始化,最后会数组会多一个结束符'\0' + // char str1[] = {'k','i','m'}; + // 而这种不会,所以在选择初始化方式的时候尽量做到统一,否则你很有可能因为'\0'而匹配不到子串 + + char str2[] = "kimYang"; + testBoolOperate(StrAssign(S, str1, 3), "赋值操作", "成功啦!", "失败啦!"); + printDs(S, "S"); + testBoolOperate(StrAssign(T, str2, 7), "赋值操作", "又成功啦!", "失败啦!"); + printDs(T, "T"); + + SString S1; + InitStr(S1); + StrCopy(S1, S); + printDs(S1, "S1"); + + SString S2; + InitStr(S2); + Concat(S2, S, T); + printDs(S2, "串链结束后S2"); + + SString S3; + InitStr(S3); + testBoolOperate(SubString(S3, T, 2, 4), "取子串操作", "成功啦", "失败啦"); + printDs(S3, "当前取出的S3"); + + if (0 == StrCompare(S, S1)) { + printf("两字符串一样\n"); + } else { + printf("两个字符串不一样!\n"); + } + + int n = Index(T, S3); + if (0 == n) { + printf("主串T中不含子串S3\n"); + } else { + printf("主串T中含有S3,其下标为:%d\n", n); + } + + int n1 = Index_Simple(T, S3); + if (0 == n1) { + printf("主串T中不含子串S3\n"); + } else { + printf("主串T中含有S3,其下标为:%d\n", n1); + } + + int n2 = Index_Simple_CSKaoYan(T, S3); + if (0 == n2) { + printf("主串T中不含子串S3\n"); + } else { + printf("主串T中含有S3,其下标为:%d\n", n2); + } + + int n3 = Index_KMP(T, S3); + if (0 == n3) { + printf("主串T中不含子串S3\n"); + } else { + printf("主串T中含有S3,其下标为:%d\n", n3); + } + + int betterNext[S3.length+1]; + Get_BetterNext(S3,betterNext); + int n4=Index_KMP1(T,S3,betterNext); + if (0 == n4) { + printf("主串T中不含子串S3\n"); + } else { + printf("主串T中含有S3,其下标为:%d\n", n4); + } + + + + printf("测试结束!\n"); +} + +/**测试模块**/ + +int main() { + testModule(); + return 0; +} + diff --git a/DataStructure/Src/DS_3_String/DS_3_1_HString.cpp b/DataStructure/Src/DS_3_String/DS_3_1_HString.cpp index 65e545f..c549705 100644 --- a/DataStructure/Src/DS_3_String/DS_3_1_HString.cpp +++ b/DataStructure/Src/DS_3_String/DS_3_1_HString.cpp @@ -1,27 +1,27 @@ -// -// Created by kim yang on 2020/8/7. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序存储——动态数组实现方式(堆分配存储) -#include - -/**定义模块**/ -#define MAXLEN 255 //预定义最大串长为255 - -typedef struct { - char *ch;//按串长分配存储区,ch指向串的基地址 - int length; //串的实际长度 -}HString; - -/**定义模块**/ - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - -/**测试模块**/ - - -/**测试模块**/ +// +// Created by kim yang on 2020/8/7. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序存储——动态数组实现方式(堆分配存储) +#include + +/**定义模块**/ +#define MAXLEN 255 //预定义最大串长为255 + +typedef struct { + char *ch;//按串长分配存储区,ch指向串的基地址 + int length; //串的实际长度 +}HString; + +/**定义模块**/ + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + +/**测试模块**/ + + +/**测试模块**/ diff --git a/DataStructure/Src/DS_3_String/DS_3_2_LString.cpp b/DataStructure/Src/DS_3_String/DS_3_2_LString.cpp index 28d0b6a..893e9ce 100644 --- a/DataStructure/Src/DS_3_String/DS_3_2_LString.cpp +++ b/DataStructure/Src/DS_3_String/DS_3_2_LString.cpp @@ -1,26 +1,26 @@ -// -// Created by kim yang on 2020/8/8. -// Copyright (c) Kim Yang All rights reserved. -// - -//链式存储——单结点单字符 -#include - -/**定义模块**/ -typedef struct StringNode{ - char ch;//每个结点存1个字符,存储密度低,每个字符1B,每个指针4B - struct StringNode *next; -}StringNode,*String; - - -/**定义模块**/ - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - -/**测试模块**/ - - +// +// Created by kim yang on 2020/8/8. +// Copyright (c) Kim Yang All rights reserved. +// + +//链式存储——单结点单字符 +#include + +/**定义模块**/ +typedef struct StringNode{ + char ch;//每个结点存1个字符,存储密度低,每个字符1B,每个指针4B + struct StringNode *next; +}StringNode,*String; + + +/**定义模块**/ + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + +/**测试模块**/ + + /**测试模块**/ \ No newline at end of file diff --git a/DataStructure/Src/DS_3_String/DS_3_3_LString.cpp b/DataStructure/Src/DS_3_String/DS_3_3_LString.cpp index 4987435..6bf4b8b 100644 --- a/DataStructure/Src/DS_3_String/DS_3_3_LString.cpp +++ b/DataStructure/Src/DS_3_String/DS_3_3_LString.cpp @@ -1,25 +1,25 @@ -// -// Created by kim yang on 2020/8/8. -// Copyright (c) Kim Yang All rights reserved. -// - -//链式存储——单结点多字符 -#include - -/**定义模块**/ -typedef struct StringNode{ - char ch[4];//每个结点存多个个字符,存储密度提高,每个字符1B,每个指针4B - struct StringNode *next; -}StringNode,*String; - -/**定义模块**/ - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - -/**测试模块**/ - - +// +// Created by kim yang on 2020/8/8. +// Copyright (c) Kim Yang All rights reserved. +// + +//链式存储——单结点多字符 +#include + +/**定义模块**/ +typedef struct StringNode{ + char ch[4];//每个结点存多个个字符,存储密度提高,每个字符1B,每个指针4B + struct StringNode *next; +}StringNode,*String; + +/**定义模块**/ + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + +/**测试模块**/ + + /**测试模块**/ \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_0_BiTreeSq.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_0_BiTreeSq.cpp index c9175de..623caed 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_0_BiTreeSq.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_0_BiTreeSq.cpp @@ -1,32 +1,32 @@ -// -// Created by Kim Yang on 2020/8/14. -// Copyright (c) Kim Yang All rights reserved. -// - -//顺序存储————二叉树 -#include - -/**定义模块**/ -#define MaxSize 100 - -struct TreeNode { - int value;//结点中的数据元素 - bool isEmpty; -}; - -/**定义模块**/ - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - -/**测试模块**/ - - -/**测试模块**/ - -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/14. +// Copyright (c) Kim Yang All rights reserved. +// + +//顺序存储————二叉树 +#include + +/**定义模块**/ +#define MaxSize 100 + +struct TreeNode { + int value;//结点中的数据元素 + bool isEmpty; +}; + +/**定义模块**/ + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + +/**测试模块**/ + + +/**测试模块**/ + +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_1_BiTreeLink.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_1_BiTreeLink.cpp index 1c04ef7..510de6a 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_1_BiTreeLink.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_1_BiTreeLink.cpp @@ -1,139 +1,139 @@ -// -// Created by Kim Yang on 2020/8/14. -// Copyright (c) Kim Yang All rights reserved. -// - -//链式存储————二叉树 -#include -#include - -/***定义模块*/ -struct ElemType { - int value; -}; - -typedef struct BiTNode { - ElemType data;//数据域 - struct BiTNode *lchild, *rchild;//左右孩子指针 -} BiTNode, *BiTree; -/**定义模块**/ - -/**实现模块**/ -//初始化 -void InitTree(BiTree root) { - root = (BiTree) malloc(sizeof(BiTNode)); - root->data = {1}; - root->lchild = NULL; - root->rchild = NULL; -} - -//插入新结点 -bool InsertNode(BiTree T, ElemType val) { - BiTNode *p = (BiTNode *) malloc(sizeof(BiTNode)); - p->data = val; - p->lchild = NULL; - p->rchild = NULL; - T->lchild = p;//作为左孩子 -} - -//访问函数 -void visit(BiTree T) { - printf("%d", T->data.value); -} - -//先序遍历 -void PreOder(BiTree T) { - if (T != NULL) { - visit(T);//访问根节点 - PreOder(T->lchild);//遍历左子树 - PreOder(T->rchild);//遍历右子树 - } -} - -//中序遍历 -void InOrder(BiTree T) { - if (T != NULL) { - InOrder(T->lchild);//遍历左子树 - visit(T);//访问根节点 - InOrder(T->rchild);//遍历右子树 - } -} - -//后序遍历 -void PostOder(BiTree T) { - if (T != NULL) { - PostOder(T->lchild); - PostOder(T->rchild); - visit(T); - } -} - -//用于层序遍历的辅助队列 -typedef struct LinkNode { - BiTNode *data;//存的是指针而非结点 - struct LinkNode *next; -} LinkNode; - -typedef struct { - LinkNode *front, *rear;//队头队尾 -} LinkQueue; - -void InitQueue(LinkQueue &Q) { - Q.front = Q.rear = (LinkNode *) malloc(sizeof(LinkNode)); - //初始化时,front 、rear 都指向头节点 - Q.front->next = NULL; -} - -bool EnQueue(LinkQueue &Q, BiTNode *x) { - //判满?链式存储一般不需要判满,除非内存不足 - LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); - if (s == NULL)return false; - s->data = x; - s->next = NULL; - Q.rear->next = s;//新节点插入到rear之后 - Q.rear = s;//修改表尾指针 - return true; -} - -bool DeQueue(LinkQueue &Q, BiTNode *x) { - if (Q.front == Q.rear)return false;//队空 - LinkNode *p = Q.front->next;//用指针p记录队头元素 - x = p->data;//用x变量返回队头元素 - Q.front->next = p->next;//修改头节点的next指针 - if (Q.rear == p)//此次是最后一个节点出队 - Q.rear = Q.front;//修改rear指针,思考一下为什么? - free(p); //释放节点空间 - return true; -} - -bool isEmpty(LinkQueue Q) { - return Q.front == Q.rear ? true : false; -} - -//层序遍历 -void levelOrder(BiTree T) { - LinkQueue Q;//辅助队列 - InitQueue(Q);// - BiTree p; - EnQueue(Q, T); - while (!isEmpty(Q)) { - DeQueue(Q, p);//队头结点出队 - visit(p); - if (p->lchild != NULL) - EnQueue(Q, p->lchild); - if (p->rchild != NULL) - EnQueue(Q, p->rchild); - } -} - -/**实现模块**/ - -/**测试模块**/ - - -/**测试模块**/ - -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/14. +// Copyright (c) Kim Yang All rights reserved. +// + +//链式存储————二叉树 +#include +#include + +/***定义模块*/ +struct ElemType { + int value; +}; + +typedef struct BiTNode { + ElemType data;//数据域 + struct BiTNode *lchild, *rchild;//左右孩子指针 +} BiTNode, *BiTree; +/**定义模块**/ + +/**实现模块**/ +//初始化 +void InitTree(BiTree root) { + root = (BiTree) malloc(sizeof(BiTNode)); + root->data = {1}; + root->lchild = NULL; + root->rchild = NULL; +} + +//插入新结点 +bool InsertNode(BiTree T, ElemType val) { + BiTNode *p = (BiTNode *) malloc(sizeof(BiTNode)); + p->data = val; + p->lchild = NULL; + p->rchild = NULL; + T->lchild = p;//作为左孩子 +} + +//访问函数 +void visit(BiTree T) { + printf("%d", T->data.value); +} + +//先序遍历 +void PreOder(BiTree T) { + if (T != NULL) { + visit(T);//访问根节点 + PreOder(T->lchild);//遍历左子树 + PreOder(T->rchild);//遍历右子树 + } +} + +//中序遍历 +void InOrder(BiTree T) { + if (T != NULL) { + InOrder(T->lchild);//遍历左子树 + visit(T);//访问根节点 + InOrder(T->rchild);//遍历右子树 + } +} + +//后序遍历 +void PostOder(BiTree T) { + if (T != NULL) { + PostOder(T->lchild); + PostOder(T->rchild); + visit(T); + } +} + +//用于层序遍历的辅助队列 +typedef struct LinkNode { + BiTNode *data;//存的是指针而非结点 + struct LinkNode *next; +} LinkNode; + +typedef struct { + LinkNode *front, *rear;//队头队尾 +} LinkQueue; + +void InitQueue(LinkQueue &Q) { + Q.front = Q.rear = (LinkNode *) malloc(sizeof(LinkNode)); + //初始化时,front 、rear 都指向头节点 + Q.front->next = NULL; +} + +bool EnQueue(LinkQueue &Q, BiTNode *x) { + //判满?链式存储一般不需要判满,除非内存不足 + LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); + if (s == NULL)return false; + s->data = x; + s->next = NULL; + Q.rear->next = s;//新节点插入到rear之后 + Q.rear = s;//修改表尾指针 + return true; +} + +bool DeQueue(LinkQueue &Q, BiTNode *x) { + if (Q.front == Q.rear)return false;//队空 + LinkNode *p = Q.front->next;//用指针p记录队头元素 + x = p->data;//用x变量返回队头元素 + Q.front->next = p->next;//修改头节点的next指针 + if (Q.rear == p)//此次是最后一个节点出队 + Q.rear = Q.front;//修改rear指针,思考一下为什么? + free(p); //释放节点空间 + return true; +} + +bool isEmpty(LinkQueue Q) { + return Q.front == Q.rear ? true : false; +} + +//层序遍历 +void levelOrder(BiTree T) { + LinkQueue Q;//辅助队列 + InitQueue(Q);// + BiTree p; + EnQueue(Q, T); + while (!isEmpty(Q)) { + DeQueue(Q, p);//队头结点出队 + visit(p); + if (p->lchild != NULL) + EnQueue(Q, p->lchild); + if (p->rchild != NULL) + EnQueue(Q, p->rchild); + } +} + +/**实现模块**/ + +/**测试模块**/ + + +/**测试模块**/ + +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_2_BiTreeF.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_2_BiTreeF.cpp index 36ad898..2de9a68 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_2_BiTreeF.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_2_BiTreeF.cpp @@ -1,38 +1,38 @@ -// -// Created by Kim Yang on 2020/8/23. -// Copyright (c) Kim Yang All rights reserved. -// -#include - -//三叉链表——方便找父节点 -//带有一个指针指向父节点 -/**定义模块**/ -struct ElemType { - int value; -}; - -typedef struct BiTNode { - ElemType data;//数据域 - struct BiTNode *lchild, *rchild;//左右孩子指针 - struct BiTNode *parent;//指向父节点的指针 -} BiTNode, *BiTree; -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - -} - -/**测试模块**/ -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/23. +// Copyright (c) Kim Yang All rights reserved. +// +#include + +//三叉链表——方便找父节点 +//带有一个指针指向父节点 +/**定义模块**/ +struct ElemType { + int value; +}; + +typedef struct BiTNode { + ElemType data;//数据域 + struct BiTNode *lchild, *rchild;//左右孩子指针 + struct BiTNode *parent;//指向父节点的指针 +} BiTNode, *BiTree; +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + +} + +/**测试模块**/ +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_3_ThreadedBiTree.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_3_ThreadedBiTree.cpp index 3370f1a..e11c854 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_3_ThreadedBiTree.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_3_ThreadedBiTree.cpp @@ -1,243 +1,243 @@ -// -// Created by Kim Yang on 2020/8/23. -// Copyright (c) Kim Yang All rights reserved. -// -#include - -//线索二叉树 - -/**定义模块**/ - -struct ElemType { - int value; -}; - -typedef struct ThreadNode { - ElemType data;//数据域 - struct ThreadNode *lchild, *rchild;//左右孩子指针 - int ltag, rtag;//左右线索标志 -} ThreadNode, *ThreadTree; -/**定义模块**/ - -/**实现模块**/ -ThreadNode *pre = NULL;//全局变量用于暂存当前访问结点的前驱 - -void visit(ThreadNode *q) { - if (q->lchild == NULL) {//左子树为空,建立前驱线索 - q->lchild = pre; - q->ltag = 1; - } - if (pre != NULL && pre->rchild == NULL) {//建立前驱结点的后继线索 - pre->rchild = q; - pre->rtag = 1; - } - pre = q; -} - -//中序遍历二叉树,一边遍历一边线索化 -void InThread(ThreadTree T) { - if (T != NULL) { - InThread(T->lchild); - visit(T); - InThread(T->rchild); - } -} - -//创建中序线索化二叉树T -void CreatInThread(ThreadTree T) { - pre = NULL; - if (T != NULL) {//非空二叉树才能线索化 - InThread(T);//中序线索二叉树 - if (pre->rchild == NULL) { - pre->rtag = 1;//处理遍历的最后最后一个结点 - } - } -} - -//中序线索化(王道教材版) -void InThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { - if (p != NULL) { - InThread_CSKaoYan(p->lchild, pre);//递归,线索化左子树 - if (p->lchild == NULL) {//左子树为空,建立前驱线索 - p->lchild = pre; - p->ltag = 1; - } - if (pre != NULL && pre->rchild == NULL) { - pre->rchild == p;//建立前驱结点的后及线索 - pre->rtag = 1; - } - pre = p; - InThread_CSKaoYan(p->rchild, pre); - } -} - -//中序线索化二叉树(王道教材版本) -void CreatInThread_CSKaoYan(ThreadTree T) { - ThreadTree pre = NULL; - if (T != NULL) { - InThread_CSKaoYan(T, pre); - pre->rchild = NULL;//思考:为什么处理最后一个结点时没有判断rchild 是否为NULL? - pre->rtag = 1;//答:因为最后一个结点的右孩子必为空。 - } -} - -//先序线索化,一边遍历一边线索化 -void PreThread(ThreadTree T) { - if (T != NULL) { - visit(T); - if (0 == T->ltag) {//lchild不是前驱线索 - PreThread(T->lchild); - } - PreThread(T->rchild); - } -} - -//创建先序线索化二叉树T -void CreatPreThread(ThreadTree T) { - pre == NULL; - if (T != NULL) { - PreThread(T); - if (pre->rchild == NULL) { - pre->rtag = 1;//处理遍历的最后一个结点 - } - } -} - -//先序线索化(王道教程版本) -void PreThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { - if (p != NULL) { - if (p->lchild == NULL) { - p->lchild = pre; - p->ltag = 1; - } - if (pre != NULL && pre->rchild == NULL) { - pre->rchild == p;//建立前驱结点的后及线索 - pre->rtag = 1; - } - pre = p; - if (0 == p->ltag) { - PreThread_CSKaoYan(p->lchild, pre); - } - PreThread_CSKaoYan(p->rchild, pre); - } -} - -//先序线索化二叉树(王道教材版本) -void CreatPreThread_CSKaoYan(ThreadTree T) { - ThreadTree pre = NULL; - if (T != NULL) { - PreThread_CSKaoYan(T, pre); - if (pre->rchild = NULL)//处理遍历的最后一个结点 - pre->rtag = 1; - } -} - -//后序线索二叉树 -void PostThread(ThreadTree T) { - if (T != NULL) { - PostThread(T->lchild); - PostThread(T->rchild); - visit(T); - } -} - -//创建后序线索二叉树T -void CreatPostThread(ThreadTree T) { - pre == NULL; - if (T != NULL) { - PostThread(T); - if (pre->rchild == NULL) { - pre->rtag = 1;//处理遍历的最后一个结点 - } - } -} - -//后序线索化(王道教程版本) -void PostThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { - if (p != NULL) { - PostThread_CSKaoYan(p->lchild, pre); - PostThread_CSKaoYan(p->rchild, pre); - if (p->lchild == NULL) { - p->lchild = pre; - p->ltag = 1; - } - if (pre != NULL && pre->rchild == NULL) { - pre->rchild == p;//建立前驱结点的后及线索 - pre->rtag = 1; - } - pre = p; - } -} -//后序线索化二叉树(王道教材版本) -void CreatPostThread_CSKaoYan(ThreadTree T) { - ThreadTree pre = NULL; - if (T != NULL) { - PostThread_CSKaoYan(T, pre); - if (pre->rchild = NULL)//处理遍历的最后一个结点 - pre->rtag = 1; - } -} - -//中序线索二叉树找中序后继 -//找到以P为根的子树中,第一个被中序遍历的结点 -ThreadNode *FirstNode(ThreadNode *p){ - //循环找到最左下结点(不一定是叶结点) - while(0==p->ltag){ - p=p->lchild; - } - return p; -} - -//在中序线索二叉树中找到结点p的后继结点 -ThreadNode *NextNode(ThreadNode *p){ - //在右子树中最左下结点 - if(0==p->rtag)return FirstNode(p->rchild); - else return p->rchild; -} - -//对中序线索二叉树进行中序遍历(利用线索实现的非递归算法),空间复杂度为O(1); -void InOrder(ThreadNode *T){ - for (ThreadNode *p = FirstNode(T); p!=NULL ; p=NextNode(p)) { - visit(p); - } -} - -//中序线索二叉树找中序前驱 -//找到以p为根的子树中,最后一个被中序遍历的结点 -ThreadNode *LastNode(ThreadNode *p){ - //循环找到最右下结点(不一定是叶结点) - while(0==p->rtag)p=p->rchild; - return p; -} - -//在中序线索二叉树中找到结点p的前驱结点 -ThreadNode *PreNode(ThreadNode *p){ - //左下子树中最右结点 - if(0==p->ltag)return LastNode(p->lchild); - else return p->lchild; -} - -//对中序线索二叉树进行逆向中序遍历 -void RevInOrder(ThreadNode *T){ - for (ThreadNode *p = LastNode(T); p!=NULL ; p=PreNode(p)) { - visit(p); - } -} - - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - printf("开始测试!\n"); - - printf("结束测试!\n"); -} - -/**测试模块**/ -int main() { - testModule(); - return 0; +// +// Created by Kim Yang on 2020/8/23. +// Copyright (c) Kim Yang All rights reserved. +// +#include + +//线索二叉树 + +/**定义模块**/ + +struct ElemType { + int value; +}; + +typedef struct ThreadNode { + ElemType data;//数据域 + struct ThreadNode *lchild, *rchild;//左右孩子指针 + int ltag, rtag;//左右线索标志 +} ThreadNode, *ThreadTree; +/**定义模块**/ + +/**实现模块**/ +ThreadNode *pre = NULL;//全局变量用于暂存当前访问结点的前驱 + +void visit(ThreadNode *q) { + if (q->lchild == NULL) {//左子树为空,建立前驱线索 + q->lchild = pre; + q->ltag = 1; + } + if (pre != NULL && pre->rchild == NULL) {//建立前驱结点的后继线索 + pre->rchild = q; + pre->rtag = 1; + } + pre = q; +} + +//中序遍历二叉树,一边遍历一边线索化 +void InThread(ThreadTree T) { + if (T != NULL) { + InThread(T->lchild); + visit(T); + InThread(T->rchild); + } +} + +//创建中序线索化二叉树T +void CreatInThread(ThreadTree T) { + pre = NULL; + if (T != NULL) {//非空二叉树才能线索化 + InThread(T);//中序线索二叉树 + if (pre->rchild == NULL) { + pre->rtag = 1;//处理遍历的最后最后一个结点 + } + } +} + +//中序线索化(王道教材版) +void InThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { + if (p != NULL) { + InThread_CSKaoYan(p->lchild, pre);//递归,线索化左子树 + if (p->lchild == NULL) {//左子树为空,建立前驱线索 + p->lchild = pre; + p->ltag = 1; + } + if (pre != NULL && pre->rchild == NULL) { + pre->rchild == p;//建立前驱结点的后及线索 + pre->rtag = 1; + } + pre = p; + InThread_CSKaoYan(p->rchild, pre); + } +} + +//中序线索化二叉树(王道教材版本) +void CreatInThread_CSKaoYan(ThreadTree T) { + ThreadTree pre = NULL; + if (T != NULL) { + InThread_CSKaoYan(T, pre); + pre->rchild = NULL;//思考:为什么处理最后一个结点时没有判断rchild 是否为NULL? + pre->rtag = 1;//答:因为最后一个结点的右孩子必为空。 + } +} + +//先序线索化,一边遍历一边线索化 +void PreThread(ThreadTree T) { + if (T != NULL) { + visit(T); + if (0 == T->ltag) {//lchild不是前驱线索 + PreThread(T->lchild); + } + PreThread(T->rchild); + } +} + +//创建先序线索化二叉树T +void CreatPreThread(ThreadTree T) { + pre == NULL; + if (T != NULL) { + PreThread(T); + if (pre->rchild == NULL) { + pre->rtag = 1;//处理遍历的最后一个结点 + } + } +} + +//先序线索化(王道教程版本) +void PreThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { + if (p != NULL) { + if (p->lchild == NULL) { + p->lchild = pre; + p->ltag = 1; + } + if (pre != NULL && pre->rchild == NULL) { + pre->rchild == p;//建立前驱结点的后及线索 + pre->rtag = 1; + } + pre = p; + if (0 == p->ltag) { + PreThread_CSKaoYan(p->lchild, pre); + } + PreThread_CSKaoYan(p->rchild, pre); + } +} + +//先序线索化二叉树(王道教材版本) +void CreatPreThread_CSKaoYan(ThreadTree T) { + ThreadTree pre = NULL; + if (T != NULL) { + PreThread_CSKaoYan(T, pre); + if (pre->rchild = NULL)//处理遍历的最后一个结点 + pre->rtag = 1; + } +} + +//后序线索二叉树 +void PostThread(ThreadTree T) { + if (T != NULL) { + PostThread(T->lchild); + PostThread(T->rchild); + visit(T); + } +} + +//创建后序线索二叉树T +void CreatPostThread(ThreadTree T) { + pre == NULL; + if (T != NULL) { + PostThread(T); + if (pre->rchild == NULL) { + pre->rtag = 1;//处理遍历的最后一个结点 + } + } +} + +//后序线索化(王道教程版本) +void PostThread_CSKaoYan(ThreadTree p, ThreadTree &pre) { + if (p != NULL) { + PostThread_CSKaoYan(p->lchild, pre); + PostThread_CSKaoYan(p->rchild, pre); + if (p->lchild == NULL) { + p->lchild = pre; + p->ltag = 1; + } + if (pre != NULL && pre->rchild == NULL) { + pre->rchild == p;//建立前驱结点的后及线索 + pre->rtag = 1; + } + pre = p; + } +} +//后序线索化二叉树(王道教材版本) +void CreatPostThread_CSKaoYan(ThreadTree T) { + ThreadTree pre = NULL; + if (T != NULL) { + PostThread_CSKaoYan(T, pre); + if (pre->rchild = NULL)//处理遍历的最后一个结点 + pre->rtag = 1; + } +} + +//中序线索二叉树找中序后继 +//找到以P为根的子树中,第一个被中序遍历的结点 +ThreadNode *FirstNode(ThreadNode *p){ + //循环找到最左下结点(不一定是叶结点) + while(0==p->ltag){ + p=p->lchild; + } + return p; +} + +//在中序线索二叉树中找到结点p的后继结点 +ThreadNode *NextNode(ThreadNode *p){ + //在右子树中最左下结点 + if(0==p->rtag)return FirstNode(p->rchild); + else return p->rchild; +} + +//对中序线索二叉树进行中序遍历(利用线索实现的非递归算法),空间复杂度为O(1); +void InOrder(ThreadNode *T){ + for (ThreadNode *p = FirstNode(T); p!=NULL ; p=NextNode(p)) { + visit(p); + } +} + +//中序线索二叉树找中序前驱 +//找到以p为根的子树中,最后一个被中序遍历的结点 +ThreadNode *LastNode(ThreadNode *p){ + //循环找到最右下结点(不一定是叶结点) + while(0==p->rtag)p=p->rchild; + return p; +} + +//在中序线索二叉树中找到结点p的前驱结点 +ThreadNode *PreNode(ThreadNode *p){ + //左下子树中最右结点 + if(0==p->ltag)return LastNode(p->lchild); + else return p->lchild; +} + +//对中序线索二叉树进行逆向中序遍历 +void RevInOrder(ThreadNode *T){ + for (ThreadNode *p = LastNode(T); p!=NULL ; p=PreNode(p)) { + visit(p); + } +} + + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + printf("开始测试!\n"); + + printf("结束测试!\n"); +} + +/**测试模块**/ +int main() { + testModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_4_TreeSq.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_4_TreeSq.cpp index 735feb5..dc335ed 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_4_TreeSq.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_4_TreeSq.cpp @@ -1,37 +1,37 @@ -// -// Created by Kim Yang on 2020/8/26. -// Copyright (c) Kim Yang All rights reserved. -// -#include -//树——双亲表示法(顺序存储) -/**定义模块**/ -#define MAX_TREE_SIZE 100 - -typedef struct { - int data; //数据元素 - int parent;//双亲位置域 -}PTNode; -typedef struct { - PTNode nodes[MAX_TREE_SIZE];//双亲表示 - int n;//结点数 -}PTree; -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - -} - -/**测试模块**/ -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/26. +// Copyright (c) Kim Yang All rights reserved. +// +#include +//树——双亲表示法(顺序存储) +/**定义模块**/ +#define MAX_TREE_SIZE 100 + +typedef struct { + int data; //数据元素 + int parent;//双亲位置域 +}PTNode; +typedef struct { + PTNode nodes[MAX_TREE_SIZE];//双亲表示 + int n;//结点数 +}PTree; +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + +} + +/**测试模块**/ +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_5_TreeSqLink.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_5_TreeSqLink.cpp index 7a3fd1c..a5e4778 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_5_TreeSqLink.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_5_TreeSqLink.cpp @@ -1,41 +1,41 @@ -// -// Created by Kim Yang on 2020/8/29. -// Copyright (c) Kim Yang All rights reserved. -// -#include -//树——孩子表示法(顺序+链式存储) -/**定义模块**/ -#define MAX_TREE_SIZE 100 -struct CTNode{ - int child;//孩子节点在数组中的位置 - struct CTNode *next;//下一个孩子 -}; -typedef struct { - int data; //数据元素,数据元素类型不定 - struct CTNode *firstChild;//第一个孩子 -}CTBox; -typedef struct { - CTBox nodes[MAX_TREE_SIZE];//双亲表示 - int n,r;//结点数和根的位置 -}CTree; - -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - -} - -/**测试模块**/ -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/29. +// Copyright (c) Kim Yang All rights reserved. +// +#include +//树——孩子表示法(顺序+链式存储) +/**定义模块**/ +#define MAX_TREE_SIZE 100 +struct CTNode{ + int child;//孩子节点在数组中的位置 + struct CTNode *next;//下一个孩子 +}; +typedef struct { + int data; //数据元素,数据元素类型不定 + struct CTNode *firstChild;//第一个孩子 +}CTBox; +typedef struct { + CTBox nodes[MAX_TREE_SIZE];//双亲表示 + int n,r;//结点数和根的位置 +}CTree; + +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + +} + +/**测试模块**/ +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_6_TreeLink.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_6_TreeLink.cpp index 115ed2b..9848d34 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_6_TreeLink.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_6_TreeLink.cpp @@ -1,34 +1,34 @@ -// -// Created by Kim Yang on 2020/8/29. -// Copyright (c) Kim Yang All rights reserved. -// -#include -//树——孩子兄弟表示法(链式存储) -/**定义模块**/ - -typedef struct CSNode{ - int data; //数据域,数据类型不定,此处的int只是一个列子 - struct CSNode *firstChild,*nextsibiling;//第一个孩子和右兄弟指针 -}CSNode,*CSTree; - - -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - -} - -/**测试模块**/ -int main() { - - return 0; +// +// Created by Kim Yang on 2020/8/29. +// Copyright (c) Kim Yang All rights reserved. +// +#include +//树——孩子兄弟表示法(链式存储) +/**定义模块**/ + +typedef struct CSNode{ + int data; //数据域,数据类型不定,此处的int只是一个列子 + struct CSNode *firstChild,*nextsibiling;//第一个孩子和右兄弟指针 +}CSNode,*CSTree; + + +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + +} + +/**测试模块**/ +int main() { + + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_7_BST.cpp b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_7_BST.cpp index 15a6097..2b5f38f 100644 --- a/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_7_BST.cpp +++ b/DataStructure/Src/DS_4_TreeAndBinaryTree/DS_4_7_BST.cpp @@ -1,84 +1,84 @@ -// -// Created by Kim Yang on 2020/8/31. -// Copyright (c) Kim Yang All rights reserved. -// -#include -#include -//二叉排序树 -/**定义模块**/ -typedef struct BSTNode { - int key; - struct BSTNode *lchild, *rchild; -} BSTNode, *BSTree; - -/**定义模块**/ - -/**实现模块**/ -//查找 -//在二叉排序书中查找值为key的结点 -BSTNode *BST_Search(BSTree T, int key) { - while (T != NULL && key != T->key) { //若数空或等于根结点的值,则结束循环 - if (key < T->key) - T = T->lchild;//小于,则在左子树上找 - else T = T->rchild;//大于,则在右子树上找 - } - return T; -} - -//在二叉排序树中查找值为key的结点(递归实现) -BSTNode *BSTSearch(BSTree T, int key) { - if (T == NULL) - return NULL;//查找失败 - if (key == T->key) - return T;//查找成功 - else if (key < T->key) - return BSTSearch(T->lchild, key);//在左子树中查找 - else return BSTSearch(T->rchild, key);//在右子树中查找 -} - -//插入 -//在二叉排序树插入关键字为k的新结点(递归实现) -int BSTInsert(BSTree &T, int k) { - if (T == NULL) { - T = (BSTree) malloc(sizeof(BSTNode)); - T->key = k; - T->lchild = T->rchild = NULL; - return 1;//插入成功,返回1 - } else if (k == T->key) - return 0;//树中存在相同关键字的结点,插入失败 - else if (k < T->key) - return BSTInsert(T->lchild, k);//插入到左子树 - else return BSTInsert(T->rchild, k);//插入到右子树 -} - -//按照 str[] 中的关键字序列建立二叉排序树 -void Creat_BST(BSTree &T,int str[],int n){ - T=NULL;//初始化为空 - int i=0; - while(i +#include +//二叉排序树 +/**定义模块**/ +typedef struct BSTNode { + int key; + struct BSTNode *lchild, *rchild; +} BSTNode, *BSTree; + +/**定义模块**/ + +/**实现模块**/ +//查找 +//在二叉排序书中查找值为key的结点 +BSTNode *BST_Search(BSTree T, int key) { + while (T != NULL && key != T->key) { //若数空或等于根结点的值,则结束循环 + if (key < T->key) + T = T->lchild;//小于,则在左子树上找 + else T = T->rchild;//大于,则在右子树上找 + } + return T; +} + +//在二叉排序树中查找值为key的结点(递归实现) +BSTNode *BSTSearch(BSTree T, int key) { + if (T == NULL) + return NULL;//查找失败 + if (key == T->key) + return T;//查找成功 + else if (key < T->key) + return BSTSearch(T->lchild, key);//在左子树中查找 + else return BSTSearch(T->rchild, key);//在右子树中查找 +} + +//插入 +//在二叉排序树插入关键字为k的新结点(递归实现) +int BSTInsert(BSTree &T, int k) { + if (T == NULL) { + T = (BSTree) malloc(sizeof(BSTNode)); + T->key = k; + T->lchild = T->rchild = NULL; + return 1;//插入成功,返回1 + } else if (k == T->key) + return 0;//树中存在相同关键字的结点,插入失败 + else if (k < T->key) + return BSTInsert(T->lchild, k);//插入到左子树 + else return BSTInsert(T->rchild, k);//插入到右子树 +} + +//按照 str[] 中的关键字序列建立二叉排序树 +void Creat_BST(BSTree &T,int str[],int n){ + T=NULL;//初始化为空 + int i=0; + while(i - -//平衡二叉树 -/**定义模块**/ -typedef struct AVLNode { - int key; //数据域 - int balance;//平衡因子 - struct AVLNode *lchild, *rchild; -} AVLNode, *AVLTree; - -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - printf("开始测试!\n"); - - //坐等填坑 - - printf("结束测试!\n"); -} - -/**测试模块**/ -int main() { - testModule(); - return 0; +// +// Created by Kim Yang on 2020/9/4. +// Copyright (c) Kim Yang All rights reserved. +// +#include + +//平衡二叉树 +/**定义模块**/ +typedef struct AVLNode { + int key; //数据域 + int balance;//平衡因子 + struct AVLNode *lchild, *rchild; +} AVLNode, *AVLTree; + +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + printf("开始测试!\n"); + + //坐等填坑 + + printf("结束测试!\n"); +} + +/**测试模块**/ +int main() { + testModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_5_Graph/DS_5_0_Arc.cpp b/DataStructure/Src/DS_5_Graph/DS_5_0_Arc.cpp index b39351d..1637974 100644 --- a/DataStructure/Src/DS_5_Graph/DS_5_0_Arc.cpp +++ b/DataStructure/Src/DS_5_Graph/DS_5_0_Arc.cpp @@ -1,54 +1,54 @@ -// -// Created by Kim Yang on 2020/9/4. -// Copyright (c) Kim Yang All rights reserved. -// -#include - -//邻接标法(顺序+链式存储) -/**定义模块**/ - -#define MaxVertexNum 100 - -//"边"/"弧" -typedef struct ArcNode{ - int adjvex; //边/弧指向哪个结点 - struct ArcNode *next; //指向下一条弧的指针 - //InfoType info; //边权值 -}ArcNode; - -//"顶点" -typedef struct VNode{ - int data; //顶点信息,数据类型不定,int只是一个例子 - ArcNode *first;//第一条边/弧 -}VNode ,AdjList[MaxVertexNum]; - -//用邻接表存储的图 -typedef struct { - AdjList vertices; - int vexnum,arcnum; -}ALGraph; - -/**定义模块**/ - - -/**实现模块**/ -//坐等填坑 - -/**实现模块**/ - - -/**测试模块**/ - -void testModule() { - printf("开始测试!\n"); - - //坐等填坑 - - printf("结束测试!\n"); -} - -/**测试模块**/ -int main() { - testModule(); - return 0; +// +// Created by Kim Yang on 2020/9/4. +// Copyright (c) Kim Yang All rights reserved. +// +#include + +//邻接标法(顺序+链式存储) +/**定义模块**/ + +#define MaxVertexNum 100 + +//"边"/"弧" +typedef struct ArcNode{ + int adjvex; //边/弧指向哪个结点 + struct ArcNode *next; //指向下一条弧的指针 + //InfoType info; //边权值 +}ArcNode; + +//"顶点" +typedef struct VNode{ + int data; //顶点信息,数据类型不定,int只是一个例子 + ArcNode *first;//第一条边/弧 +}VNode ,AdjList[MaxVertexNum]; + +//用邻接表存储的图 +typedef struct { + AdjList vertices; + int vexnum,arcnum; +}ALGraph; + +/**定义模块**/ + + +/**实现模块**/ +//坐等填坑 + +/**实现模块**/ + + +/**测试模块**/ + +void testModule() { + printf("开始测试!\n"); + + //坐等填坑 + + printf("结束测试!\n"); +} + +/**测试模块**/ +int main() { + testModule(); + return 0; } \ No newline at end of file diff --git a/DataStructure/Src/DS_5_Graph/README.md b/DataStructure/Src/DS_5_Graph/README.md index 6bb998a..1216c53 100644 --- a/DataStructure/Src/DS_5_Graph/README.md +++ b/DataStructure/Src/DS_5_Graph/README.md @@ -1,3 +1,3 @@ -# 图 - - +# 图 + + diff --git a/DataStructure/Src/DS_6_Search/README.md b/DataStructure/Src/DS_6_Search/README.md index 327ef60..d8dfb73 100644 --- a/DataStructure/Src/DS_6_Search/README.md +++ b/DataStructure/Src/DS_6_Search/README.md @@ -1,2 +1,2 @@ -# 查找 - +# 查找 + diff --git a/DataStructure/Src/DS_7_Sort/README.md b/DataStructure/Src/DS_7_Sort/README.md index c16c3c9..238fe7e 100644 --- a/DataStructure/Src/DS_7_Sort/README.md +++ b/DataStructure/Src/DS_7_Sort/README.md @@ -1,2 +1,2 @@ -# 排序 - +# 排序 + diff --git a/DataStructure/Src/DS_HelloWord.cpp b/DataStructure/Src/DS_HelloWord.cpp index b82bed9..c411360 100644 --- a/DataStructure/Src/DS_HelloWord.cpp +++ b/DataStructure/Src/DS_HelloWord.cpp @@ -1,9 +1,9 @@ -// -// Created by kim yang on 2020/6/28. -// - -#include - - int main(){ - printf("Hello, DataStructure!"); +// +// Created by kim yang on 2020/6/28. +// + +#include + + int main(){ + printf("Hello, DataStructure!"); } \ No newline at end of file diff --git a/DataStructure/Src/README.md b/DataStructure/Src/README.md index fe7e781..0b2bd6a 100644 --- a/DataStructure/Src/README.md +++ b/DataStructure/Src/README.md @@ -1,24 +1,24 @@ -# 数据结构 - -此文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载[ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) - -## 语法 - -虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法! - -如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ - -## IDE -书写并运行源码使用的 IDE 是 `CLion`,其主要的配置文件是仓库根目录下的 `CMakeLists.txt` 文件。 - -## 章节目录 -* [绪论](DS_0_Introduction) -* [线性表](DS_1_LinearList) -* [栈与队列](DS_2_StackAndQueue) -* [字符串](DS_3_String) -* [树与二叉树](DS_4_TreeAndBinaryTree) -* [图](DS_5_Graph) -* [查找](DS_6_Search) -* [排序](DS_7_Sort) - - +# 数据结构 + +此文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载[ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) + +## 语法 + +虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法! + +如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ + +## IDE +书写并运行源码使用的 IDE 是 `CLion`,其主要的配置文件是仓库根目录下的 `CMakeLists.txt` 文件。 + +## 章节目录 +* [绪论](DS_0_Introduction) +* [线性表](DS_1_LinearList) +* [栈与队列](DS_2_StackAndQueue) +* [字符串](DS_3_String) +* [树与二叉树](DS_4_TreeAndBinaryTree) +* [图](DS_5_Graph) +* [查找](DS_6_Search) +* [排序](DS_7_Sort) + + diff --git a/HelloWord.cpp b/HelloWord.cpp index 4a2c19d..5affdad 100644 --- a/HelloWord.cpp +++ b/HelloWord.cpp @@ -1,6 +1,6 @@ -#include - -int main() { - std::cout << "Hello, CSKaoYan!" << std::endl; - return 0; -} +#include + +int main() { + std::cout << "Hello, CSKaoYan!" << std::endl; + return 0; +} diff --git a/LICENSE b/LICENSE index 0ad25db..ada1a81 100644 --- a/LICENSE +++ b/LICENSE @@ -1,661 +1,661 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/OperatingSystem/MindMap/BookMindMap/README.md b/OperatingSystem/MindMap/BookMindMap/README.md index 7fcb513..986587b 100644 --- a/OperatingSystem/MindMap/BookMindMap/README.md +++ b/OperatingSystem/MindMap/BookMindMap/README.md @@ -1,2 +1,2 @@ -# 王道书上每一章最后的思维导图 - +# 王道书上每一章最后的思维导图 + diff --git a/OperatingSystem/MindMap/PPTMindMap/README.md b/OperatingSystem/MindMap/PPTMindMap/README.md index 7733c88..3520e32 100644 --- a/OperatingSystem/MindMap/PPTMindMap/README.md +++ b/OperatingSystem/MindMap/PPTMindMap/README.md @@ -1 +1 @@ -# 视频教程(PPT)中的思维导图 +# 视频教程(PPT)中的思维导图 diff --git a/OperatingSystem/MindMap/README.md b/OperatingSystem/MindMap/README.md index 705a835..fece39d 100644 --- a/OperatingSystem/MindMap/README.md +++ b/OperatingSystem/MindMap/README.md @@ -1,4 +1,4 @@ -# 思维导图 -+ [王道书籍上的思维导图](BookMindMap) -+ [视频教程PPT中的思维导图](PPTMindMap) +# 思维导图 ++ [王道书籍上的思维导图](BookMindMap) ++ [视频教程PPT中的思维导图](PPTMindMap) + [王道论坛VIP学员独享的思维导图](CSKaoYanVIPMindMap) \ No newline at end of file diff --git a/OperatingSystem/README.md b/OperatingSystem/README.md index a8390af..8bea7d0 100644 --- a/OperatingSystem/README.md +++ b/OperatingSystem/README.md @@ -1,7 +1,7 @@ -# 操作系统(OperatingSystem) - -## [思维导图](MindMap) -本科目的思维导图文件存放在 `MainMap` 文件夹下,均为 Xmind 源文件,下载后可直接在本地编辑修改。 - -## [PPT](PPT) -`PPT` 文件夹下存放的是 2021 王道考研视频课程讲解用的 PPT,以供大家快速查找知识点或着复习视频内容! +# 操作系统(OperatingSystem) + +## [思维导图](MindMap) +本科目的思维导图文件存放在 `MainMap` 文件夹下,均为 Xmind 源文件,下载后可直接在本地编辑修改。 + +## [PPT](PPT) +`PPT` 文件夹下存放的是 2021 王道考研视频课程讲解用的 PPT,以供大家快速查找知识点或着复习视频内容! diff --git a/OtherExam/README.md b/OtherExam/README.md index 7db2b3c..f09ac57 100644 --- a/OtherExam/README.md +++ b/OtherExam/README.md @@ -1 +1 @@ -# 其他真题资源 +# 其他真题资源 diff --git a/README.md b/README.md index c08b478..f278cf6 100644 --- a/README.md +++ b/README.md @@ -1,180 +1,180 @@ - -
- -
- -# 2021-CSPostgraduate-408 - -![Top Language](https://img.shields.io/github/languages/top/KimYangOfCat/2021-CSPostgraduate-408?color=F8008E) -![DataStructure](https://img.shields.io/static/v1?label=&message=DataStructure&color=brightgreen) -![ComputerOrganization](https://img.shields.io/static/v1?label=&message=ComputerOrganization&color=blueviolet) -![ComputerNetWork](https://img.shields.io/static/v1?label=&message=ComputerNetWork&color=blue) -![OperatingSystem](https://img.shields.io/static/v1?label=&message=OperatingSystem&color=important) - -
- -本仓库主要记录了 CS 考研 408 专业课的一些真题资料、笔记、思维导图以及算法源码。 - -关于项目的介绍博文:[Blog](https://kimyang.cn/posts/2020-08-31-408.html) 、[CSDN](https://blog.csdn.net/weixin_43316691/article/details/108634030) 、[知乎](https://zhuanlan.zhihu.com/p/249377361) 。 - -## 21年考408的院校(信息来源于网络,更准确的信息请于各高校官网查询) - -### 985高校 - -| 浙江大学 | 上海交通大学 | 同济大学 | 中国科学技术大学 |武汉大学【新增】 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |:----------------------------------------------------------: | -| ![浙江大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ZJU.png) | ![上海交通大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SHJTU.webp) | ![同济大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TJU.webp) | ![中国科学技术大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-CSTU.png) | ![武汉大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-WHU.jpg) | - -| 南开大学【新增】 | 华东师范大学
【新增】 | 中山大学 | 复旦大学【新增】 | 华南理工大学 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![南开大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-NKU.png) | ![华东师范大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ECNU.png) | ![中山大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SYU.jpg) | ![复旦大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-FDU.jpg) | ![华南理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TSCU.jpg) | - -### 211高校 - -| 海南大学 | 广西大学 | 宁夏大学 | 贵州大学
【新增】 | 青海大学 | 上海大学 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![海南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HNU.jpg) | ![广西大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GXU.jpg) | ![宁夏大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-NXU.jpg) | ![贵州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GZU.png) | ![青海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-QHU.jpg) | ![上海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-SHU.png) | - -| 郑州大学
【新增】 | 云南大学
【新增】 | 河北工业大学
【新增】 | 华中农业大学
【新增】 | 西南财经大学 | 武汉理工大学
【新增】 | -| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| ![郑州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-ZZU.jpg) | ![云南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-YNU.jpg) | ![河北工业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HBTU.webp) | ![华中农业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HZAU.jpg) | ![西南财经大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-FESU.jpg) | ![武汉理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-WHTU.jpg) | - - -## 408 科目 - -### [数据结构](DataStructure) -`DataStructure`文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载 [ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) -#### [源码](DataStructure/Src) -408 所有科目基本都偏向理论,只有数据结构一门稍有实践性,故此动手写下所有数据结构源码,以章节分类整理,以供大家参考~ -##### 源码目录 -* [绪论](DataStructure/Src/DS_0_Introduction) -* [线性表](DataStructure/Src/DS_1_LinearList) -* [栈与队列](DataStructure/Src/DS_2_StackAndQueue) -* [字符串](DataStructure/Src/DS_3_String) -* [树与二叉树](DataStructure/Src/DS_4_TreeAndBinaryTree) -* [图](DataStructure/Src/DS_5_Graph) -* [查找](DataStructure/Src/DS_6_Search) -* [排序](DataStructure/Src/DS_7_Sort) -##### 编程语言 -虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法!如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ - -#### [思维导图](DataStructure/MindMap/) -+ [王道书籍上的思维导图](DataStructure/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](DataStructure/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](DataStructure/MindMap/CSKaoYanVIPMindMap) - -#### [PPT](DataStructure/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**数据结构**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - - -### [计算机组成原理](/ComputerOrganization/) - -#### [思维导图](ComputerOrganization/MindMap/) -+ [王道书籍上的思维导图](ComputerOrganization/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](ComputerOrganization/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](ComputerOrganization/MindMap/CSKaoYanVIPMindMap) - -#### [PPT](ComputerOrganization/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**计算机组成原理**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - -持续更新中~ -### [操作系统](OperatingSystem) - -#### [思维导图](OperatingSystem/MindMap/) -+ [王道书籍上的思维导图](OperatingSystem/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](OperatingSystem/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](OperatingSystem/MindMap/CSKaoYanVIPMindMap) - -持续更新中~ -#### [PPT](OperatingSystem/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**操作系统**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - -### [计算机网络](ComputerNetwork) - -#### [思维导图](ComputerNetwork/MindMap/) -+ [王道书籍上的思维导图](ComputerNetwork/MindMap/BookMindMap) -+ [视频教程PPT中的思维导图](ComputerNetwork/MindMap/PPTMindMap) -+ [王道论坛VIP学员独享的思维导图](ComputerNetwork/MindMap/CSKaoYanVIPMindMap) - -持续更新中~ -#### [PPT](ComputerNetwork/PPT) -`PPT` 文件夹下存放的是 2021 王道考研**计算机网络**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! - - -### 总结 -408四门科目,除了数据结构有一些代码的实操之外,其余三门课程都是以理论为主,所以学习它们的过程中还是建议以书本为主。 -即便是数据结构,在408的考试时数据结构也只是要求写出算法逻辑就好,并不要求代码有可执行性,所以对于一些喜欢敲代码的小伙伴, -不能一味沉浸在用键盘敲代码的状态中。为了提前适应考试,还是提前适应在纸上写代码的感觉。因为日常敲代码的过程中,智能的IDE会给你提供很大的帮助, -你只需要记住核心逻辑,但是在纸上写代码, 一些基本的语法还是🉐️ 熟悉,并能默写出来。 - -## 视频教程 -+ [数据结构](https://www.bilibili.com/video/BV1b7411N798) -+ [计算机组成原理](https://www.bilibili.com/video/BV1BE411D7ii) -+ [操作系统](https://www.bilibili.com/video/BV1YE411D7nH) -+ [计算机网络](https://www.bilibili.com/video/BV19E411D78Q) - -所有视频教程均来源于王道考研B站官方账号,视频大部分为旧版内容,但其实知识要点都是一样的,值得学习。其中也包含了部分新版视频,全部新版视频为收费内容,虽然白嫖很香😜 ,但建议在经济条件允许的条件下,支持正版👍🏻 ~ - -## 辅导书籍 - -### 王道系列 - -王道系列起源于[王道考研论坛](http://cskaoyan.com/),从它的论坛中,你能找到不少经验贴,非常值得关注!而王道系列辅导书籍,题量充足,知识点全面,可能更适合科班考研🈶️ 一定专业课基础的同学。 - -需要2021王道高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) 中下载。 -### 天勤系列 - -天勤系列,相比于王道更注重基础知识,,但是题量并没有王道的多。也正是由于它更注重基础,所以也许它更适合跨考计算机的同学。 - - -但是总的来说,辅导资料这一块儿还是适合自己的最好。所以对自己的知识储备有较为清晰的认识也许对你复习 408 更有帮助。 - -需要2021天勤高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8Dv1) 中下载。 - -## 教材 - -| 数据结构
严薇敏 | 计算机组成原理
唐朔飞 | 操作系统
汤子瀛 | 计算机网络
谢希仁 | 计算机网络
自顶向下方法 | -| :----------------------------------------------------------: | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| ![数据结构](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/DS0.jpg) | ![计算机组成原理](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CO0.jpg) | ![操作系统](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/OS0.png) | ![计算机网络](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN1.png) | ![计算机网络·自顶向下方法](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN0.jpg) | - -## 真题 -干净无水印的真题资源十分稀少可贵,在搜集的过程中,作者尽力找了一些干净无水印的资源,奈何个人力量有限,其中有些真题资源的质量仍不如人意。 - -目前本仓库只收录了[408 真题](408Exam),如果你有其他专业课或者更干净无水印的真题资源,欢迎提交 PR 或者在 issues 中提交相关资源的下载链接,感激不尽~ - -## 下载: - -~~### 镜像仓库:~~ - -~~本仓库与[ gitee 上的 CSPostgraduate-408-2021 仓库]()互为镜像仓库,保持同步更新。~~ - -~~若因网络问题无法在其一下载,可切换至另一仓库进行尝试~~ - ->由于仓库收录的资源越来越多,仓库体积已经超过 1.5GB,超过了 Gitee 单仓库体积上限,故无法保持再同步更新,非常抱歉~ -> ->后面,作者会不定期手动将本仓库打包至下文中的网盘中,大家可尝试下载~ - -### 其他下载途径: - -若因网络原因无法下载 Release 与真题中的资源,可点击下方网盘链接下载相应的资源: - -> 链接: [https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA](https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA) 提取码: hdqb -> -> 若网盘链接失效,可在 issues 中提醒作者更新嗷~ - -## 🔥 贡献 - -看到这里了,如果觉得对你有所帮助的话,不妨给本仓库点个 Star ⭐ ️吧! - -如果你有新的内容 📜 想要贡献到本仓库或者发现了本仓库的一些错误 🐛 ,👏🏻 欢迎阅读[贡献文档](CONTRIBUTE.md)提交Pr~ - -## 🍰 赞赏 -如果你觉得本仓库帮助到了你,欢迎你点击上方的 -[Sponsor](https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png) -按钮来赞助作者,这将会给作者更多更新的动力,感谢~ - -## ❤️ 致谢 -欢迎你前来占据前排 👏🏻 ~ - -## 许可证 + +
+ +
+ +# 2021-CSPostgraduate-408 + +![Top Language](https://img.shields.io/github/languages/top/KimYangOfCat/2021-CSPostgraduate-408?color=F8008E) +![DataStructure](https://img.shields.io/static/v1?label=&message=DataStructure&color=brightgreen) +![ComputerOrganization](https://img.shields.io/static/v1?label=&message=ComputerOrganization&color=blueviolet) +![ComputerNetWork](https://img.shields.io/static/v1?label=&message=ComputerNetWork&color=blue) +![OperatingSystem](https://img.shields.io/static/v1?label=&message=OperatingSystem&color=important) + +
+ +本仓库主要记录了 CS 考研 408 专业课的一些真题资料、笔记、思维导图以及算法源码。 + +关于项目的介绍博文:[Blog](https://kimyang.cn/posts/2020-08-31-408.html) 、[CSDN](https://blog.csdn.net/weixin_43316691/article/details/108634030) 、[知乎](https://zhuanlan.zhihu.com/p/249377361) 。 + +## 21年考408的院校(信息来源于网络,更准确的信息请于各高校官网查询) + +### 985高校 + +| 浙江大学 | 上海交通大学 | 同济大学 | 中国科学技术大学 |武汉大学【新增】 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |:----------------------------------------------------------: | +| ![浙江大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ZJU.png) | ![上海交通大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SHJTU.webp) | ![同济大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TJU.webp) | ![中国科学技术大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-CSTU.png) | ![武汉大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-WHU.jpg) | + +| 南开大学【新增】 | 华东师范大学
【新增】 | 中山大学 | 复旦大学【新增】 | 华南理工大学 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![南开大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-NKU.png) | ![华东师范大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-ECNU.png) | ![中山大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-SYU.jpg) | ![复旦大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-FDU.jpg) | ![华南理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/985-TSCU.jpg) | + +### 211高校 + +| 海南大学 | 广西大学 | 宁夏大学 | 贵州大学
【新增】 | 青海大学 | 上海大学 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![海南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HNU.jpg) | ![广西大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GXU.jpg) | ![宁夏大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-NXU.jpg) | ![贵州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-GZU.png) | ![青海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-QHU.jpg) | ![上海大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-SHU.png) | + +| 郑州大学
【新增】 | 云南大学
【新增】 | 河北工业大学
【新增】 | 华中农业大学
【新增】 | 西南财经大学 | 武汉理工大学
【新增】 | +| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| ![郑州大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-ZZU.jpg) | ![云南大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-YNU.jpg) | ![河北工业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HBTU.webp) | ![华中农业大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-HZAU.jpg) | ![西南财经大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-FESU.jpg) | ![武汉理工大学](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/school/211-WHTU.jpg) | + + +## 408 科目 + +### [数据结构](DataStructure) +`DataStructure`文件夹下为 2021 [王道考研](http://cskaoyan.com/forum.php) 课程数据结构源代码!点击此下载 [ 21王道数据结构 PDF](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) +#### [源码](DataStructure/Src) +408 所有科目基本都偏向理论,只有数据结构一门稍有实践性,故此动手写下所有数据结构源码,以章节分类整理,以供大家参考~ +##### 源码目录 +* [绪论](DataStructure/Src/DS_0_Introduction) +* [线性表](DataStructure/Src/DS_1_LinearList) +* [栈与队列](DataStructure/Src/DS_2_StackAndQueue) +* [字符串](DataStructure/Src/DS_3_String) +* [树与二叉树](DataStructure/Src/DS_4_TreeAndBinaryTree) +* [图](DataStructure/Src/DS_5_Graph) +* [查找](DataStructure/Src/DS_6_Search) +* [排序](DataStructure/Src/DS_7_Sort) +##### 编程语言 +虽然都是.cpp文件,但其中的语法既有C++的语法也有部分C的语法!如果想要C++版本的源码,可以参考我学习数据结构时写的一些数据结构的C++版本源码![传送门](https://github.com/KimYangOfCat/Data_Structure) 在此~ + +#### [思维导图](DataStructure/MindMap/) ++ [王道书籍上的思维导图](DataStructure/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](DataStructure/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](DataStructure/MindMap/CSKaoYanVIPMindMap) + +#### [PPT](DataStructure/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**数据结构**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + + +### [计算机组成原理](/ComputerOrganization/) + +#### [思维导图](ComputerOrganization/MindMap/) ++ [王道书籍上的思维导图](ComputerOrganization/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](ComputerOrganization/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](ComputerOrganization/MindMap/CSKaoYanVIPMindMap) + +#### [PPT](ComputerOrganization/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**计算机组成原理**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + +持续更新中~ +### [操作系统](OperatingSystem) + +#### [思维导图](OperatingSystem/MindMap/) ++ [王道书籍上的思维导图](OperatingSystem/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](OperatingSystem/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](OperatingSystem/MindMap/CSKaoYanVIPMindMap) + +持续更新中~ +#### [PPT](OperatingSystem/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**操作系统**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + +### [计算机网络](ComputerNetwork) + +#### [思维导图](ComputerNetwork/MindMap/) ++ [王道书籍上的思维导图](ComputerNetwork/MindMap/BookMindMap) ++ [视频教程PPT中的思维导图](ComputerNetwork/MindMap/PPTMindMap) ++ [王道论坛VIP学员独享的思维导图](ComputerNetwork/MindMap/CSKaoYanVIPMindMap) + +持续更新中~ +#### [PPT](ComputerNetwork/PPT) +`PPT` 文件夹下存放的是 2021 王道考研**计算机网络**视频课程的 PPT,以供大家快速查找知识点或着复习视频内容! + + +### 总结 +408四门科目,除了数据结构有一些代码的实操之外,其余三门课程都是以理论为主,所以学习它们的过程中还是建议以书本为主。 +即便是数据结构,在408的考试时数据结构也只是要求写出算法逻辑就好,并不要求代码有可执行性,所以对于一些喜欢敲代码的小伙伴, +不能一味沉浸在用键盘敲代码的状态中。为了提前适应考试,还是提前适应在纸上写代码的感觉。因为日常敲代码的过程中,智能的IDE会给你提供很大的帮助, +你只需要记住核心逻辑,但是在纸上写代码, 一些基本的语法还是🉐️ 熟悉,并能默写出来。 + +## 视频教程 ++ [数据结构](https://www.bilibili.com/video/BV1b7411N798) ++ [计算机组成原理](https://www.bilibili.com/video/BV1BE411D7ii) ++ [操作系统](https://www.bilibili.com/video/BV1YE411D7nH) ++ [计算机网络](https://www.bilibili.com/video/BV19E411D78Q) + +所有视频教程均来源于王道考研B站官方账号,视频大部分为旧版内容,但其实知识要点都是一样的,值得学习。其中也包含了部分新版视频,全部新版视频为收费内容,虽然白嫖很香😜 ,但建议在经济条件允许的条件下,支持正版👍🏻 ~ + +## 辅导书籍 + +### 王道系列 + +王道系列起源于[王道考研论坛](http://cskaoyan.com/),从它的论坛中,你能找到不少经验贴,非常值得关注!而王道系列辅导书籍,题量充足,知识点全面,可能更适合科班考研🈶️ 一定专业课基础的同学。 + +需要2021王道高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8D) 中下载。 +### 天勤系列 + +天勤系列,相比于王道更注重基础知识,,但是题量并没有王道的多。也正是由于它更注重基础,所以也许它更适合跨考计算机的同学。 + + +但是总的来说,辅导资料这一块儿还是适合自己的最好。所以对自己的知识储备有较为清晰的认识也许对你复习 408 更有帮助。 + +需要2021天勤高清无水印PDF,可至 [Release](https://github.com/KimYangOfCat/2021-CSPostgraduate-408/releases/tag/%E8%BE%85%E5%AF%BC%E4%B9%A6%E7%B1%8Dv1) 中下载。 + +## 教材 + +| 数据结构
严薇敏 | 计算机组成原理
唐朔飞 | 操作系统
汤子瀛 | 计算机网络
谢希仁 | 计算机网络
自顶向下方法 | +| :----------------------------------------------------------: | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| ![数据结构](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/DS0.jpg) | ![计算机组成原理](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CO0.jpg) | ![操作系统](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/OS0.png) | ![计算机网络](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN1.png) | ![计算机网络·自顶向下方法](https://cdn.jsdelivr.net/gh/KimYangOfCat/CSPostgraduate-408-2021/imgs/book/CN0.jpg) | + +## 真题 +干净无水印的真题资源十分稀少可贵,在搜集的过程中,作者尽力找了一些干净无水印的资源,奈何个人力量有限,其中有些真题资源的质量仍不如人意。 + +目前本仓库只收录了[408 真题](408Exam),如果你有其他专业课或者更干净无水印的真题资源,欢迎提交 PR 或者在 issues 中提交相关资源的下载链接,感激不尽~ + +## 下载: + +~~### 镜像仓库:~~ + +~~本仓库与[ gitee 上的 CSPostgraduate-408-2021 仓库]()互为镜像仓库,保持同步更新。~~ + +~~若因网络问题无法在其一下载,可切换至另一仓库进行尝试~~ + +>由于仓库收录的资源越来越多,仓库体积已经超过 1.5GB,超过了 Gitee 单仓库体积上限,故无法保持再同步更新,非常抱歉~ +> +>后面,作者会不定期手动将本仓库打包至下文中的网盘中,大家可尝试下载~ + +### 其他下载途径: + +若因网络原因无法下载 Release 与真题中的资源,可点击下方网盘链接下载相应的资源: + +> 链接: [https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA](https://pan.baidu.com/s/1pa2kQHhsvp9XaJSCS1v-xA) 提取码: hdqb +> +> 若网盘链接失效,可在 issues 中提醒作者更新嗷~ + +## 🔥 贡献 + +看到这里了,如果觉得对你有所帮助的话,不妨给本仓库点个 Star ⭐ ️吧! + +如果你有新的内容 📜 想要贡献到本仓库或者发现了本仓库的一些错误 🐛 ,👏🏻 欢迎阅读[贡献文档](CONTRIBUTE.md)提交Pr~ + +## 🍰 赞赏 +如果你觉得本仓库帮助到了你,欢迎你点击上方的 +[Sponsor](https://cdn.jsdelivr.net/gh/KimYangOfCat/KimYangOfCat/img/sponsor.png) +按钮来赞助作者,这将会给作者更多更新的动力,感谢~ + +## ❤️ 致谢 +欢迎你前来占据前排 👏🏻 ~ + +## 许可证 本仓库采用GPL许可证,希望能为开源世界贡献一份力量~ \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index 0adc0f8..ec514c7 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,25 +1,25 @@ -#!/usr/bin/env sh - -# 确保脚本抛出遇到的错误 -set -e - -# 生成静态文件 -yarn build - -# 进入生成的文件夹 -cd 408Notes/.vuepress/dist - -# 如果是发布到自定义域名 -# echo 'www.example.com' > CNAME - -git init -git add -A -git commit -m 'deploy' - -# 如果发布到 https://.github.io -# git push -f git@github.com:/.github.io.git master - -# 如果发布到 https://.github.io/ - git push -f git@github.com:KimYangOfCat/2021-CSPostgraduate-408.git master:gh-pages - +#!/usr/bin/env sh + +# 确保脚本抛出遇到的错误 +set -e + +# 生成静态文件 +yarn build + +# 进入生成的文件夹 +cd 408Notes/.vuepress/dist + +# 如果是发布到自定义域名 +# echo 'www.example.com' > CNAME + +git init +git add -A +git commit -m 'deploy' + +# 如果发布到 https://.github.io +# git push -f git@github.com:/.github.io.git master + +# 如果发布到 https://.github.io/ + git push -f git@github.com:KimYangOfCat/2021-CSPostgraduate-408.git master:gh-pages + cd - \ No newline at end of file diff --git a/imgs/README.md b/imgs/README.md index f342fc6..b60336a 100644 --- a/imgs/README.md +++ b/imgs/README.md @@ -1 +1 @@ -# 存放本项目所有能用到的图片 +# 存放本项目所有能用到的图片 diff --git a/package.json b/package.json index 4be9125..8b1102f 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ -{ - "name": "Vuepress", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "scripts": { - "dev": "vuepress dev 408Notes", - "build": "vuepress build 408Notes" - }, - "devDependencies": { - "vuepress": "^1.5.3" - }, - "dependencies": { - "@vssue/api-github-v4": "^1.4.0", - "@vssue/vuepress-plugin-vssue": "^1.4.6", - "@vuepress/theme-default": "^1.5.3" - } -} +{ + "name": "Vuepress", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "dev": "vuepress dev 408Notes", + "build": "vuepress build 408Notes" + }, + "devDependencies": { + "vuepress": "^1.5.3" + }, + "dependencies": { + "@vssue/api-github-v4": "^1.4.0", + "@vssue/vuepress-plugin-vssue": "^1.4.6", + "@vuepress/theme-default": "^1.5.3" + } +}