数据结构关键代码

链表

合并链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归删除值为X的结点(不带头结点)

在这里插入图片描述
在这里插入图片描述

递归从尾到头输出链表L中的值

在这里插入图片描述
在这里插入图片描述

删除单链表最小值结点

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

链表原地转置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使带头结点单链表递增有序

在这里插入图片描述

在这里插入图片描述

两个单链表的第一个公共结点

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

将两个循环单链表 ,链表头指针分别为h1,h2,将链表h2链接到链表h1之后,保证链接后链表仍然保持循环链表形式

在这里插入图片描述
在这里插入图片描述

栈和队列

共享栈

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

括号匹配

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

栈模拟队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

队列模拟栈

方法一
在这里插入图片描述

class MyStack {
public:
    queue<int> queue1;
    queue<int> queue2;
    /** Initialize your data structure here. */
    MyStack() {
    }
    /** Push element x onto stack. */
    void push(int x) {
        queue2.push(x);
        while (!queue1.empty()) {
            queue2.push(queue1.front());
            queue1.pop();
        }
        swap(queue1, queue2);
    }
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int r = queue1.front();
        queue1.pop();
        return r;
    }
    /** Get the top element. */
    int top() {
        int r = queue1.front();
        return r;
    }
    /** Returns whether the stack is empty. */
    bool empty() {
        return queue1.empty();
    }
};

在这里插入图片描述

方法二
在这里插入图片描述

class MyStack {
public:
    queue<int> q;
    /** Initialize your data structure here. */
    MyStack() {
    }
    /** Push element x onto stack. */
    void push(int x) {
        int n = q.size();
        q.push(x);
        for (int i = 0; i < n; i++) {
            q.push(q.front());
            q.pop();
        }
    }
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int r = q.front();
        q.pop();
        return r;
    }
    /** Get the top element. */
    int top() {
        int r = q.front();
        return r;
    }
    /** Returns whether the stack is empty. */
    bool empty() {
        return q.empty();
    }
};

在这里插入图片描述

后缀表达式求值(选看*)

输入:tokens = [“4”,“13”,“5”,"/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

class Solution {
public:
    int calculate(int a,int b,string op){
            int res;
            switch(op[0]){
                case '+':res= a+b;break;
                case '-':res= a-b;break;
                case '*':res= a*b;break;
                case '/':res= a/b;break;
                default:break;
            }
            return res;
    }
     bool isNum(string str)
    {
        if((str[0] == '*' || str[0] == '/' || str[0] == '+' || str[0] == '-') 
        && str.size() == 1)
        {
            return false;
        }
        return true;
    }
    int evalRPN(vector<string>& tokens) {
        stack<int> s;
        int a,b;
        for(int i=0;i<tokens.size();i++){
            if(isNum(tokens[i]))
            {
                s.push(atoi(tokens[i].c_str()));
            }
            else{
                b = s.top();
                s.pop();
                a = s.top();
                s.pop();
                s.push(calculate(a,b,tokens[i]));          
            } 
        }
        return s.top();
    }
};

Brute-Force

在这里插入图片描述
在这里插入图片描述

KMP

Next
在这里插入图片描述
在这里插入图片描述
Nextval
在这里插入图片描述
在这里插入图片描述

先序遍历

递归
在这里插入图片描述
非递归
在这里插入图片描述在这里插入图片描述

中序遍历

递归

在这里插入图片描述

非递归
在这里插入图片描述

后序遍历

递归
在这里插入图片描述

非递归
在这里插入图片描述在这里插入图片描述

层序遍历

在这里插入图片描述

树的高度

层序遍历求树高
在这里插入图片描述
递归求树高

int Depth(BiTree T){
    if(T==NULL)return 0;
    else{
       m=depth(T->lchild);
       n=depth(T->lchild);
    }
    if(m>n)return (m+1);
    else return(n+1);
}

从下到上,从右到左遍历树

在这里插入图片描述
在这里插入图片描述

判断完全二叉树

在这里插入图片描述
在这里插入图片描述

递归交换左右子树

在这里插入图片描述

计算双分支结点数

在这里插入图片描述

先序遍历第k个结点的值

在这里插入图片描述
在这里插入图片描述

将二叉树叶节点从左到右顺序连成一个链表

在这里插入图片描述

相似二叉树

在这里插入图片描述
在这里插入图片描述

计算WPL

先序遍历
在这里插入图片描述

二叉树转表达式

在这里插入图片描述

在这里插入图片描述

判断二叉排序树

在这里插入图片描述

判断结点在排序二叉树中层次

在这里插入图片描述

判断平衡二叉树

在这里插入图片描述
在这里插入图片描述

输出二叉排序树中最大最小值

在这里插入图片描述

从大到小输出二叉排序树的值

在这里插入图片描述
在这里插入图片描述

DFS

在这里插入图片描述

BFS

在这里插入图片描述

单源最短路径

在这里插入图片描述

查找

顺序查找

在这里插入图片描述

折半查找

在这里插入图片描述

排序

直接插入排序

在这里插入图片描述

折半插入排序

在这里插入图片描述

希尔排序

在这里插入图片描述

冒泡排序

在这里插入图片描述
在这里插入图片描述

快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单选择排序

在这里插入图片描述

堆排序

在这里插入图片描述
在这里插入图片描述

归并排序

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值