【C语言】语言篇——数组和字符串
C站的小伙伴们,大家好呀😝😝!我最近在阅读学习刘汝佳老师的《算法竞赛入门经典》,今天将整理本书的第三章——数组和字符串的一些习题,本章习题较多,下选取部分习题进行练习总结,在这里和大家分享,一起进步呀!✊✊✊
数组和字符串
- 逆序输出
- 开灯问题
- 回文字
- 习题
- 得分(score)
- 分子量(Molar Mass)
- 数数字(Digit Counting)
- 周期串 (Periodic Strings)
- DNA序列(DNA Consensus String)
- 思考
逆序输出
读入一些整数,逆序输出到一行中。已知整数不超过100个。
#include <stdio.h>
#include <string.h>
int maxn[105];//若数组较长则将其设为全局变量
int main (void)
{int i=0,x,k;memset(maxn,0,sizeof(maxn));//将数组清零while((scanf("%d",&x))==1) maxn[i++]=x;//先将x赋值给maxn[i],之后i++for (k=i-1;k>=0;k--)printf("%d ",maxn[k]);return 0; }
scanf()函数返回值
scanf()函数返回的是成功输入的变量的个数,当输入结束时,scanf()函数无法再次读取x,将返回0。
如何告诉程序输入结束了呢?
是按Enter/空格/TAB键吗?我们会发现,按Enter/空格/TAB键,并没有反应,这是因为程序正在等待输入。
在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter键。在Linux下,输入完毕后按Ctrl+D键即可结束输入。
大数组需要定义在函数体外的原因
大数组需要定义在函数体外的原因,全局变量在静态存储区内分配内存,而局部变量是在栈内分配内存空间的。C语言编写的程序会在运行期间创建一个堆栈段,用来保存函数的调用关系和局部变量。而在main函数内部定义大数组相当于在栈内需要一个很大的空间,会造成栈的溢出。
因此,当我们需要定义一个极大的数组时,最好在main 函数外部定义这个大数组。
开灯问题
有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭)依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k≤n≤1000。
样例输入:
7 3
样例输出:
1 5 6 7
分析:用a[1],a[2],a[3]……a[n]表示编号为1,2,3……n的灯是否开着。
#include <stdio.h>
#include <string.h>
int a[1000];
int main (void)
{int n,k,i,j;scanf("%d%d",&n,&k);memset(a,0,sizeof(a));//数组清零//0和1表示开灯和关灯两种状态for(i=1;i<=k;i++)//人for (j=1;j<=n;j++)//灯if (j%i==0){if (a[j]==0)a[j]=1;elsea[j]=0;}for(i=1;i<=n;i++)if (a[i]==1)printf("%d ",i);printf("\n");return 0;
}
0表示灯关的状态,1表示灯开的状态。从第一个人开始,判断是否是1~n编号的倍数,如果是的话,改变灯的状态,即原来是1,变为0;原来是0,变为1。
回文字
输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个字符的镜像如图所示(空白项表示该字符镜像后不能得到一个合法字符)。
输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文
串和镜像串(共4种组合)。每组数据之后输出一个空行。
样例输入:
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
样例输出:
NOTAPALINDROME – is not a palindrome.
ISAPALINILAPASI – is a regular palindrome.
2A3MEAS – is a mirrored string.
ATOYOTA – is a mirrored palindrome.
分析过程可以看这篇:【C语言】经典题目二
下面是代码实现:
#include<stdio.h>
#include<string.h>
int main (void)
{char s[128]={0};int i,j,k,n;int flagH=1,flagJ=1;const char a[80]="AEHIJLMOSTUVWXYZ12358";const char b[80]="A3HILJMO2TUVWXY51SEZ8";gets(s);n=strlen(s);//判断是否是回文串for(i=0,k=n-1;i<k;i++,k--){if (s[i]!=s[k]){flagH=0;break;}}//判断是否是镜像串for(i=0,k=n-1;i<k;i++,j--){for (j=0;s[j]!=0;j++){if (s[i]==a[j]){if (s[k]!=b[j]){flagJ=0;}}}if (flagJ==0) break;}//根据标志量判断if(flagH==1 && flagJ==1)printf("%s -- is a mirrored palindrome.",s);else if (flagH==1 &&flagJ==0)printf(" %s-- is a regular palindrome.",s);else if (flagH==0 && flagJ==1)printf("%s -- is a mirrored string.",s);else printf("%s-- is not a palindrome.",s);return 0;
}
习题
得分(score)
给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现
的O的个数,X的得分为0。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。
分析:对键盘输入的长串的每个字符进行判断。设置总和tot=0,若是X,则tot不累加。若是O,则需要判断前面O字符连续出现的个数。
#include<stdio.h>
int main (void)
{char a[80]={0};int tot=0,i,k;gets(a);for(i=0;a[i]!='\0';i++){if (a[i]=='O'){tot+=1;for (k=i-1;k>=0;k--){if (a[k]!='O') break;else tot+=1;}}}printf("%d\n",tot);return 0;
}
分子量(Molar Mass)
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分
别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的
分子量为94.108g/mol。
分析:对输入的分子式的每个元素进行循环,其中会有数字和’C’,‘H’,‘O’,'N’四个字母,而我们只对四个字母进行判断。若是的话,看其后的一位是否为数字,若是,需要此原子量×数字,若不是,只需加它本身就可以了。
这里需要解决的是,如果输入的字符数组a中的元素等于’C’或’H’或’O’或’N’,如何利用其对应的原子量?
这里用结构体解决比较方便。可以将’C‘与其原子量12.01进行“捆绑”,将’H‘与其原子量1.008进行“捆绑”,将’O‘与其原子量16.00进行“捆绑”,将’N‘与其原子量14.01进行捆绑。
#include<stdio.h>
struct Molar
{char atom;double mass;
};
int main (void)
{char a[30]={0};int i,k;double tot=0;gets(a);struct Molar b[4]={'C',12.01,'H',1.008,'O',16.00,'N',14.01};for (i=0;a[i]!='\0';i++)//遍历输入的a字符数组{for (k=0;k<=3;k++)if(a[i]==b[k].atom){if (a[i+1]>='1' && a[i+1]<='9')//判断字符其后一位是否为数字tot+=b[k].mass * (a[i+1]-'0');//注意分子式中的数字都是以字符型存入字符数组的elsetot+=b[k].mass;}}printf("%lf \n",tot);return 0;
}
数数字(Digit Counting)
把前n(n≤10000)个整数顺次写在一起:123456789101112…数一数0~9各出现多少次(输出10个整数,分别是0,1,…,9出现的次数)。
分析:利用sprintf()函数将1~10000输出到字符数组中。存入完毕后,对字符数组进行遍历即可。
关于memset()函数
memset()函数初始化是以一个字节为单位的,也就是说,对字符数组才能初始化为任意值。
memset()函数可以很方便将字符数组全部数组全部初始化为某一个值,例如:
c char a[20]; memset(a,'\0',sizeof(a))
将字符数组亲空。
#include<stdio.h>
#include<string.h>
char a[100000];
int main (void)
{int k=0,i;int b[10]={0};//用于记录1~9出现的次数char x;//记从键盘读入的数字字符memset(a,'\0',sizeof(a));//将字符数组清零scanf("%s",a);//对数组a进行遍历for(k=0;a[k]!='\0';k++)b[a[k]-'0']++;//输出数组bfor(k=0;k<=9;k++)printf("%d ",b[k]);return 0;
}
周期串 (Periodic Strings)
如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。
输入一个长度不超过80的字符串,输出其最小周期。
分析:对于一个字符串,其周期一定是字符串长度的因子,因此只对因子判断即可。
如何判断是否是周期呢?例如3为一个周期,则一定满足a[0]=a[0+3],a[1]=a[1+3],a[2]=a[2+3];
但是要做判断的话,满足的如上条件是仅仅不够的。例如会出现abcabcdddabcabcddd这种情况。所以我们需要对整个字符串进行判断。
#include <stdio.h>
#include <string.h>
int main (void)
{int i,k,len,n;int flag; //设置标志量char s[80];gets(s);len=strlen(s); for(i=1;i<=len;i++){if (len%i==0) //判断是否是因子//若是,判断能否为周期{flag=1;for (k=0;k<i;k++){for (n=1;n<=len/i-1;n++){if (s[k]!=s[k+n*i]) flag=0; }}}if (flag==1){printf("%d\n",i);break;}}return 0;
}
DNA序列(DNA Consensus String)
输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量
小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGTGCGAHamming距离为2(左数第1, 4个字符不同)。
输入整数m和n(4≤m≤50, 4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多
解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC。
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
后来发现的问题:都错题了!!!求一个DAN序列,这是重点!
我的问题是从输入的DAN序列中找DAN序列,使得到所有的序列的总Hanming距离最小。
如果把题目改成这样的基础版,下面是分析过程。
分析:
首先是要处理m个DAN序列的储存,我们可以利用二维数组进行存储(因为二维数组可以看作是很多个一维数组组成。)
其次是如何如何找出最优解。其实就是,第一个序列和剩下的所有的序列进行比较,然后出现不同的字符,……(这个和我们熟悉的选择排序是不一样的,因为选择排序是和它后面的每一个数字进行比较,而这个是和所有的进行比较。)
那么如何储存每个序列总Hamming距离呢?不妨可以放在一个数组中用来存放。
那么如何输出呢?我们需要边存储边记录,设置变量min,若在每一次的比较中,有总HAMMING距离小于min,那么将此赋值给min,并将此时的DAN序列拷贝到字符数组s中。最终输出s即可。
这里需要注意的是,题目要求如有多解,要求为字典序最小的解。所以我们可以试着从最后一个DAN序列开始循环。
#include<stdio.h>
#include<string.h>
int main(void)
{char a[50][1000]; //用来存储DAN序列,保证长度足够长char s[1000]; //用来存储最优DAN序列int b[50]={0}; //记录每个DAN序列的Hamming距离值int i=0,k,j;int m,n;//m行n列scanf("%d%d",&m,&n);int min=(m-1)*n; //min一定小于等于(m-1)*n 完成初始化for (i=0;i<m;i++)scanf("%s",&a[i]);//输入m个DAN序列for(k=m-1;k>=0;k--) //从最后一行开始{for(i=0;i<m;i++){for(j=0;j<n;j++){if (a[k][j]!=a[i][j])b[k]++;}}if(b[k]<=min){min=b[k];strcpy(s,a[k]);} }//输出//输出m个序列的Hamming值for (j=0;j<m;j++)printf("%d ",b[j]);printf("\n");//输出最小的DAN序列及对应的值printf("%s\n%d",s,min);return 0;
}
运行结构如下:
思考
题目1(必要的存储量):
数组可以用来保存很多数据,但在一些情况下,并不需要把数据保存下来。下面哪些题目可以不借助数组,哪些必须借助数组?请编程实现。假设输入只能读一遍。
- 输入一些数,统计个数。
- 输入一些数,求最大值、最小值和平均数。
- 输入一些数,哪两个数最接近。
- 输入一些数,求第二大的值。
- 输入一些数,求它们的方差。
1
,输入一些数,统计个数。
显然不需要将数据存入数组中,我们只需要设置一个变量作为累加器即可。
如下:
#include <stdio.h> int main (void) {int count=0;double x;while (scanf("%lf",x)==1)count++;printf("%d\n",count); }
2
,输入一些数,求最大值、最小值和平均数。
第二个可以利用数组实现,但也可以在循环中实现。
定义变量max,和min用来存放最大值和最小值。假设第一个输入的数字既是最大值也是最小值(即先完成初始化),然后后面每输入一个数,都和最大值和最小值比较,若比最大值大,则将此数赋值给max,对于min同理。
那么如何求平均值呢?可以定义和变量sum,每输入一个数,就将此数加到sum中,然后最后sum除以输入的数的总数即可。
#include<stdio.h>
int main (void)
{int count=1;double max,min,sum,x,ave;scanf("%lf",&x);min=max=x;sum=x;while(scanf("%lf",&x)==1){count+=1;if (x>=max){max=x;}if (x<=min){min=x;}sum+=x;}ave=sum/count;printf("max=%.2lf,min=%.2lf,average=%.2lf\n",max,min,ave);return 0;
}
3
,输入一些数,哪两个数最接近。(假设输入的都是整数)
我的想法是,将输入的数字从小到大排序,然后相邻的两个数之间相减,即可,将差值放到变量min中。利用循环,依次判断两个数的差值,若小于min,将将此差值 赋值给min。
对于数字的排序,可以利用选择排序法和起泡排序法。
#include<stdio.h>
#include<string.h> int maxn[10000];//保证数组足够大 int main (void) {int k=0,i,x;//x用来存放每次输入的值int count=0;//累加器int tmp;//设置中间变量int min;//存放差值的最小值memset(maxn,0,sizeof(maxn));//数组初始化为0;//输入一些数字while(scanf("%d",&x)==1){maxn[k++]=x;count++;}//输入完毕,对输入的数字排序//下采用选择法进行排序for(i=0;i<count;i++){for (k=i+1;k<count;k++){if (maxn[k]<maxn[i]) //若后面的小于它,则利用中间变量交换{tmp=maxn[i];maxn[i]=maxn[k];maxn[k]=tmp;}}}min=maxn[1]-maxn[0];//初始化for(i=1;i<count-1;i++){if(maxn[i+1]-maxn[i]<min)min=maxn[i+1]-maxn[i];}printf("%d\n",min);return 0; }
运行结果:
4.输入一些数,求第二大的值。
对于这个题目,可以只借助两个变量来实现。一个变量存放当前输入的整数中的最大值,一个变量存放当前输入的整数中的第二大值。
#include<stdio.h>
int main(void)
{int maxF,maxS,x;scanf("d",&x);maxF=maxS=x;//初始化while(scanf("%d",&x)==1){if(x>maxF){maxS=maxF; //易出错maxF=x;1}else if(x>maxS && x<maxF)maxS=x;}printf("%d\n",maxS);return 0;
}
5.
输入一些数,求它们的方差。
求方差,需要先求出来平均值。其次将各项与平均值作差并且平方相加,再除以总数。我们需要利用输入的每个数,所以需要利用数组,将数据保存。
#include <stdio.h>
#include <string.h>
int maxn[1000];//定义足够大的数组
int main (void)
{memset(maxn,0,sizeof(maxn));//数组初始化为0int x,sum=0,k=0,count=0,i;double ave,var=0;//平均值和方差//输入一些数while(scanf("%d",&x)==1){maxn[k++]=x;sum+=x;count++;}//计算平均值ave=(double)sum/count;//注意强制转换sum//计算方差for (i=0;i<count;i++){var+=(maxn[i]-ave)*(maxn[i]-ave);}var=var/count;printf("%.2lf",var);return 0;}
相关文章:

【C语言】语言篇——数组和字符串
C站的小伙伴们,大家好呀😝😝!我最近在阅读学习刘汝佳老师的《算法竞赛入门经典》,今天将整理本书的第三章——数组和字符串的一些习题,本章习题较多,下选取部分习题进行练习总结,在这…...

Js写的二级联动和三级联动
二级联动的实现 第一步 在HTML页面创建两个 select 下拉列表元素,并设置id为 ‘province’和id ‘city’ <!--省份--> <select id"province" onchange"getCity()"></select><!--城市--> <select id"city&qu…...

一文带你了解UI自动化测试框架
PythonSeleniumUnittestDdtHTMLReport分布式数据驱动自动化测试框架结构 1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_page import Login_Page from H…...

【Linux】守护进程
守护进程(Daemon)是一种在后台运行的特殊进程。它通常在操作系统启动时启动,并一直运行直至系统关闭。它不与任何终端关联,并且没有标准输入、输出和错误流。它的主要作用是在系统启动后执行一些特定的任务或者提供某些服务&#…...

Vue中组件和插件有什么区别?
Vue中组件和插件有什么区别? 组件是什么 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度,在保持接口…...

第五章 图像处理
文章目录 前言一、图像金字塔1.高斯金字塔2.拉普拉斯金字塔 二、图像轮廓1. 轮廓提取2. 轮廓绘制3. 轮廓特征4. 轮廓近似5. 轮廓标记 三、模板匹配四、直方图1. 对比度2. 绘制直方图3. 均衡化3.1 理论3.2 代码 4. CLAHE 五、图像傅里叶变换5.1 正弦平面波5.2 二维傅里叶变换5.3…...

算法8.从暴力递归到动态规划1
算法|8.从暴力递归到动态规划1 目前感觉,背包问题和货币数组问题本质相同,货币的与dp相关的三种代码写完了,快复习不完了,背包暂时先不写了,回头再写,补充,再总结,结合那个C大神的文…...

8-JDBC 编程
目录 1.数据库编程的必备条件 PS:程序是怎么操作数据库的? 2.什么是JDBC? 2.1.JDBC定义 2.2.JDBC工作原理 3.JDBC使用 3.1.创建项目并添加MySQL驱动包 3.2.使用代码操作数据库 3.2.1.获得数据源 3.2.2.获得连接 3.2.3.获得执行器 …...

零基础如何学习 Web 安全?
Web安全不仅是互联网的核心,而且还是云计算和移动互联网的最佳载体。对于信息安全从业者而言,Web安全是一个非常重要的研究课题之一。 Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,社交网络、聊天工具…...

【简单实用框架】【AddressablesMgr】【可移植】
☀️博客主页:CSDN博客主页💨本文由 萌萌的小木屋 原创,首发于 CSDN💢🔥学习专栏推荐:面试汇总❗️游戏框架专栏推荐:游戏实用框架专栏⛅️点赞 👍 收藏 ⭐留言 📝&#…...

android 12.0Launcher3禁止拖拽app图标到第一屏
1.概述 在12.0进行定制化开发Launcher3中,会对Launcher3 做些要求,比如现在的需求就是Launcher3第一屏的图标固定,不让其他屏的图标拖动到 第一屏所以说这个需求和 禁止拖拽图标到Hotseat类似,也是从WorkSpace.java里面寻找解决方案 2.Launcher3禁止拖拽app图标到第一屏相…...

SkyLine简介
简介 SkyLine产品系列(TerraExplorer 、TerraGate、TerraBuilder)是一套优秀的三维数字地球平台软件。凭借其国际领先的三维数字化显示技术,它可以利用海量的遥感航测影像数据、数字高程数据以及其他二三维数据搭建出一个对真实世界进行模拟…...

算法基础学习笔记——④前缀和\差分\双指针\位运算
✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨前缀和 ✨一维前缀和 🍓一维前缀和模板: ✨二维前缀和 🍓二位前缀和模板: 前言:算法学习笔记记录日常分享,需要的看哈O(∩_∩)O&a…...

【Linux系统基础快速入门详解】Linux下安装软件必知必会4种方法(yum,编译安装,rpm包,二进制方式)等详解
在 Linux 下安装软件有多种方法可供选择,常用的包括 yum、编译安装、rpm 包和二进制方式。下面对这些方法进行详细说明: 使用 yum 安装软件yum 是 Red Hat 系列 Linux 发行版中常用的软件包管理工具,通过 yum 可以方便地安装、升级和删除软件包。yum 默认从官方仓库中下载软…...

ASEMI代理长电可控硅BT136参数,BT136规格,BT136说明
编辑-Z 长电可控硅BT136参数: 型号:BT136 RMS通态电流IT(RMS):6A 非重复浪涌峰值导通电流ITSM:25A 峰值栅极电流IGM:2A 平均栅极功耗PG(AV):0.5W 存储接点温度范围Tstg:-40 to 150℃ 工…...

代码线程安全
线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一);static修饰的obj对象是自定义MyThread线程类的静态成员变量,该自定义线程类所有实例共享保证锁对象唯一性;另一…...

Filebeat技术栈总结
filebeat 是一个轻量型日志采集器,本质上是一个 agent 。不依赖于任何应用,可以安装在任何节点上,可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。 filebeat 内置了常用的 output 组件,例如 kafka、ElasticSe…...

【App自动化测试】(十六)健壮性测试工具——Android Monkey
目录 1. 介绍2. 安装3. Monkey的使用4. money常用命令5. 常用事件类型参数6. Monkey使用参考 1. 介绍 Monkey是一个在模拟器或设备上运行的程序,用于生成用户事件的伪随机流。 为什么要使用Monkey这个自动化遍历工具? Monkey解决了一个测试痛点ÿ…...

实现第一个内核程序的Hello World
背景 在内核的开发中,总要先入个门。那么就要来编写第一个内核程序 入门 一个 module_init 程序是Linux内核模块的一部分,通过module_init 方法就能将程序载入内核。 module_init 方法需要以下步骤 编写module_init 的代码,并将其保存为…...

python基于协同过滤推荐算法的电影观后感推荐管理系统的设计
本课题所设计的影单管理系统,使用B/S架构,Python语言进行开发,它的优点代码不能从浏览器查看,保密性非常好,比其他的影单管理更具安全性。Python还容易修改和调试,毕竟影视是在不断发展过程中,难…...

Vue——状态管理库Pinia
写在前面:本文参考小满大牛的pinia专栏 一、Vuex与Pinia Vuex 和 Pinia 均是 Vue.js 的状态管理库,它们为 Vue 应用程序提供了一种集中式的、可预测的状态管理解决方案。 Vuex 是 Vue.js 官方推荐的状态管理库之一。它的核心概念包括 state、mutation…...

Linux:忘记root密码解决办法
如果你是虚拟机只要将光盘镜像连接到虚拟机上,以光盘iso镜像启动 如果你是真机或服务器那将实体u盘或实体光盘连接至设备并且以连接的设备启动 开机时候打断开机 使用 (u盘|光盘)引导启动 troubleshooting rescue a centos system 输入 1…...

Dockerfile(4) - RUN 指令详解
RUN 运行命令 shell 形式 命令在 shell 中运行Linux 上默认为 /bin/sh -cWindows 上 cmd /S /C RUN <command> exec 形式 RUN ["executable", "param1", "param2"] 必须双引号,不能是单引号 两种写法的实际栗子 RUN …...

一个完整的APP定制开发流程是怎样的?
随着移动互联网的发展,越来越多的 APP应用软件进入人们的生活,让我们的生活更便捷、更舒适。而随着互联网技术的进步,移动互联网应用软件开发行业也越来越成熟,为了适应市场需求,各种功能强大、性能良好的 APP应用软件…...

【数据结构】24王道考研笔记——线性表
线性表 目录 线性表定义和基本操作顺序表静态顺序表动态顺序表 链表单链表不带头结点:带头结点: 双链表循环链表循环单链表:循环双链表: 静态链表 顺序表链表比较逻辑结构:存储结构:基本操作: 定…...

【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入
一、需求 在树莓派/香橙派上利用开发板自带的蓝牙作为一个蓝牙服务端(主机),允许外来设备(从机)通过蓝牙接入进行通信,通信格式为透传方式;采用的编程语言为Linux C 二、环境准备 bluez安装 …...

鸿蒙App开发选择Java还是JavaScript?
众所周知, Java和 JavaScript是两种编程语言,这两种语言在不同的环境中都有许多用途。在鸿蒙 App开发中, Java和 JavaScript是两种常见的编程语言,它们都具有广泛的应用,并且都有其独特的优势。下面我们将就这两种编程…...

【Android】CountDownTimer的使用
android中怎么实现倒计时 在Android中,可以使用CountDownTimer类来实现倒计时。以下是一个简单的示例: javaCopy new CountDownTimer(30000, 1000) {public void onTick(long millisUntilFinished) {// 每次倒计时间隔1秒,更新UI上的倒计时剩…...

Linux :: 【基础指令篇 :: 文件及目录操作:(1)】:: ls :: 查看指定目录下的内容
前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 目录索引&am…...

【商品详情 +关键词搜索】API 接口系列
首先,大家要到官方主页去申请一个 appkey,这个是做什么用的呢?App Key 是应用的唯一标识,TOP 通过 App Key 来鉴别应用的身份。AppSecret 是 TOP 给应用分配的密钥,开发者需要妥善保存这个密钥,这个密钥用来…...