串,数组和广义表

2.1.求next和nextval的实现

代码:

int next_one(char *str, int len) {int result = 1;if(len == 1 || len == 0) return len;for (size_t i = 1; i < len; i++){      if(compare(str, str+len-i, i)) {result = i+1;//break;}}return result;
}int next(char *str, int *arr) {int count = size(str);if(count == 1) {arr[0] = 0; return count;}for (size_t i = 0; i < count; i++)//i = len{arr[i] = next_one(str, i);}return count;
}int nextval(char *str, int *arr) {int count = size(str);int k = 0;if(count == 1) {arr[0] = 0; return count;}for (size_t i = 0; i < count; i++)//i = len{k = next_one(str, i);//if(str[i] == str[k-1]) {arr[i] = 0; } else {arr[i] = k;}}return count;
}int compare(char *src_str, char *dist_str, int len) {for(int i = 0; i < len; i++) {if(src_str[i] != dist_str[i]) return 0;}return 1;
}

输出结果:

2.2展现t和p的匹配过程

  1. p的nextval值

 

  1. KMP的匹配过程

代码:

int KMP(char *src, char *pat) {int len_s = size(src);int len_p = size(pat);int next[100];nextval(pat, next);int j = 0;for(int i = 0; i < len_s; i++) {if(src[i] == pat[j]) {j++;} else {j = next[j];}printf("i = %d, j = %d\n", i, j);if(j == len_p) return i-len_p+1;}return -1;
}

输出结果:

 

2.4 广义表的定义

代码:

#include "stdio.h"typedef char* AtomType;
typedef enum{ATOM, LIST} ElemTag;
typedef struct
{ElemTag tag;union node{AtomType atom;struct{struct GLnode *head,*tail;}ptr;};
}GLnode;void init(GLnode *node);
void head(AtomType str);
void tail();
void traverse(GLnode *node);void main() {GLnode node;init(&node);//traverse(node);}void init(GLnode *node) {GLnode glnode = *node;glnode.tag=1;GLnode head;head.tag = 0;head.atom = "apple\0";GLnode tail;//tail listtail.tag = 1;glnode.ptr.head = &head;glnode.ptr.tail = &tail;GLnode head1,tail1;head1.tag = 1;tail1.tag = 0;tail1.atom = "pear\0";tail.ptr.head = &head1;tail.ptr.tail = &tail1;GLnode head2,tail2;head2.tag = 0;tail2.tag = 1;head2.atom = "orange\0";head1.ptr.head = &head2;head1.ptr.tail = &tail2;GLnode head3,tail3;head3.tag = 0;tail3.tag = 0;head3.atom = "strawberry\0";tail3.atom = "banana\0";head2.ptr.head = &head3;head2.ptr.tail = &tail3;traverse(&glnode); }void head(GLnode node, AtomType str) {if (node.tag){/* code */}}void traverse(GLnode *node) {if(!node->tag) {printf("The elem is %s\n", node->atom);} else {traverse(node->ptr.head);traverse(node->ptr.tail);}
}

 

3.1 统计字符串中的个数

分析:

1存放字符的数据结构需要动态地添加结点,所以选择链表保存;

2遍历字符串,然后判断链表中是否已经存在,如果不存在,新添加一个结点插入到队列;

如果存在,结点中地统计变量加1.

3 最后把链表地内容输入到文件中。

代码:

#include "stdio.h"typedef struct
{char ch;int count;struct lnode *next;
}lnode;void init(lnode *list);
void count(lnode *list, char *str);
void insert(lnode *list, char ch);
void print(lnode *list);
void write_file(lnode *list);
void num_to_str(int num, char *str);
void main() {lnode list;char *str = "ahfAJOFJIOhoahf832977689  ofj___";init(&list);count(&list, str);//print(&list);write_file(&list);}void init(lnode *list) {list->next = NULL;
}void count(lnode *list, char *str) {lnode *node = list;while (*str){if(*str >= 'A' && *str <= 'Z' || *str >= 'a' && *str <= 'z' || *str >= '0' && *str <= '9') {while (node->next){node = node->next;if(node->ch == *str) {node->count++;break;}}if(!node->next) {lnode *l_node = (lnode *) malloc (sizeof(lnode));l_node->ch = *str;l_node->count = 1;node->next = l_node;l_node->next = NULL;}}str++;node = list;}}void print(lnode *list) {while (list->next){list = list->next;printf("%c", list->ch);}}void write_file(lnode *list) {FILE *file = fopen("count.txt", "a");while (list->next){list = list->next;char str[20];str[0] = list->ch;str[1] = ':';char *p = str+2;num_to_str(list->count, p);fputs(str, file);}fclose(file);
}void num_to_str(int num, char *str) {int count = 0;for(int i = 0; num != 0; i++) {str[i] = num % 10 + '0';num = num / 10;count++;}str[count] = '\n';str[count+1] = 0;
}

输出结果:

3.2 递归实现字符串逆序

代码:

 

#include "stdio.h"void reverse(char *str, int i, int j);
void swap(char *a, char *b);
int size(char *str);
void main() {char *str = "abcd";int i = 0;int j = size(str) - 1;reverse(str, i, j);}void reverse(char *str, int i, int j) {if(i > j) return;swap(&str[i], &str[j]);reverse(str, i+1, j-1);
}void swap(char *a, char *b) {char temp;temp = *a;*a = *b;*b = temp;
}int size(char *str) {int length = 0;while(*str++) {length++;}return length;
}

输出结果:

3.3 像字符串中插入字符串

分析:

s0           n-1 n           s_len

                t0       t_len

s0           n-1 n            t_len+n-1     s_len+t_len

1.n = s_len-1

2.n<s_len-1, 先搬n到s_len-1的元素到n+t_len, 直到s_len+t_len-1.

3.再填充t0-n,  从n到n+t_len-1.

代码:

#include "stdio.h"void insert(char *s, char *t, int n);
int size(char *str);
void main() {char s[200] = "abcdefg";char t[200] = "xyz";int n = 3;insert(s, t, 3);printf("The string is %s", s);}void insert(char *s, char *t, int n) {int s_len = size(s);int t_len = size(t);s[s_len+t_len] = 0;for(int i = s_len-n-1; i >= 0; i--) {s[n+t_len+i] = s[n+i];}for(int i = 0; i < t_len; i++) {s[n+i] = t[i];}
}int size(char *str) {int length = 0;while(*str++) {length++;}return length;
}

 输出结果:

 

3.4.分S1为S1和S2.

分析:S1 len1

         S2 len2 = n

         S3 len3 = len1-n.

代码:

#include "stdio.h"void format(char *s1, char *s2, char *s3, int n);
int size(char *str);
void main() {char s1[200] = "abcdefgadfadfad";char s2[200];char s3[200];int n = 10;format(s1, s2, s3, n);printf("The string is %s,%s,%s", s1, s2, s3);}void format(char *s1, char *s2, char *s3, int n) {int count = size(s1);int j = 0;for(int i = 0; i < count; i++) {if(i < n) {s2[i] = s1[i];} else {s3[j++] = s1[i];}}s2[n] = 0;s3[j] = 0;
}int size(char *str) {int length = 0;while(*str++) {length++;}return length;
}

输出结果:

3.5. 求解二维数组是否有重复元素

代码:

#include "stdio.h"int same_elem_matrix(int *a[3], int m, int n);void main() {int a1[3] = {1,3,5};int a2[3] = {2,4,6};int a3[3] = {25,7,9};int *a[3] = {&a1,&a2,&a3};same_elem_matrix(a, 3, 3);}int same_elem_matrix(int *a[3], int m, int n) {int **p = a;for(int i = 0; i < m*n; i++) {for(int j = 0; j < 3; j++) {for(int k = 0; k < 3; k++) {if(i/m == j && i%n == k)break;if(*(*(p+i/m)+i%n) == a[j][k]) {printf("yes! the matrix has same elem.");return 1;}}}}printf("no! the matrix has no same elem.");   return 0;
}

输出结果:

 

3.6. 正负数分离

分析:

申请a[n],b[n]记录A[n]的正负分布情况。

代码:

#include "stdio.h"void check_number(int *A, int length);void main() {int a[10] = {-1,-3,5,2,-5,9,2,3,-10,-29};check_number(a, 10);for(int i = 0; i < 10; i++) {printf("%d,", a[i]);}
}void check_number(int *A, int length) {int b[10],c[10];int j = 0;int k = 0;for(int i = 0; i < length; i++) {if(A[i] >= 0) {b[j++] = A[i];} else {c[k++] = A[i];}}k = 0;for(int i = 0; i < length; i++) {if(i < j)A[i] = b[i];else A[i] = c[k++];}
}

