首页 > 其他分享 >数据结构代码题-线性表

数据结构代码题-线性表

时间:2023-08-25 22:22:05浏览次数:30  
标签:arr include return 线性表 int 代码 len ++ 数据结构

王道数据结构大题代码

线性表

#include <stdio.h>
#include <stdlib.h>
void delMin(int *arr,int len){
	if(!len){
		printf("数组为空");
		return 0;
	}
	int min = *arr,minPos = 0;
	for(int i = 0;i < len;i++){
		if(min > *(arr+i)){
			min = *(arr+i);
			minPos = i;
		}
	}
	//找到最小值之后,将最后一个元素方法哦之前最小值元素那里去
	*(arr + minPos) = *(arr + len -1);
	*(arr + len -1) = NULL;
}
int main(){
	int n;//手动输入元素的个数
	printf("请输入数组的长度:n=");
	scanf("%d",&n);
	int *arr = (int*)malloc(sizeof(n));
	printf("请输入数组的元素值:");
	for(int i = 0;i < n;i++){
		scanf("%d",arr+i);
	}
	for(int i = 0;i < n;i++){
		printf("%d",*(arr+i));
	}
	printf("--------");
	delMin(arr,n);
	for(int i = 0;i < n-1;i++){
		printf("%d",*(arr+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
void revrese(int *arr,int len){
	int tmp;
	for(int i = 0;i < len/2;i++){
		tmp = *(arr+i);
		*(arr+i) = *(arr+len-i-1);
		*(arr+len-i-1) = tmp;
	}
}
int main(){
	int n;//手动输入元素的个数
	printf("请输入数组的长度:n=");
	scanf("%d",&n);
	int *arr = (int*)malloc(sizeof(n));
	printf("请输入数组的元素值:");
	for(int i = 0;i < n;i++){
		scanf("%d",arr+i);
	}
	for(int i = 0;i < n;i++){
		printf("%d",*(arr+i));
	}
	printf("\n----\n");
	revrese(arr,n);
	for(int i = 0;i < n;i++){
		printf("%d",*(arr+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int delX(int *arr,int len,int x){
	int k = 0;//用来记录删除元素的总数
	int i = 0;
	while(i < len){
		if(*(arr+i) == x){
			k++;
		}else{
			*(arr + i-k) = *(arr+i);
		}
		i++;
	}
	for(int i = len -k;i<len;i++){
		*(arr+i) = NULL;
	}
	return k;
}
int main(){
	int arr[] = {1,2,3,2,2,4};
	int len = sizeof(arr) / sizeof(arr[0]);
	int k = delX(arr,len,2);
	for(int i = 0;i < len -k;i++){
		printf("%d",*(arr+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
void deletePoint(int *arr,int s,int t,int len){
	int k = 0;
	int i = 0;
	for(i = 0;i < len && *(arr + i) < s;i++);
	if(i >= len)
	return ;
	for(k = i;k<=len && *(arr+k) <= t;k++);
	for(;k<len;i++,k++){
		*(arr+i) = *(arr+k);	
	}
	printf("当前数组为:");
	for(int j = 0;j<i;j++)
	printf("%d ",*(arr+j));
	
}
int main(){
	int arr[] = {1,2,4,6,10,15};
	int s,t;//用于给定区间范围
	int len = sizeof(arr) / sizeof(int);
	printf("请输入区间范围:,s<t\n");
	do{
		printf("s=");
		scanf("%d",&s);
		printf("t=");
		scanf("%d",&t);
	}while(s>t);
	deletePoint(arr,s,t,len);
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int deleteRepitition(int *arr,int len){//C语言无法直接修改数组长度,返回的是去重后的数组长度
	int k = 0;//记录下标
	for(int i = 0;i<len;i++){
		if(*(arr+i) - *(arr+i+1)){
			*(arr + k++) = *(arr+i);
		}
	}	
	if(*(arr+len-1) == *(arr+len)){//如果最后一个元素恰好和后一个存储空间元素相等,需要单独处理
		*(arr + k++) = *(arr+len-1);
	}
	return k;
}
int main(){
	int arr[] = {1,1,2,2,2,3,3,4,5};
	int len = sizeof(arr) / sizeof(arr[0]);
	len = deleteRepitition(arr,len);
	for(int i = 0;i<len;i++){
		printf("%d ",*(arr+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int *mergeList(int *arr1,int *arr2,int len1,int len2){
	int *newArr = (int*) malloc((len1+len2));
	int k = 0,i = 0,j = 0;
	for(;i<len1&&j<len2;){
		*(arr1+i) < *(arr2+j) ? (*(newArr+k++) = *(arr1+i++)) : (*(newArr+k++) = *(arr2+j++));
	}
	while(i<len1){
		*(newArr+k++) = *(arr1+i++);
	}
	while(j<len2){
		*(newArr+k++) = *(arr2+j++);
	}
	return newArr;
}
int main(){
	int arr1[] = {1,3,5,8};
	int arr2[] = {2,4,6,7};
	int len1 = sizeof(arr1) / sizeof(int); 
	int len2 = sizeof(arr2) / sizeof(int); 
	int *res;
	res = mergeList(arr1,arr2,len1,len2);
	for(int i = 0;i<len1+len2;i++){
		printf("%d ",*(res+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
void reverseList(int *arr,int from,int end){
	if(from > end){
		return ;
	}
	int tmp;
	for(int i = from;i <= (from+end)/2;i++){
		tmp = *(arr+i);
		*(arr+i) = *(arr+end-i+from);
		*(arr+end-i+from) = tmp;
	}
}
int main(){
	int arr[] = {1,2,3,4,5,11,22,33,44,55,66};
	reverseList(arr,0,10);
	reverseList(arr,0,5);
	reverseList(arr,6,10);
	for(int  i = 0;i<11;i++){
		printf("%d ",arr[i]);
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int findX(int *arr,int len,int x){
	int low = 0,high = len -1,mid;
	while(low <= high && (mid = (low + high)/2)){
		if(x == *(arr+mid)){
			break;
		}
		if(x < *(arr+mid)){
			high = mid-1;
		}else{
			low = mid +1;
		}
	}
	if(low > high){//未找到,插入
		int i;
		for(i = len-1;i>high;i--){
			*(arr+i+1) = *(arr+i);
		}
		*(arr+i+1) = x;
		return len + 1;
	}else{//找到了,进行对调
		int tmp = *(arr+mid+1);
		*(arr+mid+1) = *(arr+mid);
		*(arr+mid) = tmp;
		return len;
	}
}
int main(){
	int arr[10] = {1,3,5,6,9,12,45,78};
	int x,len;
	printf("请输入要查找的元素:x=");
	scanf("%d",&x);
	len = findX(arr,8,x);
	for(int  i =0;i < len;i++){
		printf("%d ",*(arr+i));
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
void reverseList(int *arr,int from,int end){
	if(from > end){
		return ;
	}
	int tmp;
	for(int i = from;i <= (from+end)/2;i++){
		tmp = *(arr+i);
		*(arr+i) = *(arr+end-i+from);
		*(arr+end-i+from) = tmp;
	}
}
int main(){
	int arr[] = {1,2,3,4,5,11,22,33,44,55,66};
	printf("请输入开始位置");
	int p = 0;
	scanf("%d",&p);
	reverseList(arr,0,10);
	reverseList(arr,p,10);
	reverseList(arr,0,p-1);
	for(int  i = 0;i<11;i++){
		printf("%d ",arr[i]);
	}
	return 0;
} 

#include <stdio.h>
#include <stdlib.h>
int findMidNum(int *l1,int *l2,int len){
	int count = 0,midlle = 0;
	for(int i = 0,j = 0;*(l1+i) && *(l2+j);){
		if(count++ == len){
			midlle = *(l1+i) < *(l2+j) ? *(l1+i) : *(l2+j); 
			break;
		}else{
			*(l1+i) < *(l2+j) ? i++ : j++; 
		}
	}
	return midlle;
}
int main(){
	int l1[] = {1,3,4,7,9};
	int l2[] = {2,4,6,8,10};
	int len = sizeof(l1) / sizeof(int);
	printf("中位数是:%d",findMidNum(l1,l2,len-1));
	return 0;
} 

#include <stdio.h>
#include <stdlib.h>
int findMain(int *arr,int len){
	int c = *arr,couunt = 1,mainCount = 0;
	for(int i = 1;i < len;i++){
		if(c == *(arr+i)){
			couunt++;
		}else{
			if(couunt > 0 ){
				couunt--;
			}else{
				c = *(arr+i);
				couunt = 1;
			}
		}
	}
    if(couunt >0){
        for(int i = 0;i < len;i++){
            if(*(arr+i)==c){
                mainCount++;
            }
        }
    }
	if(mainCount > len/2){
		return c;
	}else{
		return -1;
	}
}
int main(){
	int arr[] = {0,5,5,3,5,7,5,5};
	int mainNum = 0;
	int len = sizeof(arr) / sizeof(int);
	mainNum = findMain(arr,len);
	printf("该数组的主元素为:%d",mainNum);
	return 0;
} 

#include <stdio.h>
#include <stdlib.h>
int findMinZ(int *arr,int n){//n为数组长度
	int *arrB = (int*) malloc(sizeof(int)*n);
	for(int i = 0;i < n;i++){
		arr[i] > 0 ? (arrB[arr[i] -1] = 1): (arrB[i]=0);
	}
	int k = 0;
	for(;k<n;k++){
		if(arrB[k] == 0){
			return k+1;
		}
	}
	return n+1;
}
int main(){
	int arr[] = {1,2,3};
	int min = findMinZ(arr,3);
	printf("%d",min);
	return 0;
} 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int dis(int a,int b,int c){//返回距离
	return abs(a-b) + abs(b-c) + abs(a-c);
}
int min(int a,int b,int c){//返回当前最小值,此时便移动它的指针
	if(a<b && a<c){
		return a;
	}else if(b < c && b<a){
		return b;
	}else {
		return c;
	}
}
int findMinofTrip(int *S1,int *S2,int *S3,int len1,int len2,int len3){
	int i = 0;
	int j = 0;
	int k = 0;
	int Max = 1000;//设定一个最大值,假定为1000
	int nowD = 0;
	while(i<len1 && j<len2 && k<len3){
		nowD = dis(S1[i],S2[j],S3[k]);
		if(nowD < Max){
			Max = nowD;
		}
		if(S1[i] == min(S1[i],S2[j],S3[k]))
		{
			i++;
		}else if(S2[j] == min(S1[i],S2[j],S3[k]) ){
			j++;
		}else{
			k++;
		}
	}
	return Max;
}
int main(){
	int S1[] = {-1,0,9};
	int S2[] = {-25,-10,10,11};
	int S3[] = {2,9,17,30,41};
	int len1 = sizeof(S1) / sizeof(int);
	int len2 = sizeof(S2) / sizeof(int);
	int len3 = sizeof(S3) / sizeof(int);
	int minD = findMinofTrip(S1,S2,S3,len1,len2,len3); 
	printf("%d",minD);
	return 0;
} 

标签:arr,include,return,线性表,int,代码,len,++,数据结构
From: https://www.cnblogs.com/kohler21/p/17658064.html

相关文章

  • git_使用git worktree命令使不同分支的代码文件可以同步运行
    情景再现:我本地代码正在开发后台系统的过程中,前台开发的同事时不时地会来找我要IP地址,使用正在开发的后台管理系统来进行一些数据的增删改查.这个时候直接提供正在开发的版本的开发服务器地址是不行的,因为随着代码的编写时不时的报个bug是家常便饭,对于使用者来说非常......
  • Go Web项目结构 + 基础代码
    GoWeb工程下面是项目的包图,可以通过包图来理清项目包的结构。GoWeb工程下面是项目的包图,可以通过包图来理清项目包的结构。因为我是从Java转过来的,其实这种包的结构与Java的类似。Java是Controller、Service、Respository。Go就变成了api、service、dao,其实也差不多,因为......
  • mysql 深入学习一 数据结构导图
    索引的本质 B-Tree结构 B+Tree结构 Hash结构  MyISAM存储引擎索引实现 innodb存储引擎实现 innodb引擎生成两个文件,将索引文件和数据文件都放在的.ibd文件下(这就是聚集索引)myisam引擎生成三个文件,将索引和数据分开保存分别在.MYD.MYI文件下(这就是非聚......
  • 在代码世界游走,没几把“锁”防身可不行
    一、开篇背景“锁”代表安全。在程序中(这里指java)尤其多线程环境下,有了锁的帮助,会给数据安全带来保障,帮助线程更好的运作,避免竞争和互斥。锁共有15种算法:乐观锁、悲观锁、自旋锁、重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥......
  • 产品代码都给你看了,可别再说不会DDD(三):战略设计
    这是一个讲解DDD落地的文章系列,作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云(https://www.mryqr.com)为例,系统性地讲解DDD在落地实施过程中的各种典型实践,以及在面临实际业务场景时的诸多取舍。本系列包含以下文章:DDD入门DD......
  • 03.前后端分离中台框架 zhontai 项目代码生成器的使用
    合集-zhontai(3) 1.01.前后端分离中台框架后端Admin.Core学习-介绍与配置说明08-202.2.前后端分离中台框架前端admin.ui.plus学习-介绍与简单使用08-213.03.前后端分离中台框架zhontai项目代码生成器的使用08-22收起 zhontai项目基于.Net7.x+Vue等......
  • 如何使用Chat Emy写代码
    首先,在使用ChatEmy写代码之前,你必须要先了解编程语言,也就是说,要有一点基础,然后才能够将ChatEmy给你写的东西应用起来,这一点是非常重要的,它生成的东西不能自动给你运行起来,只是能够提升你的效率或给你一定的帮助。一、如何使用ChatEmy写代码?在ChatEmy的广泛测试中,程序员们发......
  • vscode reference代码提示怎么关闭
     ......
  • 电脑上有别人的账号,git代码下拉报错403
    换的别人的电脑,然后有别人的账号,去下拉代码有问题报错403 然后去看git账户信息发现没有发现问题$gitconfig--list方法一,重置本机保留的gitconfig信息。解决方法:重置本机保留的gitconfig信息。命令:gitconfig--system--unsetcredential.helper然后再次clone的时候......
  • [代码随想录]Day27-贪心算法part01
    题目:455.分发饼干思路:贪心,思路是尽量先给胃口值小的分,饼干也是从小的开始分:如果饼干满足了胃口值,结果+1换下一个人,下一个饼干如果饼干满足不了胃口值,换下一个饼干(满足不了胃口值小的一定满足不了大的)代码:funcfindContentChildren(g[]int,s[]int)int{res:=......