网站建设 佛山,网站推广及seo方案,搜索域名,南阳网站排名公司1、C语言-字符串交替拼接 1、用C编程#xff0c;将两个字符串数组存储实现交替连接如aaa和bbb两个字符连接成ababab 如aaa和baba 两个字符#xff0c;连接成 abaaaba #includestdio.h/*
解题思路#xff1a;将两个字符串交替拼接#xff0c;定义三个数组#xff0…1、C语言-字符串交替拼接 1、用C编程将两个字符串数组存储实现交替连接如aaa和bbb两个字符连接成ababab 如aaa和baba 两个字符连接成 abaaaba #includestdio.h/*
解题思路将两个字符串交替拼接定义三个数组
str1[]存放第一个字符串
str2[]存放第二个字符串
str3[]存放拼接的字符串
然后交替放入str3中首先str3数组下标偶数位先放入str1中的字符奇数位放入str2中的字符,实现交替连接
然后看谁的字符串更短将更长的字符串全部放入str3中
*/
int main() {char str1[10],str2[10],str3[20];int i0,j0,k0; // i记录str1的下标j记录str2的下标k记录str3的下标printf(输入第一个字符串);scanf(%s,str1);printf(输入第二个字符串);scanf(%s,str2);while(1) {if(k%2 0) { // 依次把str1和str2中 的元素加入str3中 str3[k] str1[i]; } else {str3[k] str2[j];}if(str1[i] \0 || str2[j] \0) { // 字符串的长度不一样看str1和str2谁先到达末尾 if(str1[i] \0 ) { // str1已经全部放入str3中 while(str2[j] ! \0) { // 则依次将str2中的元素依次加入str3中 str3[k] str2[j];}break; // 所有元素加入str3 退出大循环 } else {while(str1[i] ! \0) { // str2全部放入str3中加str1中剩余元素依次放入str3 str3[k] str1[i];}break;}}}puts(str3); // 将str3中的字符串输出 return 0;
}2、C语言–最大公约数和最小公倍数 2、求最大公约数和最小公倍数 // 方法1、递归方法
#include stdio.h/*
解题思路
最大公约数指的是两个或多个整数共有约数中最大的一个
采用的是欧几里得算法也叫辗转相除法就是将 a,b两个数取余数假设 t a%b然后将较小的元素 b 对t再取余数直到最后余数为0,则最后依次取余数的 b就是最大公约数最小公倍数两个或多个数公有的倍数 设a,b两个数 则 LCM (x*y)/Gcd(x,y)
*/// 最大公约数 递归辗转相除法
int Gcd(int a,int b){if(b0){return Gcd(b,a%b);}else{return a;}
} // 最小公倍数
int Lcm(int x,int y){return (x*y)/Gcd(x,y);
} // 主函数
int main()
{int a,b;scanf(%d %d,a,b);printf(最大公约数为:%d\n,Gcd(a,b));printf(最小公倍数为%d,Lcm(a,b)); return 0;
}3、数据结构-线索二叉树 3、将10个数字进行排序二叉树给前序和中序序列要求画出二叉树并求 后续线索二叉树给了10个字母 4、数据结构-哈希表 4、Hash(哈希)排序6个数mod7线性排列并求出比较次数 5、数据结构-快速排序 5、快速排序写出每趟结果给了10个具体的数 /*
解题思路递归思想
快速排序的思想是取第一个元素作为数轴元素
然后将原来的序列分为两个部分左边比枢轴元素小右边比枢轴元素大然后将左边的元素再进行快速排序
右边的元素也再进行快速排序直到序列递增有序*/// 寻找指定位置 将枢轴元素分成两个部分
int partition(int A[],int low,int high) {int pivot A[low];while(lowhigh) {while(lowhigh A[high]pivot) {--high;}A[low] A[high];while(lowhigh A[high]pivot) {low;}A[high] A[low];}A[low] pivot;return low;
}void QuickSort(int A[],int low,int high) {if(lowhigh) {int pivotpos partition(A,low,high);QuickSort(A,low,pivotpos-1);QuickSort(A,pivotpos1,high);}
}
6、数据结构-二叉树 6、设计算法求二叉树的双亲结点 # includestdio.h/*
解题思路 采用递归思想
跟据树的先序遍历进行改造
先看根节点是否有左右子树并且左右子树是否为x如果是则是双亲结点如果不是
则寻找T的整个左子树和T的整个右子树
*/// 二叉树定义
typedef struct BiNode{ELemType data;struct BiNode *lchild,*rchild
}BiNode,*BiTree;// 找双亲结点
BiNode * Findparent(BiTree T,ElemType x){if(T-lchile !NULL T-lchild x){ // 如果存在左子树并且左子树就是x 则T就是x 的双亲结点 return T;}if(T-rchile !NULL T-rchild x){ // 如果存在右子树 且右子树就是x 则T就是x 的双亲结点return T;}* Findparent(T-lchild,x); * Findparent(T-rchild,x);
} 7、数据结构-删除重复结点 7、删除链表中重复的结点 /*
解题思路设置三个指针p,q p-next, pre(q的前趋指针),
通过q指针遍历链表如果和p相同则删除如果不同则p后移q还是从头遍历
直到找出所有相同的结点并删除
*/// 单链表结构定义
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;/*无序链表*/
void delete_same(LinkList L){LNode *p L-next;LNode *q p-next;LNode *pre p; // q的前趋结点for(p,p!NULL,p p-next){for(q,q!NULL;qq-next,pre pre-next){LNode *s; // 待删除结点if(p-data q-data){s q;pre-next q-next;q pre-next;free(s);} }}
}// 如果是有序链表的话
/*
定义两个指针pq。q指针永远指向p的下一个结点然后遍历链表
*/
void delete_same(LinkList L){LNode *p L-next;LNode *q;while(p!NULL){q p-next;if(p-data q-data){p-next q-next;free(q);}else{p p-next;}}}