输出结果:

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

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

相关文章

nodeJs用ffmpeg直播推流到rtmp服务器上

总结 最近在写直播项目 目前比较重要的点就是推拉流 自己也去了解了一下 ffmpeg FFmpeg 是一个开源项目&#xff0c;它提供了一个跨平台的命令行工具&#xff0c;以及一系列用于处理音频和视频数据的库。FFmpeg 能够执行多种任务&#xff0c;包括解封装、转封装、视频和音频…

国际化日期(inti)

我们可以使用国际化API自动的格式化数字或者日期&#xff0c;并且格式化日期或数字的时候是按照各个国家的习惯来进行格式化的&#xff0c;非常的简单&#xff1b; const now new Date(); labelDate.textContent new Intl.DateTimeFormat(zh-CN).format(now);比如说这是按照…

DC-DC转换效率的影响因素和优化方向

一. 定义 DC-DC转换效率的定义是输入与输出功率之比&#xff1a; η P O U T P I N P O U T P O U T P L O S S η\frac{P_{OUT}}{P_{IN}}\frac{P_{OUT}}{P_{OUT}P_{LOSS}} ηPIN​POUT​​POUT​PLOSS​POUT​​ 其中POUT代表输出功率&#xff0c;PIN代表输入功率&#x…

ADS FEM 仿真设置

