17 软专

news/2024/7/7 22:55:50

数据结构

1、带头结点的双链表l,每个节点有4个数据成员,前驱节点llink,后继节点rlink,数据成员data,访问频度freq,且已知双向链表L中节点一直按访问频度递减的顺序排列且频繁访问的节点一直靠近表头,初始状态l中的所有节点freq的节点都为0,对双链表的locate操作,每操作一次,将数据值x的节点访问频度+1,设计一个算法,对双链表l的locate操作,要求操作后L中的节点仍然按照频度的递减顺序排列

思路:

  • 先找到结点值为x的节点,频度加1,然后断链

  • 然后找到需要插入的节点,分情况讨论

    • 插在最后一个,只需接三条链
    • 不是插在最后一个,需要接四条链

代码:

typedef struct dnode{
	int data;
	int freq;
	struct dnode *llink, *rlink;
}*dlist; 

void locate(dlist head, int x){
	dlist p = head->rlink,q;
	while(p != NULL && p->data != x) p = p->rlink;			//找到节点值为x的节点 												//访问频度加1
	if(p!=NULL){											//找到节点 
		p->freq++;											//频度加1 
		if(p->llink == head) return;						//第一个节点,不用调整 
		q = p;												//保存需要操作的节点
		
		p->llink->rlink = p->rlink;							//断开p左右节点的链并接上 
		if(p->rlink!=NULL) 									//右链得保证存在才能接 
			p->rlink->llink = p->llink; 
			
		p = q->llink;										//从q的前一个结点找到q的freq大的节点 
		while(p != head && p->freq < q->freq) p = p->llink;	//找到需要插入的节点   
		if(p->rlink==NULL){									//q插到p节点前 ,注意这里的插法
			q->llink = p;
			q->rlink = p->rlink;			
			p->rlink = q;
		}
		else{												//不是插到最后一个节点 
			p->rlink->llink = q;
			q->llink = p;			
			q->rlink = p->rlink;
			p->rlink = q;
		}
	}		
 	p = head->rlink;
 	while(p){
 		printf("%d %d\n",p->data,p->freq);
 		p = p->rlink;
	 }
}

程序设计

第一题

1、设计字符串S以及长度为n的字符型一维数组a,编写一个函数,统计a中每个字符在字符串S中出现的次数,要求该函数以s,a,n为形参,一维整型数组为返回值

思路:

  • 数组hash实现,定义一个长度为255的长度的数组,保证所有的字符串都考虑进去
  • 然后统计s中所有字符各自出现的次数,然后访问字符串数组a,然后将结果,加入到result中

代码:

//思路:先统计S中每个字符出现的次数,然后再遍历a,通过hash表反应a中每个字符在s中出现的次数 
int *count(char *s, char a[], int n){
	int *hash = (int *)malloc(sizeof(int)*255);		//C语言中char类型默认是有符号类型,字符串的ASCII码范围是0-255
	int *result = (int *)malloc(sizeof(int)*n);		//保存结果 
	memset(hash,0,sizeof(int)*255);					//初始化赋值 
	int i = 0;
	while(s[i]!='\0'){
		hash[s[i++]]++;
	}
	for(i=0; i < n; i++){
		printf("%c在S中出现的次数为%d\n",a[i],hash[a[i]]);
		result[i] = hash[a[i]]; 
	}
	return result;
} 

第二题

2、m行n列矩阵,编写程序将矩阵中值小于0的元所在行与列上的所有元素置为0,并输出

思路:

  • 不能直接赋值为0
  • 得先把0暂时放到第一行或者第一列
  • 同时保存原来第一行和第一列的是否有0
  • 然后遍历非第一行和第一列的所有元素,判断第一行或者第一列是否为0,如果是,将非第一行和第一列的该行该列所有元素置为0
  • 然后判断当前第一行和第一列是否最初就有0元素,有的话,则置该行或者该列为0

代码:

//思路:不能直接赋值为0,得先把0放到第一行或者第一列,然后还需要两个变量来保存第一行或者第一列来保存最开始的结果
 
