首页 > 其他分享 >7.2

7.2

时间:2024-07-02 16:31:01浏览次数:1  
标签:int graph 7.2 nodeNum str visited trans

今天把数据结构的第一阶段作业写完了 学习用时2小时 代码用时1小时

首先搜资料然后 手敲复刻代码

遇到的问题 是重新移盘之后的visual studio不能用的 重新安装后 也会报错 需要去注册表删除路径重置。

明天准备学习大数据技术。

下面是代码

7-13 中缀表达式转换为后缀表达式并求值

#include <bits/stdc++.h>
using namespace std;
char suffix[22];//存放后缀表达式 
stack <char> trans;//转换栈 
stack <int> jisuan;//计算栈
string str;
int N;

int caculate(int x, int y, char z){//求值要用到的运算函数 
    switch(z){
        case '-': return y-x;//注意这里的顺序 
        case '+': return x+y;
        case '*': return x*y;
        case '/': return y/x;//注意这里的顺序 
    }
}

bool op(char a, char b){//如果a优先级高于b就返回true 
    if((b =='+' || b == '-') && (a == '*' || a == '/'))
        return true;
    if((b =='*' || b == '/') && (a == '*' || a == '/'))//其实可以不写,只不过更好理解
        return false;
    return false;
}

bool isop(char a){//检验字符是否为运算符 
    if(a=='-' || a=='+' || a=='*' || a=='/')
        return true;
    return false;
}

void get_suffix(){//获取后缀表达式
    int i=0, j=0;
    while(str[i] != '\0'){
        if(isdigit(str[i])) suffix[j++] = str[i];
        else if(str[i] == '(') trans.push(str[i]);
        else if(str[i] == ')'){
            while(trans.top() != '('){
                suffix[j++] = trans.top();
                trans.pop();
            }
            trans.pop();
        }
        else if(isop(str[i])){
            if(trans.empty() || trans.top()=='(' || op(str[i],trans.top()))
                trans.push(str[i]);
            else if(!op(str[i],trans.top())){
                while((trans.top()!='(') && !op(str[i], trans.top()) && !trans.empty()){//要特别注意这里的判断条件 
                    suffix[j++] = trans.top();
                    trans.pop();
                    if(trans.empty())
                        break;
                }
                trans.push(str[i]);
            }
        }
        i++;
    }
    while(!trans.empty()){
        suffix[j++] = trans.top();
        trans.pop();
    }
    cout << suffix << " ";//输出答案 
}

void suffix_ans(){
    int i=0, ans=0;
    while(suffix[i] != '\0'){
        if(isdigit(suffix[i]))
            jisuan.push(suffix[i]-'0');
        else{
            int x = jisuan.top();
            jisuan.pop();
            int y = jisuan.top();
            jisuan.pop();
            ans = caculate(x, y, suffix[i]);
            jisuan.push(ans);
        }
        i++;
    }
    cout << ans << endl;
    jisuan.pop();
}

int main(){
    cin >> N;
    while(N--){
        memset(suffix, '\0', sizeof(suffix));
        str = "\0";
        cin >> str;
        get_suffix();        
        suffix_ans();
    }
    return 0;
}

7-14 矩阵运算

#include <iostream>
using namespace std;
int main(){
    int n;
    cin>>n;//读取矩阵大小
    int max[n][n];//创建一个大小为n*n的二维数组表示矩阵
    //从输入中读取矩阵的值
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>max[i][j];
        }
    }
    int sum=0;
    //计算不包括副对角线最后一列最后一行的和
    for(int i=0;i<n-1;i++){//分别排除最后一行和最后一列
        for(int j=0;j<n-1;j++){
            if(i+j!=n-1){//排除副对角线的值
                sum+=max[i][j];//将元素加和
            }
        }
    }
    cout<<sum;//输出总和
    return 0;
}

7-15 列出连通集

#include <iostream>
#include <vector>
#include <queue>
 
