当前位置: 首页 > news >正文

个人学习编程(3-24) 数据结构

括号的匹配:

if((s[i]==')' && now=='(') || (s[i]==']' && now=='[')){

#include <bits/stdc++.h>

using namespace std;

int main() {
    char s[300];
    scanf("%s",&s);
    int i;
    int len = strlen(s);
    stack <char> st;
    for (i = 0; i < len; i++)
    {
        if(!st.empty()){
            char now = st.top();
            if((s[i]==')' && now=='(') || (s[i]==']' && now=='[')){
                st.pop();
            }
            else{
                st.push(s[i]);
            }
        }
        else{
            st.push(s[i]);
        }
    }
    if (!st.empty())
    {
        printf("NO!");
    }
    else{
        printf("GOOD!");
    }
    return 0;
}

 哈夫曼树(果堆排序):

有n堆果子,看看如何分类

输入包括两行:第一行是一个整数n(1<=n<=10000),表示果子的种类个数。

第二行包含了n个整数,用空格分隔,第i个整数表示整数ai(1<=ai<=20000)是第i堆果子的数目。

eg:输入 3

                1 2 9

        输出:15

解法1:

如果数量比较少,可以用sort函数来排序,每次将前面两位加完之后继续排,继续加,直到数组只有一个值。

解法2:

#include <bits/stdc++.h>
using namespace std;

struct node{
    int x;
    node(int a) {x = a;} //构造函数方便赋值
};

//定义优先队列的排序:
bool operator < (const node& a,const node& b){
    return a.x > b.x;
}

int main(){
    priority_queue <node> q;
    int n,x;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
         cin >> x;
         q.push(x);
    }
    int ans = 0;
    while (q.size() > 1)
    {
        node num1 = q.top();
        q.pop();
        node num2 = q.top();
        q.pop();
        ans += (num1.x + num2.x);
        q.push(node{num1.x + num2.x});
    }
    cout << ans;
    return 0;
    
}

其中的q.push(node{num1.x + num2.x}) 是前面把num1 出队和num2出队之前,把他们的值保存下来再相加

二叉树的建立和遍历:

按照先序先输入 二叉树的节点,没有的按0表示。

再输出 第一行是先序 第二行是中序 第三行是后序变量 第四输出叶子结点

#include <bits/stdc++.h>
using namespace std;

typedef struct node{ //注意typedef不能忽略
    char data;
    struct node *lchild,*rchild;
}*BitTree;
//先序遍历的方式创建二叉树:
void CreatBitTree(BitTree &T){
    char c;
    cin >> c;
    if(c == '0'){
        T=NULL;
    }
    else{
        T = new node;
        T->data = c;
        CreatBitTree(T->lchild);
        CreatBitTree(T->rchild);
    }
}

//将二叉树按照先序输出:
void PreOrderTraverse(BitTree T){
    if(T != NULL){
        cout << T->data << ' ';
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
}

//将二叉树按照中序输出:
void InOrderTraverse(BitTree T){
    if (T != NULL)
    {
        InOrderTraverse(T->lchild);
        cout << T->data << ' ';
        InOrderTraverse(T->rchild);
    }
}

//将二叉树按照后序输出:
void PostOrderTraverse(BitTree T){
    if (T != NULL)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        cout << T->data << ' ';
    }
    
}

//二叉树的叶子节点数:
int Leaf(BitTree T){
    if(T == NULL) return 0;
    if(T->rchild == NULL && T->lchild == NULL) return 1;
    return Leaf(T->lchild) + Leaf(T->rchild);
}

//二叉树的深度:
int Deepth(BitTree T){
    if (T == NULL) return 0;
    int x = Deepth(T->lchild);
    int y = Deepth(T->rchild);
    return max(x,y) + 1;
}

int main() {
    BitTree T;
    CreatBitTree(T);
    PreOrderTraverse(T); cout << endl;
    InOrderTraverse(T); cout << endl;
    PostOrderTraverse(T); cout << endl;
    cout << Leaf(T) << endl;
    return 0;
}

相关文章:

  • vite中sass警告JS API过期
  • 智能语言交互,AI 对话引领生活变革
  • HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
  • el-select下拉框,搜索时,若是匹配后的数据有且只有一条,则当失去焦点时,默认选中该条数据
  • Vue2与Vue3中TS子组件传值给父组件
  • Chair Assembly Process
  • 服务器入门笔记
  • 2.5 微分
  • Apache Dubbo Pixiu打造微服务生态的轻量级 API 网关
  • 【测试工具】如何使用 burp pro 自定义一个拦截器插件
  • 3.23-libevent
  • Android Studio常见问题解决
  • 2024年认证杯SPSSPRO杯数学建模C题(第二阶段)云中的海盐全过程文档及程序
  • HTML云原生:概念、技术与应用的全面解析
  • STM32学习笔记之keil使用记录
  • 模式搜索+扩散模型:FlowMo重构图像Token化的技术革命
  • 2025年河北省第二届职业技能大赛网络安全项目 模块 B样题任务书
  • 运动仿真——phased.Platform
  • StarRocks vs Doris:深度剖析与选型分析
  • DeepSeek底层揭秘——EPLB
  • 国家卫健委有关负责人就白皮书发布答记者问
  • 结婚这件事,年轻人到底怎么想的?
  • 外媒称菲方允许菲官员窜台,国台办:应停止在台湾问题上玩火
  • 辽宁辽阳市白塔区一饭店发生火灾,当地已启动应急响应机制
  • 看见“看得见的手”,看见住房与土地——读《央地之间》
  • 三大白电巨头去年净利近900亿元:美的持续领跑,格力营收下滑