void outQuadrix(int a[][N], int m, int n){
	int row = 0, col = 0;				//判断第一行或者第一列是否为0的标志 
	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			if(a[i][j]<=0){
				if(i==0){
					row = 1;
				}
				if(j==0){
					col = 1;
				}
				a[0][j]=0;			//第一行的第j列置为0 
				a[i][0]=0;	 		//第一列的第i行置为0 
			}
		}
	}
	
	for(int i = 1; i < m; i++){
		for(int j = 1; j < n; j++){
			if(a[i][0]==0 || a[0][j]==0){		//如果该行或者该列存在0,则该行或者该列的元素全部置为0 
				a[i][j] = 0;
			}
		}
	}	
	
	if(col){
		for(int i = 0; i < m; i++)
			a[i][0] = 0;
	}
	if(row){
		for(int i=0; i < n; i++){
			a[0][i] = 0;
		}
	}
	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			printf("%-4d",a[i][j]);
		}
		printf("\n");
	}
}

http://lihuaxi.xjx100.cn/news/173662.html

相关文章

阴影text-shadow和box-shadow详解

目录text-shadow基础知识多个阴影进阶box-shadow基础单边效果进阶-外延进阶-内嵌text-shadow 基础知识 text-shadow: 水平位移 垂直位移 模糊程度(越大越模糊) 颜色 所以这个阴影效果可以理解为复制一下内容&#xff0c;并且偏移一下位置。并不是拉伸的那种阴影&#xff0c;当…

Heterogeneous Parallel Programming 异构并行编程 - UIUC伊利诺伊大学(持续更新)

Lecture 11.2 Introduction to Heterogeneous异构1.3 Portability and Scalability1.4 Introduction to CUDA 数据并行化 and 执行模型1.5 Introduction to CUDA 内存模型 and 基本函数API1.6 Introduction to CUDA Kernel-based SPMDHeterogeneous Programming是采用不同类型的…

Docker基本原理

Docker基本原理Docker基本原理一、Docker概述1.1 IT架构的演进&#xff1a;1.2 Docker是什么Docker的Logo&#xff1a;Docker的设计宗旨&#xff1a;1.3 容器的特点1.4 Docker容器与虚拟机的区别1.5 容器在内核中支持2种重要技术1.6 Docker核心概念二、安装Docker2.1 Yum安装Do…

Spider爬虫入门(发送Get Post请求、携带请求头、Cookie、Session、响应Response、获取二进制数据 、解析Json数据)

文章标题一、爬虫介绍二、Requests模块发送Get请求三、Get请求携带参数四、携带请求头五、携带Cookie六、发送Post请求七、响应Response八、获取二进制数据九、解析Json数据一、爬虫介绍 爬虫:Spider 网络蜘蛛 爬虫也叫网页蜘蛛&#xff0c;网络机器人&#xff0c;就是模拟客户…

Mysql8.x版本主从加读写分离(一) mysql8.x读写分离

Mysql8.x版本主从加读写分离&#xff08;一&#xff09; mysql8.x主从_争取不加班&#xff01;的博客-CSDN博客 Mycata需要使用jdk 单独一台服务器部署的mycat 192.168.11.143 手动上传jdk的包 tar zxvf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压 cd /usr/local…

CAS号:2578-57-6,H2N-PG-OH

脯氨酸酶的底物(脯氨酸二肽酶)。 编号: 116803中文名称: 二肽Pro-Gly英文名: Pro-GlyCAS号: 2578-57-6单字母: H2N-PG-OH三字母: H2N-Pro-Gly-COOH氨基酸个数: 2分子式: C7H12N2O3平均分子量: 172.18精确分子量: 172.08等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -疏…

【算法笔记(五)】排序算法

算法笔记(五) 排序算法算法笔记(五)前言一、冒泡排序1.什么是冒泡排序2.实际需求3.代码实现二、选择排序1.什么是选择排序2.需求规则三.插入排序1.了解插入排序2.需求规则3.代码实现四.希尔排序1.什么是希尔排序2.需求规则3.代码实现五.快速排序1.什么是快速排序2.需求规则3.代…

Hystrix 请求合并、请求隔离、优化

文章目录请求合并引入依赖启动类 加注解EnableHystrixservice服务测试请求隔离线程池隔离&#xff08;大部分情况下&#xff09;信号量隔离线程池隔离演示引入依赖启动类 加注解EnableHystrixservice服务测试信号量隔离演示Hystrix的其他用法请求合并 引入依赖 <dependenc…