using namespace std;
 
 
class Graph{
public:
    vector<vector<int>> m_graph;
    int m_nodeNum;
    int m_edgeNum;
    Graph(int nodeNum, int edgeNum): m_graph(vector<vector<int>>(nodeNum,vector<int>(nodeNum, 0))), m_nodeNum(nodeNum),
    m_edgeNum(edgeNum){}
    void insert(int node1, int node2);
};
 
void Graph::insert(int node1, int node2) {
    m_graph[node1][node2] = m_graph[node2][node1] = 1;
    m_edgeNum++;
}
 
void DFS(int startNode, Graph& graph, vector<int>& path, vector<bool>& visited){
    int curNode = startNode;
    visited[curNode] = true;
    path.push_back(curNode);
    for(int i = 0; i < graph.m_nodeNum; i++){
        if(graph.m_graph[curNode][i] == 1 && !visited[i])
            DFS(i, graph, path, visited);
    }
}
 
void BFS(int startNode, Graph& graph, vector<int>& path, vector<bool>& visited){
    queue<int> que;
    visited[startNode] = true;
    que.push(startNode);
    while(!que.empty()){
        int curNode = que.front();
        que.pop();
        path.push_back(curNode);
        for(int i = 0; i < graph.m_nodeNum; i++){
            if(graph.m_graph[curNode][i] == 1 && !visited[i]){
                visited[i] = true;
                que.push(i);
            }
        }
    }
}
 
int main(){
    int nodeNum, edgeNum;
    cin >> nodeNum >> edgeNum;
    Graph graph(nodeNum, edgeNum);
    for(int i = 0; i < edgeNum; i++){
        int node1, node2;
        cin >> node1 >> node2;
        graph.insert(node1, node2);
    }
    vector<vector<int>> DFSPaths;
    vector<bool> visited(nodeNum, false);
    for(int i = 0; i < nodeNum; i++){
        if(!visited[i]){
            vector<int> path;
            DFS(i, graph, path, visited);
            DFSPaths.push_back(path);
        }
    }
    vector<vector<int>> BFSPaths;
    fill(visited.begin(), visited.end(), false);
    for(int i = 0; i < nodeNum; i++){
        if(!visited[i]){
            vector<int> path;
            BFS(i, graph, path, visited);
            BFSPaths.push_back(path);
        }
    }
    for(auto path : DFSPaths){
        cout << "{ ";
        for(int node : path){
            cout << node << " ";
        }
        cout << "}" << endl;
    }
 
    for(auto path : BFSPaths){
        cout << "{ ";
        for(int node : path){
            cout << node << " ";
        }
        cout << "}" << endl;
    }
 
 
}
 
 

7-16 重排链表

#include<iostream>
#include<vector>
#include<cstdio>

using namespace std;

const int N = 100010;

//利用结构体存链表
struct Node{
    int date, next;
}node[N];

int res[N];

int main(){
    int st, n;
    cin >> st >> n;
    
    for (int i = 0; i < n; i ++){
        int a, b, c;
        cin >> a >> b >> c;
        node[a].date = b;
        node[a].next = c;
    }
    
    int cnt = 0;
    //从头节点依次遍历找到每一个结点的地址
    for (int i = st; i != -1; i = node[i].next) res[cnt ++] = i; 
    
    vector<int> v; //用来存放最终的链表
    int l = 0, r = cnt - 1;
    while (l <= r){
        if (l == r) {
            v.push_back(res[l]);
            break;
        } //当结点数为奇数时需要特判一下,不然会使同一个结点存两次
        v.push_back(res[r]);
        r --;
        v.push_back(res[l]);
        l ++;
    }
    
    for (int i = 0; i < v.size(); i ++){
        if (i != v.size() - 1)
            printf("%05d %d %05d\n", v[i], node[v[i]].date, v[i + 1]);
        else
            printf("%05d %d -1\n", v[i], node[v[i]].date);
    }
    
    return 0;
}

 

标签:int,graph,7.2,nodeNum,str,visited,trans
From: https://www.cnblogs.com/galileo9527/p/18280098