1、EM Simulator 选择FEM。 2、在layout界面打开的EM功能&#xff0c;这里不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建&#xff0c;过孔可以在叠层处右键添加。 5、端口需要设置GND layer。 6、设置仿真频率。 7、Output plan。 8、Options 设置 介质…

ITSS认证流程详解!

ITSS,是Information Technology Service Standards的缩写&#xff0c;中文意思是信息技术服务标准&#xff0c;是在工业和信息化部、国家标准化委的领导和支持下&#xff0c;由ITSS工作组研制的一套IT服务领域的标准库和一套提供IT服务的方法论。 国家标准化委的领导和支持下&…

你好 GPT-4o!

你好 GPT-4o&#xff01; OpenAI公司宣布推出 GPT-4o&#xff0c;这是OpenAI的新旗舰模型&#xff0c;可以实时对音频、视觉和文本进行推理。 GPT-4o&#xff08;“o”代表“o​​mni”&#xff09;是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意组合作…

[AI]-(第1期):OpenAI-API调用

文章目录 一、OpenAI API中使用GPT-3.5-turbo模型充值方式使用模型计费方式价格说明相关限制和条款 二、接入一个OpenAI API流程1. 获取OpenAI API 密钥2. 集成ChatGPT到小程序3. 处理用户输入4. 调用OpenAI API5. 返回回复至小程序6. 持续优化7. Postman请求示例 三、通用AI客…

43k Star!推荐一款功能强大的开源笔记软件!

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

每日学习 - APK解包

文章目录 APK的定义解析APKAPK 是什么每个文件的意义classes.dexAndroidManifest.xmlassetslibres & resources.arsc 反编译工具apktool apk解包 秒了~ APK的定义 APK&#xff08;Android Package Kit&#xff09;是用于部署和分发Android操作系统上应用程序的软件包格式。…

pytest教程-47-钩子函数-pytest_sessionfinish

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_sessionstart钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_sessionfinish钩子函数的使用方法。 pytest_sessionfinish 钩子函数在 Pytest 测试会话结束时调用&#xff0c;…

