吉首大学--23级题目讲解

news2024/9/21 21:34:02

7-1 单链表基本操作

在 C/C++ 中,.(点)和 ->(箭头)运算符用于访问结构体或类的成员,但它们的使用场景不同。

1. . 运算符

  • . 运算符用于访问结构体或类的成员,通过对象或结构体变量直接访问。

2. -> 运算符

  • -> 运算符用于访问指向结构体或类的指针的成员。它简化了通过指针访问成员的过程。
示例:
struct Point {
    int x,y;
};

Point p;         // 创建结构体变量 p
p.x = 10;       // 使用 . 访问成员 x
p.y = 20;       // 使用 . 访问成员 y
cout << "Point: (" << p.x << ", " << p.y << ")" << endl;  // 输出: Point: (10, 20)

Point* p1 = (Point*)malloc(sizeof(Point)); // 创建一个指向 Point 的指针
//Point* pPtr = new Point;  C++可以这么写
p1->x = 10;             // 使用 -> 访问成员 x
p1->y = 20;             // 使用 -> 访问成员 y
cout << "Point: (" << p1->x << ", " << p1->y << ")" << endl;  // 输出: Point: (10, 20)
free(p1);				// 释放内存
//delete p1;            C++可以这么写

3. 区分 &*

  • & 运算符

    • 主要用于获取变量的地址(取地址运算符)。
    • 例如:int* p = &a; 表示将变量 a 的地址赋给指针 p
  • * 运算符

    • 主要用于指针的声明和解引用(取值运算符)。
    • 在声明中,int* p 表示 p 是一个指向 int 类型的指针。
    • 在解引用时,*p 表示访问指针 p 所指向的内存地址中的值。
示例:
int a = 10;
int* p = &a;  // & 用于获取 a 的地址
cout << *p;   // * 用于解引用,输出 10
#include<bits/stdc++.h>
using namespace std;

// 定义节点结构体,包含一个整数和一个指向下一个节点的指针
struct node {
    int w;                 // 节点中存储的整数值
    struct node *next;     // 指向下一个节点的指针
};

typedef struct node Node;  // 为结构体 node 定义别名 Node

Node* head;               // 链表的头节点指针
Node* back;               // 链表的尾节点指针,用于快速在链表尾部插入
int len = 0;              // 链表的长度,动态记录节点数量

// 初始化链表,创建一个空的头节点
void ini() {
    head = (Node* )malloc(sizeof(Node));  // 分配内存给头节点
    back = head;                          // 初始化 back 指向头节点
    head->next = NULL;                    // 头节点的 next 设为 NULL,表明链表为空
}

// 根据位置 k 查找第 k 个节点
Node* find(int k) {
    Node* temp = head;                    // 从头节点开始遍历
    for (int i = 1; i <= k; i++) {        // 移动到第 k 个节点
        temp = temp->next;
    }
    return temp;                          // 返回第 k 个节点的指针
}

// 在节点 k 之后插入一个新节点,节点值为 x
void insert(Node* k, int x) {
    Node* temp = (Node* )malloc(sizeof(Node));  // 分配新节点的内存
    temp->w = x;                                // 将值 x 存入新节点
    temp->next = k->next;                       // 新节点的 next 指向 k 的下一个节点
    k->next = temp;                             // 将 k 的 next 指向新节点
    if (k == back) back = temp;                 // 如果插入的是最后一个节点,更新 back
}

// 删除节点 k 的下一个节点
void deleteNode(Node* k) {
    Node* temp = k->next;                // 暂存要删除的节点
    k->next = k->next->next;             // 跳过被删除的节点,直接链接到下一个节点
    free(temp);                          // 释放被删除节点的内存
}

int main() {
    int n;
    cin >> n;                            // 读取初始链表长度 n
    ini();                               // 初始化链表
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;                        // 读取每个节点的值
        insert(back, x);                 // 在链表尾部插入节点
        len++;                           // 更新链表长度
    }

    int m;
    cin >> m;                            // 读取操作次数 m
    while (m--) {
        int op;
        cin >> op;                       // 读取操作类型
        if (op == 0) {                   // 插入操作
            int k, d;
            cin >> k >> d;               // 读取插入位置 k 和插入的值 d
            if (k <= 0 || k > len) continue;  // 边界条件检查,跳过非法位置
            insert(find(k), d);          // 在第 k 个节点之后插入值为 d 的新节点
            len++;                       // 更新链表长度
        } else {                         // 删除操作
            int k;
            cin >> k;                    // 读取删除位置 k
            if (k <= 0 || k > len) continue;  // 边界条件检查,跳过非法位置
            deleteNode(find(k - 1));     // 删除第 k 个节点
            len--;                       // 更新链表长度
        }
    }

    // 打印并释放链表中所有节点的内存
    while (head->next != NULL) {
        cout << head->next->w << " ";    // 打印当前节点的值
        Node* temp = head->next;         // 暂存当前节点的指针
        head->next = head->next->next;   // 跳过当前节点,指向下一个节点
        free(temp);                      // 释放当前节点的内存
    }
    
    return 0;
}

单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)_带头结点的单链表的元素的创建、查找、插入、删除等基本操作-CSDN博客

7-2矩阵运算

#include<bits/stdc++.h>
using namespace std;
bool check(int i,int j,int n){
    if(i+j==n+1) return 0;//副对角线
    if(j==n||i==n) return 0;//最后一列 最后一行
    return 1;
}
int main(){
    int n,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            int x;
            cin>>x;
            if(check(i,j,n)){
                ans+=x;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

7-3 删除重复字符

注意!输入空格!!!

#include<bits/stdc++.h>
using namespace std;
int main(){
    vector<char> v;
    set<char> s;
    char c;
    while((c=getchar())!='\n'){
        if(!s.count(c)){//查看原集合中是否存在,即之前是否出现过
            s.insert(c);
            v.push_back(c);
        }
    }
    sort(v.begin(),v.end());//排序
    for(char i:v){
        cout<<i;
    }
    cout<<endl;
    return 0;
}

字符不会超过128(ASCII码),开桶

#include<bits/stdc++.h>
using namespace std;
int tong[200];
int main(){
    char c;
    memset(tong,0,sizeof(tong));
    while((c=getchar())!='\n'){
        tong[(int)c]++;
    }
    for(int i=0;i<128;i++){
        if(tong[i]){
            cout<<(char)(i);
        }
    }
    return 0;
}

C++常用STL

  1. vector 动态数组
  2. stack
  3. queue 队列
  4. deque 双端队列
  5. priority_queue 优先队列
  6. map 映射(键值对)
  7. set 集合

C++ STL详解超全总结(快速入门STL)-CSDN博客

7-4 统计字符出现次数

ASCII(American Standard Code for Information Interchange)码表是用于表示文本字符的标准编码系统。它为每个字符分配了一个唯一的整数值,以便计算机能够在不同设备之间交换文本数据。ASCII码表最初设计用于表示英文字符,但后来扩展了其他符号。

ASCII码表

一共有128个字符,开桶即可。

#include<bits/stdc++.h>
using namespace std;
int cnt[200];
int main(){
    char c;
    while((c=getchar())!='\n'){
        cnt[(int)c]++;
    }
    c=getchar();//小心空格,再次提醒
    cout<<cnt[(int)c]<<endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双虚拟机架构:在Linux上分别部署Nginx/PHP和MariaDB

在第一台虚拟机上安装 Nginx 和 PHP 更新软件包索引: sudo apt update安装 Nginx: sudo apt install nginx -y启动 Nginx 服务: sudo systemctl start nginx安装 PHP 和 Nginx 的 PHP 支持: sudo apt install php-fpm php-common -y配置 Nginx 以使用 PHP: 查看 PHP…

docker搭建个人网盘,支持多种格式,还能画图,一键部署

1&#xff09;效果 2&#xff09;步骤 2.1&#xff09;docker安装 docker脚本 bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrorsmain/DockerInstallation.sh)docker-compose脚本 curl -L "https://github.com/docker/compose/releases/late…

PostgreSQL(PG)(二十二)

&#x1f33b;&#x1f33b; 目录 &#x1f33b;&#x1f33b; 一、PostgreSQL 简介1.1、PG 的历史1.2、PG的社区1.2.1 纯社区1.2.2 完善的组织结构1.2.3 开源许可独特性 1.3 、PostgreSQL与MySQL的比较 二、PostgresQL的下载安装2.1、Windows上安装 PostgreSQL2.2、远程 连接 …

新能源汽车数据大全(产销数据\充电桩\专利等)

新能源汽车数据大全&#xff08;产销数据\充电桩\专利等&#xff09; 来源&#xff1a;全国各省市统计年鉴、统计公报、国家能源署、中国汽车行业协会&#xff0c;各类汽车统计年鉴、中国电动汽车充电基础设施促进联盟等 1、汽车分品牌产销(95家车企&#xff0c;768个车型&am…

项目第六弹:虚拟机管理模块、路由匹配模块

项目第六弹&#xff1a;虚拟机管理模块、路由匹配模块 一、虚拟机管理模块的设计1.什么是虚拟机&#xff1f;2.借助MySQL来理解一下3.如何整合&#xff1f;【埋下伏笔】 二、RabbitMQ为何要有虚拟机1.从业务角度来讲2.步步探索1.优点2.结合业务适用场景和需求3.发掘真正的原因4…

图神经网络模型的扩展(5)--1

1.深层图卷积网络 前面讲到&#xff0c;随着图卷积网络层数的叠加&#xff0c;其表达力反而会丢失&#xff0c;因为过深的图卷积网络会造成过平滑的现象。同时&#xff0c;在标准数据集上的实验结果似乎也可以佐证&#xff1a;在我们常用的Cora 等图数据集上&#xff0c;如图卷…

【AcWing】875. 快速幂

#include<iostream> using namespace std; typedef long long LL;LL qmi(int a,int b,int p){LL res1%p;//%p是为了p1的时候&#xff0c;余数是0while(b){if(b&1) resres*a%p;//位数是1的b>>1;aa*(LL)a%p;//a*a再modp是为了防止溢出}return res; }int main(){i…

IO 多路转接之 select

文章目录 IO 多路转接之 select1、初识 select2、select 函数及其参数解释3、select 函数返回值4、select 的执行过程5、socket 就绪条件5.1、读就绪5.2、写就绪5.3、异常就绪 5、select 的特点6、select 的缺点7、select 使用实例7.1、只检测检测标准输入输出7.2、使用 select…

YOLOv8改进 | 自定义数据集训练 | AirNet助力YOLOv8检测

目录 一、本文介绍 二、AirNet原理介绍 2.1 对比基降解编码器&#xff08;CBDE&#xff09; 2.2 降解引导修复网络&#xff08;DGRN&#xff09; 三、yolov8与AirNet结合修改教程 3.1 核心代码文件的创建与添加 3.1.1 AirNet.py文件添加 3.1.2 __init__.py文件添加 3…

ONES 与华为云深度合作,共同打造企业智能研发管理平台

9月20日&#xff0c;在华为全联接大会&#xff08;HUAWEI CONNECT 2024&#xff09;上&#xff0c;深圳复临科技有限公司&#xff08;以下简称“ONES”&#xff09;与华为云计算技术有限公司&#xff08;以下简称“华为云”&#xff09;正式签署合作协议&#xff0c;双方将在企…

Java线程池实现父子线程上下文传递以及MDC追踪

文章目录 1. 总览2. 代码实现2.1. 日志配置2.2. ThreadPoolExecutor 父子线程信息不传递2.3. ContextPassThreadPoolExecutor 父子线程信息传递 3. 整体架构 1. 总览 在公司的项目中&#xff0c;为了解决慢接口问题&#xff0c;主线程经常会引入线程池并发调用下游的 RPC&…

pg_start_backup

pg_start_backup()函数在主库上发起一个在线备份&#xff0c;命令执行成功后&#xff0c;将数据文件拷贝到备份接口中 select pg_start_backup(full0918,false,false); 以上会话不要关闭&#xff0c;复制数据目录。 cp -r /pgdata/data/postgres-f66f5f7a/ /opt/qfusion/mnt/st…

Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 DiffUtil 是一个用于计算两个列表之间差异的实用程序类&#xff0c;它可以帮助 RecyclerView 以更高效的方式更新数据。使用 DiffUtil 可以减少…

行业落地分享:大模型 RAG 难点与创新应用

最近这一两周不少互联网公司都已经开始秋招面试了 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解惑答疑…

网络信息传输安全

目录 机密性-加密 对称加密 非对称加密 身份认证 摘要算法和数据完整性 数字签名 签名验签 数字证书 申请数字证书所需信息 数字证书的生成 数字证书的应用 https协议 数字证书的申请 数据在网络中传输过程中&#xff0c;怎么做到 数据没有被篡改&#xff1f;hash算…

【Python深度学习系列】基于Flask将深度学习模型部署到web应用上(完整案例)

这是我的第356篇原创文章。 一、引言 使用 Flask 在 10 分钟内将您自己训练的模型或预训练的模型&#xff08;VGG、ResNet、Densenet&#xff09;部署到网络应用程序中。以图像分类模型为例&#xff0c;本地直接部署和本地使用docker部署两种方式实现。 二、实现过程 2.1 准备…

扎克伯格的未来愿景:用智能眼镜引领数字社交新时代

Meta Connect 2024大会前夕&#xff0c;创始人马克扎克伯格的90分钟播客访谈&#xff0c;为我们描绘了Meta未来的蓝图。这场访谈&#xff0c;不仅是大会的热身&#xff0c;更是对科技未来的一次深刻洞察。 人工智能 - Ai工具集 - 未来办公人的智能办公生活导航网 扎克伯格的未…

实操学习——题目的管理

实操学习——题目的管理 一、基础配置二、权限控制三、分页1. PageNumberPagination分页器2. LimitOffsetPagination分页器3.总结 四、题目操作模块1. 考试2. 题目练习——顺序刷题3. 模拟考试 补充&#xff1a;前端调用接口写法 本文主要讲解题目的管理案例 1.题目的基本增删改…

FastAPI 的隐藏宝石:自动生成 TypeScript 客户端

在现代 Web 开发中&#xff0c;前后端分离已成为标准做法。这种架构允许前端和后端独立开发和扩展&#xff0c;但同时也带来了如何高效交互的问题。FastAPI&#xff0c;作为一个新兴的 Python Web 框架&#xff0c;提供了一个优雅的解决方案&#xff1a;自动生成客户端代码。本…

必知!5大AI生成模型

大数据文摘授权转载自数据分析及应用 随着Sora、diffusion等模型的大热&#xff0c;深度生成模型再次成为了研究的焦点。这类模型&#xff0c;作为强大的机器学习工具&#xff0c;能够从输入数据中学习其潜在的分布&#xff0c;并生成与训练数据高度相似的新样本。其应用领域广…