相关文章

  • 2024.7.2
    党同伐异可以发现,每次只会是\(a_i\)最大或者\(a_i\)最小的人被淘汰,所以留下的肯定是从小到大排序后的一段区间。还可以发现一个单调性,越靠近左边就越不可能票左边,所以可以通过二分求出左右两边各被票了多少。#include<bits/stdc++.h>usingnamespacestd;const......
  • 2024.7.2 集训
    ###数位DP1.记录:1.是否顶上限;2.是否当前填了的都是前导$0$;3.当前位是否是从左往右数第一位。(2和3是两种做法,2是在Query里只调用一次DFS,3是在Query里枚举第一个非$0$位调用多次DFS)。2.记忆化的数组可以不用记所有内容。3.注意DFS返回时要返回res,而不是记......
  • PHP8.0正常,PHP7.2,PHP7.3报错Connection failed: SQLSTATE[HY000] [2054] The server
    构建网站API接口的时候,使用了PDO进行数据库连接,原文如下 测试后发现,PHP8.0版本下,可以正常输出,但是PHP7.2和7.3则会报错:Connectionfailed:SQLSTATE[HY000][2054]Theserverrequestedauthenticationmethodunknowntotheclient经查验,发现因为所用的PHP7.2和7.3版本不支......
  • QT6.7.2 MSVC源码编译 静态库 动态库
    QT6.7.2MSVC源码编译静态库动态库也可以参考官方的文档https://doc.qt.io/qt-6/build-sources.html环境搭建为了操作更有可复制性,这里在虚拟机中采用全新安装的系统进行配置。系统镜像为:en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_2.iso安装VisualStudio......
  • lidar3607.2 雷达点云数据处理软件功能介绍
    V7.2.220240511获取软件安装包联系邮箱:[email protected],资源源于网络,本介绍用于学习使用,如有侵权请您联系删除!1.平台修复对不包含枝下高特征的单木进行枝下高提取时,生成的treedb枝下高字段产生异常记录,查看属性表时软件崩溃的问题;2.林业修复使用treedb作为种子点进行......
  • PE工具 -- EasyU(优启通) v3.7.2024.0515 VIP版
    软件简介优启通(EasyU),也称为EU,是由IT天空开发的一款专业U盘启动盘制作工具。它以U盘作为使用载体,提供了一种便携、高效的系统预安装环境(PE)。优启通的特点包括简约易操作的用户界面,以及广泛的硬件兼容性。它支持BIOS(Legacy)与UEFI两种启动模式,并在主流硬件的基础上兼容早期多数......
  • 模拟集成电路设计系列博客——7.2.3 每阶段k-bit流水线ADC
    7.2.3每阶段k-bit流水线ADC通过增加中间级增益和每级的比较器可以在每级解析多于1比特。信号流图类似之前介绍的每次迭代2比特的逐次逼近型ADC。一个通用的k比特级如下图所示:k比特副ADC的非线性可以通过增加额外的比较器通过数字方式来校正,类似于每级1.5比特架构[Lewis,1992]......
  • OmniGraffle for mac(思维导图软件)v7.23中文正式版
    OmniGraffle是一款专业的图形设计工具,主要用于创建流程图、组织结构图、网络图、原型设计等。它具有丰富的模板和符号库,用户可以根据需要自定义符号和模板,方便快捷地创建各种类型的图形设计。OmniGraffle还支持多种导出格式,包括PDF、PNG、JPG、SVG等,并且可以与其他软件进行无缝......
  • 实战:干掉高德地图7.2.0版iOS客户端的反动态调试保护
    沙梓社snakeninny315年2月 高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。苹果自带的地图采用的就是高德的数据,足见高德之权威 昨天突发奇想,对高德地图上中一个官方不提供的功能产生了浓厚的兴趣,试图通过hack的方式来实现这个功能。谁知刚架上LLDB......
  • 7.2k star的万能视频解析下载插件
    今天给大家介绍一个超级厉害的浏览器插件,可以解析各个平台网页视频——猫抓。项目简介猫抓(cat-catch)是一款资源嗅探扩展插件,他能够帮助你筛选列出当前页面的资源。简单来说,当你打开任意一个带有视频的网页,猫抓就可以解析视频的真实地址,协助你下载视频。猫抓这个名字很有......