自然语言处理通用框架BERT原理解读

相关代码见文末 1.概述 问题背景: 传统Seq2Seq模型的局限性: 早期的机器翻译和文本生成任务常采用基于循环神经网络(RNN)的序列到序列(Seq2Seq)模型,这类模型在处理长序列时容易遇到梯度消失/爆炸问题,导致训练效率低,难以捕捉长期依赖。 RNN网络的问题: RNN及其变…

中国农业大学:学硕11408复试线上涨40分,今年还会持续涨吗?中国农业大学计算机考研考情分析!

中国农业大学&#xff08;China Agricultural University&#xff09;&#xff0c;简称“中国农大”&#xff0c;坐落于中国首都北京&#xff0c;由中华人民共和国教育部直属&#xff0c;中央直管副部级建制&#xff0c;水利部、农业部和北京市共建&#xff0c;位列国家“双一流…

【PostgreSQL支持中文的全文检索插件(zhparser)】

PostgreSQL本身是支持全文检索的&#xff0c;提供两个数据类型&#xff08;tsvector,tsquery&#xff09;&#xff0c;并且通过动态检索自然语言文档的集合&#xff0c;定位到最匹配的查询结果。其内置的默认的分词解析器采用空格进行分词&#xff0c;但是因为中文的词语之间没…

Vue3:分类管理综合案例实现

综合案例 实现分类管理功能 路由 在main.js中引入router 访问根路径’/后跳转到布局容器 加载布局容器后重定向到’/nav/manage’ 加载我们需要的组件 这样可以在布局容器中切换功能模块时,只对需要修改的组件进行重新加载 const router createRouter({history: create…

APP封装后防止破解的全方位策略

移动应用开发完成后&#xff0c;封装&#xff08;编译打包&#xff09;是发布前的重要步骤。然而&#xff0c;一旦APP发布&#xff0c;就可能面临被逆向工程破解的风险&#xff0c;从而导致源代码泄露、数据被盗取等严重后果。 本文将介绍一系列实用的策略和技术&#xff0c;帮…

邦注科技 工业冷水机的风冷和水冷的区别介绍

工业冷水机在工业生产中扮演着重要角色&#xff0c;特别是在需要精确控制温度的应用中。风冷式冷水机和水冷式冷水机是两种常见的类型&#xff0c;它们之间存在一些显著的区别。 热交换的来源不同&#xff1a; 风冷式冷水机&#xff1a;热交换的来源是气体。它采用空气冷却方…

STL——vector容器【动态数组】

vector基本概念 功能&#xff1a;vector数据结构和数组非常相似&#xff0c;也成为单端数组 头文件&#xff1a;<vector> vector与普通数组的区别&#xff1a;不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展 动态扩展&#xff1a; 并不是在原空间之后续…

代理IP与网络隐私

随着科技的发展&#xff0c;越来越多的人开始享受网络的便利&#xff0c;人们逐步在社交媒体上分享自己的生活。这些公开信息是可以被所有人浏览观看的&#xff0c;但是也会存在部分隐私信息我们并不想要被人知晓&#xff0c;这就牵扯到网络隐私保护问题。 代理IP对于网络隐私保…

链接表存储图(C++注释详解): 构建表 深度优先遍历 (DFS)

链接表的结构体单元: #define size 100 typedef struct node {int idx;//下一个节点的索引int wt;//权重, 也可根据实际情景存储边的信息struct node* next; }Node; Node* hd[size]; // 存储图的邻接表 链接表的的构建: int main() {int n, m;cin >> n >> m; //…

【2024系统架构设计】回顾历史,查缺补漏篇 ③

前言 hello,大家好: 💡💡💡 我们一起来备考软考高级系统架构设计师吧,本专栏提供综合知识、案例科目、论文(论点和部分示例范文)等内容,包括知识点总结和记忆小妙招哦。 🚀🚀🚀 可以减少资料查找和收集的时间,提高效率,我们一起集中精力学习干货吧! 💡…