数据结构(C语言) 实验-栈与字符串
删除子串
字符串采用带头结点的链表存储,设计算法函数void delstring(linkstring s, int i,int len)
在字符串s中删除从第i个位置开始,长度为len的子串。
void delstring(linkstring s, int i, int len)
{linkstring p,q,r;int cnt = 1;p = s->next;while (cnt < i && p) { //查找起始点q = p;p = p->next;cnt++;}if (!p) {return;} else {cnt = 1;while (cnt < len && p) { //查找终点p = p->next;cnt++;}if (!p) {return;} else {if (!q) { //子串在s前端r = s;s = p->next;} else { //子串在中后端r = q->next;q->next = p->next;}p->next = NULL;while (r) {p = r;r = r->next;free(p);}}}
}
朴素字符串模式匹配
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node
{ int data;struct node *next;
}linknode;
typedef linknode *linklist;
/*朴素模式匹配算法,返回t中s中第一次出现的位置,没找到则返回-1,请将程序补充完整*/
int index(char s[],char *t)
{int i,k,j;int n,m;n=strlen(s); //主串长度m=strlen(t); //模式串长度for (i=0;i<n-m+1;i++){k=i;j=0;while (j<m){if (s[k]==t[j]) {k++;j++;}elsebreak;}if (j==m) return i;}return -1;
}
KMP算法
#define maxsize 100
typedef struct{char str[maxsize];int length ;
} seqstring;
/*求模式p的next[]值,请将函数补充完整*/
void getnext(seqstring p,int next[])
{int i = 0, j = -1;next[0] = -1;while (i < p.length) {if (j == -1 || p.str[i] == p.str[j]) {next[++i] = ++j;} else {j = next[j];}}for (i = 0; i < p.length; i++) {printf("%3d",next[i]);}
}
/*快速模式匹配算法,请将函数补充完整*/
int kmp(seqstring t,seqstring p,int next[])
{int i = 0, j = 0;while (i < t.length && j < p.length) {if (j == -1 || t.str[i] == p.str[j]) {i++;j++;} else {j = next[j];}}return j == p.length ? i - p.length : -1;
}
后缀表达式求值
#include <stdio.h>
#include "stack.h" /*引入自定义的字符栈结构*/
/**********************/
/* 判断是否为运算符 */
/*********************/
int is_op(char op){switch(op){ case '+':case '-':case '*':case '/':return 1;default:return 0;}}
/****************************/
/* 判断运算符的优先级 */
/****************************/
int priority(char op){switch(op){case '(':return 0;case '+':case '-':return 1;case '*':case '/':return 2;default: return -1;}}/*********************************/
/*中缀表达式,转换为后缀表达式 */
/*********************************/
void postfix(char e[],char f[])
{seqstack opst;initstack(&opst);int i = 0, j = 0;push(&opst, '\0');while (e[i] != '\0') {if ((e[i] >= '0' && e[i] <= '9') || e[i] == '.') {f[j++] = e[i];// 数字} else if (e[i] == '(') {push(&opst, e[i]);// 左括号压入栈} else if (e[i] == ')') {while (stacktop(&opst) != '(') {f[j++] = pop(&opst); // 依次出栈}pop(&opst);} else if (is_op(e[i])) {f[j++] = ' '; // 空格分开while (priority(stacktop(&opst)) >= priority(e[i])) {f[j++] = pop(&opst); // 优先级高出栈}push(&opst, e[i]);}i++;}while (!stackempty(&opst)) {f[j++] = pop(&opst);}f[j] = '\0';
}/****************************************/
/* 将数字字符串转变成数值 */
/****************************************/
float readnumber(char f[],int *i)
{float x = 0.0;int k = 0;//整数部分while (f[*i] >= '0' && f[*i] <= '9') {x = x * 10 + (f[*i] - '0');(*i)++;}//小数部分if (f[*i] == '.') {(*i)++;while (f[*i] >= '0' && f[*i] <= '9') {x = x * 10 + (f[*i] - '0');(*i)++;k++;}}while (k != 0) {x = x / 10.0;k = k - 1;}printf("\n*%f*",x);return x;
}/****************************************/
/* 后缀表达式求值程序 */
/****************************************/
double evalpost(char f[]){ double obst[50]; /*操作数栈*/int i=0,top=-1;/*请将本函数补充完整*/double x;while (f[i] != '\0') {if (f[i] >= '0' && f[i] <= '9') {// 转为浮点数obst[++top] = readnumber(f,&i);//printf("%lf",obst[top]);} else if (f[i] == ' ') { //跳过空格i++;} else if (f[i] == '+') { //四则运算x = obst[top--];obst[top] = x + obst[top];i++;} else if (f[i] == '-') {x = obst[top--];obst[top] = obst[top] - x;i++;} else if (f[i] == '*') {x = obst[top--];obst[top] = x * obst[top];i++;} else if (f[i] == '/') {x = obst[top--];obst[top] = obst[top] / x;i++;}}//printf("%lf",obst[top]);return obst[top];}/*
主程序:输入中缀表达式,经转换后输出后缀表达式
*/
int main(){char e[50],f[50];int i,j;printf("\n\n请输入中缀表达式:\n");gets(e);postfix(e,f);i=0;printf("\n\n对应的后缀表达式为: [");while (f[i]!='\0')printf("%c",f[i++]);printf("]");printf("\n\n计算结果为 :");printf("\n\n%f",evalpost(f));return 0;
}
附录
#include <stdlib.h>
#include <stdio.h>
typedef char datatype;
typedef struct node
{ datatype data;struct node *next;
}linknode;
typedef linknode *linkstring;
/**********************************/
/*函数名称:creat() */
/*函数功能:尾插法建立字符单链表 */
/**********************************/
linkstring creat()
{ linkstring head,r,s;datatype x;head=r=(linkstring)malloc(sizeof(linknode));head->next=NULL;printf("请输入一个字符串(以回车结束):\n");scanf("%c",&x);while (x!='\n'){ s=(linkstring)malloc(sizeof(linknode));s->data=x;r->next=s;r=s;scanf("%c",&x);}r->next=NULL;return head;
}
/**********************************/
/*函数名称:print() */
/*函数功能:输出字符串 */
/**********************************/
void print(linkstring head)
{ linkstring p;p=head->next;printf("List is:\n");while(p){ printf("%c",p->data);p=p->next;}printf("\n");
}/*释放单链表的内容*/
void delList(linkstring head)
{linkstring p=head;while (p){head=p->next;free(p);p=head;}
}
相关文章:
数据结构(C语言) 实验-栈与字符串
删除子串 字符串采用带头结点的链表存储,设计算法函数void delstring(linkstring s, int i,int len) 在字符串s中删除从第i个位置开始,长度为len的子串。 void delstring(linkstring s, int i, int len) {linkstring p,q,r;int cnt 1;p s->next;wh…...
xLua Lua访问C#注意事项(七)
调用成员方法 注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法 loacl camera CS.UnityEngine.GameObject.Find("Main Camera") --冒号语法 camera:GetComponent("Camera") --点语法 camera.GetComponent(camera,"…...
vue3+antv2.x的画布
报错信息: TypeError: Cannot destructure property component of registry_1.shapeMaps[node.shape] as it is undefined. at VueShapeView.renderVueComponent (http://192.168.10.35:9029/node_modules/.vite/deps/antv_x6-vue-shape.js?v49fbfab0:5569:19…...
Docker部署ubuntu1804镜像详细步骤
Docker部署ubuntu1804镜像详细步骤 ubuntu镜像库地址:https://hub.docker.com/_/ubuntu/tags?page1&ordering-name 拉取镜像(默认为最新版本): docker pull ubuntu或,拉取指定版本镜像: docker pull…...
mac 卸载第三方输入法
输入法设置里的移除,并不是真的卸载,点击还是能添加回来 在活动监视器里强制退出此输入法在访达界面使用快捷键 ShiftcommandG在弹出的对话框内输入以下路径(/资源库/Input Methods),再点击下面的前往找到你要卸载的输…...
可观察性在软件测试中的重要性
当今应用生态系统的需求和加速的数字化转型使可观察性成为人们关注的焦点。可观察性提供了对应用程序行为和技术生态系统的深入可见性,并支持更快、更明智的决策。由于缺乏可观察性,软件开发团队倾向于对生产系统行为、潜在性能瓶颈或未来故障场景做出假…...
Delphi TCP服务端监听端口获取客户端RFID网络读卡器上传的刷卡数据
本示例使用设备介绍:液显WIFI无线网络HTTP协议RFID云读卡器可编程实时可控开关TTS语-淘宝网 (taobao.com) unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, ScktComp, StdCtrls, ScktCom…...
javaSE学习笔记(一)概述、语法
目录 前言 一、概述 1.java语言发展史 2.Java语言版本 3.Java语言平台 4.Java语言特点 5.Java语言跨平台原理-可移植性 6.JRE和JDK的概述 7.JDK的下载和安装 7.1安装的细节 7.2可能出现的问题 7.3验证安装是否成功 8.JDK安装路径下的目录解释 9.path环境变量的作…...
接口开发之使用C#插件Quartz.Net定时执行CMD任务工具
C#制作定时任务工具执行CMD命令 概要准备知识点实现原理thinkphp配置winform执行CMD命令读取ini配置文件定时任务Quartz.Net 完整代码Job.csIniFunc.csForm1.csconfig.ini简易定时任务工具雏形 概要 很多时候写接口上线后还会遇到很多修改,类似JAVA,C#,delphi制作的…...
XSS脚本(存储型xss获取肉鸡的cookies)
XSS脚本(存储型xss获取肉鸡的cookies) 存储型XSS就是在能够提交上传的文本框中提交一些标签代码,这段代码被插入到页面中,肉鸡每次点击这个页面时都会有弹框弹出。(只要点击就会弹框) 反射性XSS顾名思义插入…...
【React】04.MVC模式和MVVM模式
React是Web前端框架 1、目前市面上比较主流的前端框架 ReactAngular(NG框架)Vue 主流的思想: 不在直接去操作DOM,而是改为“数据驱动思想” 操作DOM思想: 操作DOM比较消耗性能[主要原因就是,可能会导…...
调试代码0
dev_update_off () * read_image (Image, C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/smd/smd_on_chip_01.png) read_image (Image, D:/图像文件/图片/图片/基板/20230609-103004-0.bmp) get_image_size (Image, Width, Height) * dev_close_window () * de…...
【C++心愿便利店】No.12---C++之探索string底层实现
文章目录 前言一、写实拷贝(了解)二、string类常用接口实现2.1 成员变量2.2 默认构造函数2.3 拷贝构造函数2.4 operator2.5 operator[]2.6 c_str2.7 size()2.8 capacity() 三、迭代器的实现3.1 begin()和end()3.2 范围for 四、string类增删查改4.1 reser…...
Android Studio(列表视图ListView)
前言 前面在适配器章节,已经介绍了ListView的作用(干什么的),这节将主要介绍如何去设计ListView页面视图。 思考 列表视图需要些什么? 1. 列表项容器(装载各列表项的容器):<ListView/> 2. 列表项布局…...
让深度神经网络绘画以了解它们是如何工作的
一、说明 深度学习如此有效,这真是一个谜。尽管有一些关于深度神经网络为何如此有效的线索,但事实是没有人完全确定,并且深度学习的理论理解是一个非常活跃的研究领域。 在本教程中,我们将以一种不寻常的方式触及问题的一个小方面…...
https://www.jianshu.com/p/34bf240b85a9
https://www.jianshu.com/p/34bf240b85a9 https://www.eccee.com/soft-platform/991.html...
如何导出PPT画的图为高清图片?插入到world后不压缩图像的设置方法?
期刊投稿的时候,需要图片保持一定的清晰度数,那么我们怎么才能从PPT中导出符合要求的图片呢? 对于矢量图绘图软件所画的图,直接导出即可。 而PPT导出的图片清晰度在60pi,就很模糊。 整体思路: PPT绘图——…...
【Spring】Spring IOC DI
Spring IOC & DI IOC DI入门什么是Spring什么是容器什么是IOC IOC介绍传统程序开发解决方案 DI IOC详解Bean的存储Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储)Configuration(配置存储) 为什么需要这么多类注解类注解之间的关系方法注…...
一招解密网络流量瓶颈!
前言 我们曾介绍过观测云提供全面的基础设施监测方案(参见《全方位监控基础设施,坚实守护您的业务稳定!》),能够高效全面地帮助您实时观测所有的基础设施对象及云产品等,赋能您的业务稳定发展。今天我们将…...
某校帮签到小程序m 加密参数解析
小程序解密清参考我以前的文章 VX小程序逆向 js版本 function n(e, a) {var t (65535 & e) (65535 & a);return (e >> 16) (a >> 16) (t >> 16) << 16 | 65535 & t };function i(e, a, t, n, r, i, s) {return o(a & n | t &…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
