导航菜单
首页 >  考研数据结构代码题评分标准  > 考研/面试 数据结构大题必会代码(理解+记忆,实现使用C++,STL库)

考研/面试 数据结构大题必会代码(理解+记忆,实现使用C++,STL库)

文章目录一. 线性表1. 逆置顺序表所有元素2. 删除线性链表中数据域为 item 的所有结点3. 逆转线性链表(递归(快速解题)+非递归)4. 复制线性链表(递归)5. 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表二. 树1. 建立二叉树(从数组获取数据,递归+非递归)2. 二叉树的先序遍历(非递归算法)3. 二叉树的中序遍历(非递归算法)4. 二叉树的后序遍历(非递归算法,难点)5. 二叉树层序遍历6. 求二叉树的深度(递归算法)7. 求二叉树的深度(非递归算法)8. 求结点所在层次(非递归)9. 交换二叉树中所有结点的左右子树的位置(递归)10. 交换二叉树中所有结点的左右子树的位置(非递归)11. 删除二叉树中以某个结点为根结点的子树三. 查找1. 顺序查找的递归算法2. 折半查找3. 折半查找的递归算法4. 在按值递增排列且长度为 n 的线性表中折半查找并插入一元素5. 在按值递增排列且长度为 n 的线性表中折半查找值不小于 key 的最小元素四. 排序1. 插入排序2. 折半插入排序3. 冒泡排序4. 选择排序5. 快速排序6. 堆排序这些算法主要面向数据结构代码填空,算法设计题,复试上机,复试面试

其中这些代码是最基础需要掌握的部分

这篇博客的代码部分经过测试,如果你遇到代码的问题,可以联系我:

代码仓库地址

一. 线性表 1. 逆置顺序表所有元素

算法思想:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,……,依此类推。

#include using namespace std;/**using c++11 */void PrintVector(const vector &vet){for (auto &val : vet){cout next;delete cur;cur = next;}else{prev = cur;cur = next;}}// 验证第一个节点if (list->val == val){ListNode *head = list->next;delete list;list = head;}// 打印测试while (list != nullptr){cout next;delete head;return next;}// 递归解法ListNode *reverse(ListNode *head){if (head == nullptr || head->next == nullptr){return head;}ListNode *next = reverse(head->next);head->next->next = head;head->next = nullptr;return next;}// 非递归解法ListNode *reverse_display(ListNode *head){// 对头节点进行头插法ListNode *newHead = head;ListNode *node = head->next;newHead->next = nullptr;while (node != nullptr){ListNode *next = node->next;node->next = newHead;newHead = node;node = next;}return newHead;}void PrintList(ListNode *list){while (list != nullptr){cout next;}tail = tail->next;}tail->next = left == nullptr ? right : left;return head->next;}int main(int argc, char const *argv[]){ListNode *left = InitList({1, 2, 3, 4, 5});ListNode *right = InitList({2, 3, 4, 8});PrintList(MergeList(left, right));return 0;} 二. 树 1. 建立二叉树(从数组获取数据,递归+非递归)

注意,这里使用了更直观的打印二叉树的方式,在考研中不需要掌握。所以这里会把二叉树打印结果截图放进来

非递归创建树的思路是:先创建节点,将节点保存起来,最后修改指针即可

#include #include using namespace std;struct TreeNode{int val;TreeNode *left;TreeNode *right;TreeNode(int _val) : val(_val), left(nullptr), right(nullptr) {}};// 更好的二叉树打印(考研不需要掌握,为了打印树更直观),打印思路:https://blog.csdn.net/dodamce/article/details/130925799?spm=1001.2014.3001.5501struct PrintCur{int deep(TreeNode *root){if (root == nullptr){return 0;}int left = deep(root->left);int right = deep(root->right);return max(left, right) + 1;}void dfs(TreeNode *root, vector &ret, int row, int col, const int &deep){if (root == nullptr){return;}ret[row][col] = to_string(root->val);if (root->left != nullptr)dfs(root->left, ret, row + 1, col - (1 right, ret, row + 1, col + (1 right);if (parent->left == root){parent->left = nullptr;}else{parent->right = nullptr;}return node;}}nodes.push(root);parent = root;root = root->left;}parent = nodes.top();nodes.pop();root = parent->right;}return root;}int main(int argc, char const *argv[]){BTree tree({1, 2, 3, 4, 5, 6, 7});tree.PrintTree();PrintCur print;print.printTree(DeleteSubtree(tree.root, 3));cout

相关推荐: