C/C++
AlexCookie
感谢互联网,让我在知识的海洋遨游,感谢广大网友,把所学知识分享,咱们一起进步!博主主分享:算法,计算机方向。
展开
-
赎金信<leetcode>
给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。示例3:输入:ransomNote="aa",magazine="aab"输出:truebool canConstruct(char * ransomNote, char * magazine){ int alphab...原创 2022-03-23 14:18:47 · 104 阅读 · 0 评论 -
线索树找*p的中序后继且中序遍历 二叉线索树
//线索树找*p的中序后继且中序遍历 二叉线索树#define thread 1#define link 0typedef struct Bt{ char data; struct Bt *lc;//左孩子 struct Bt *rc;//右孩子 struct Bt *ltag;//左标识 struct Bt *rtag;//右标识 }*Bt;Bt SBack(Bt p);//找后继 //中序 void mider(Bt p){ while(p->lc == lin.原创 2022-03-05 16:34:10 · 2025 阅读 · 0 评论 -
寻找二叉树 以某个值为根的点的 深度,先序创树主要代码
寻找二叉树 以某个值为根的点的 深度,先序创树//先序创建树,初始化树typedef struct Btree{ char data; struct Btree *lc; struct Btree *rc;}*Btree,node;//树结点 结构体 Btree CT(){ char c; Btree t; scanf("%c",&c); if(c == '#') { //如果# 说明该结点 不存在 t = NULL; } else { t = (B原创 2022-03-05 14:51:33 · 214 阅读 · 0 评论 -
折半查找 主要代码部分
//二分查找(折半查找)void TS(int a[],int data,int low,int high)//传入一个升序的数组a,查找值data,下界 下标low,上界 下标high { int mid = (low + high) / 2;//中间下标 if(a[mid] > data) { //data比中间值小 升序时 往左边找 TS(a,data,low,mid - 1); } else if(a[mid] < data) { //data比中间值大.原创 2022-03-05 14:32:48 · 145 阅读 · 0 评论 -
归并排序,快速排序,希尔排序主要代码对比
/*o(nlogn) time efficiency*///归并排序 o(nlogn) o(n) stable//归并排序 o(nlogn) o(n) stablevoid MA(int a[],int be,int mid,int en)//数组的a[0] 不保存元素 { int b = be,ob = mid + 1,k = 0,c[101] = {0};//c数组为临时数组 //当且当 b,ob在范围内 while(b <= mid && ob <原创 2022-03-04 23:42:46 · 176 阅读 · 0 评论 -
冒泡,选择,插入对比代码
冒泡,选择,插入排序的代码原创 2022-03-04 22:06:08 · 521 阅读 · 0 评论 -
基数排序主要代码
/*o(n*k) time efficiency*///基数排序 o(n*k) o(n+k) stabletypedef struct base{ int key; float data; int next;//假指针 }base;//返回 排序后首位元素的小标,访问该元素用 a[BS[a],n].key int BS(base a[],int n){ int f[10],e[10];//f[k],e[k]分别为 指向 基数池k的第一个元素“位置”和最后一个元素位置,某池只有一个元..原创 2022-03-04 21:36:14 · 645 阅读 · 0 评论 -
希尔排序主要代码o(nlogn) o(1) stable
//希尔排序 o(nlogn) o(1) stablevoid shell(int a[],int n){ int d = n / 2;//初始增量 while(d >= 1) { for(int i = d + 1;i < n;i ++)//起始点往后 { int j = i - d,x = a[i]; while(j > 0 && a[j] > x)//以该增量 往前遍历 对比 { a[j + d] = a[j]..原创 2022-03-04 21:34:43 · 116 阅读 · 0 评论 -
大乐透模拟自选
模拟自选//模拟自选 /*大乐透投注区分为前区号码和后区号码,前区号码范围为01~35,后区号码范围为01~12。大乐透每期从35个前区号码中开出5个号码,从12个后区号码中开出2个号码作为中奖号码,大乐透玩法即是竞猜开奖号码的5个前区号码和2个后区号码,顺序不限。*/#include <iostream>//c ++输入输出 #include <stdlib.h>//含srand()选种子函数,rand随机函数 #include <ctime>/.原创 2022-01-21 13:34:46 · 1972 阅读 · 1 评论 -
已有两个链表a、b,结点包含学号、姓名。从a表中删除与b表相同相同学号的结点。
已有两个链表a、b,结点包含学号、姓名。从a表中删除与b表相同相同学号的结点。/*已有两个链表a、b,结点包含学号、姓名。从a表中删除与b表相同相同学号的结点。 */#include <stdio.h>#include <malloc.h>//申请动态空间 typedef struct node{ int num;//学号 float grade;//成绩 struct node *next;}node,*stu;//从a表中删除与b链中学号相同结点原创 2021-12-31 13:00:42 · 1208 阅读 · 0 评论 -
一个链表包括学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含年龄等于此年龄则删除该结点。
一个链表包括学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含年龄等于此年龄则删除该结点。/*一个链表包括学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含年龄等于此年龄则删除该结点。 *//*已有两个链表a、b,结点包含学号、姓名。从a表中删除与b表相同相同学号的结点。 */#include <stdio.h>#include <malloc.h>//申请动态空间 typedef struct node{ int num;//学.原创 2021-12-31 12:59:25 · 1366 阅读 · 0 评论 -
13人围成一圈,从第一个人开始顺序报号1,2,3。报到3退出。找出最后留在圈子中的人原来的序号。用链表实现。
13人围成一圈,从第一个人开始顺序报号1,2,3。报到3退出。找出最后留在圈子中的人原来的序号。用链表实现。/*13人围成一圈,从第一个人开始顺序报号1,2,3。报到3退出。找出最后留在圈子中的人原来的序号。用链表实现。 */#include <stdio.h>#include <malloc.h>//申请空间 //人 结点 typedef struct node{ int order; struct node *next;}node,*people;//原创 2021-12-30 23:53:35 · 1579 阅读 · 0 评论 -
已有a,b两个链表,每个链表包含学号、成绩。要求合并两个链表,按学号升序排列。
已有a,b两个链表,每个链表包含学号、成绩。要求合并两个链表,按学号升序排列。/*已有a,b两个链表,每个链表包含学号、成绩。要求合并两个链表,按学号升序排列。 */#include <stdio.h>#include <malloc.h>//申请动态空间 typedef struct node{ int num;//学号 float grade;//成绩 struct node *next;}node,*stu;//初始化链表,长度有n结点stu In原创 2021-12-30 23:52:09 · 1778 阅读 · 0 评论 -
输入月份号,输出该月的英文月名。用指针数组处理
/*输入月份号,输出该月的英文月名。用指针数组处理 */#include <stdio.h>//用二维数组实现 int main(){ char a[][12] = { " ", "January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "Dece.原创 2021-12-30 21:07:28 · 6054 阅读 · 0 评论 -
输入月份号,输出该月的英文月名。用switch处理
/*输入月份号,输出该月的英文月名。用switch处理 */#include <stdio.h>int main(){ int x = 0; scanf("%d",&x); switch(x) { case 1:printf("January");break; case 2:printf("February");break; case 3:printf("March");break; case 4:printf("April");break; .原创 2021-12-30 21:06:48 · 1351 阅读 · 0 评论 -
输入一个十六进制数,输出相应的十进制数。(非调库)
/*输入一个十六进制数,输出相应的十进制数。 */#include <stdio.h>#include <cmath>//含pow(value,number)次方函数 #define n 101//十六进制转化为十进制 int decimal_hex(char a[],int size)//传入十六进制数组,和其长度 { //去除错误情况 if(a == '\0' && size < 1) { return 0; } //.原创 2021-12-30 18:05:52 · 1891 阅读 · 0 评论 -
给出年、月、日,计算该日是该年的第几天。
给出年、月、日,计算该日是该年的第几天。//大多数情况下列出 每个月的默认天数(如果是闰年后面再修改)//默认 1、3、5、7、8、10、12每月31天,二月闰年29天,平年28天,其余月份30天/*给出年、月、日,计算该日是该年的第几天。 */#include <stdio.h>#define n 8//大多数情况下列出 每个月的默认天数(如果是闰年后面再修改)//默认 1、3、5、7、8、10、12每月31天,二月闰年29天,平年28天,其余月份30天 in...原创 2021-12-30 18:04:47 · 4915 阅读 · 0 评论 -
求魔方阵,1~n次方的自然数构成的魔方阵(奇数矩阵)。
一,第一行 最中间一列为1(是奇数矩阵一定存在中间列)二,数字x(1< x <= n*n),如果其x - 1能被n整除,行位置向下移动则其列位置和 上一位一样不变.三,数字x(1< x <= n*n),如果不能被整除,其行需要往上移动一行,列需要向右移动一行四,移动需要注意是 自上而下,自右而左的循环着移动,需要求余运算/*求魔方阵,1~n次方的自然数构成的魔方阵(奇数矩阵)。 *//*魔方阵规律 一,第一行 最中间一列为1(是奇数矩阵一定存在中间列)二,数..原创 2021-12-30 16:16:02 · 1009 阅读 · 0 评论 -
输入小于1000的正数,输出它的平方根。(如果平方根不是整数,则输出其整数部分)
/*输入小于1000的正数,输出它的平方根。(如果平方根不是整数,则输出其整数部分) */#include <stdio.h>void solve_sqrt(int n){ for(int i = 1;i <= n/2;i ++) { if(i * i <= n && (i + 1)*(i + 1) > n ) { printf("sqrt is %d\n",i);//如果平方根不是整数,则输出其整数部分 break; .原创 2021-12-29 18:28:21 · 1327 阅读 · 0 评论 -
一个球从100m高度自由下落,每次反弹回一半高度,再落下,球10次过程共经过多少米,和第10次反弹多高
/*一个球从100m高度自由下落,每次反弹回一半高度,再落下,球10次过程共经过多少米,和第10次反弹多高 */#include <stdio.h>#define Begin_high 100int main(){ double h = Begin_high,sum = Begin_high;//double float 最开始下落100m int i = 1; while(i <= 9)//这里先进行9次反弹 { h = h / 2;//反弹 sum .原创 2021-12-29 18:15:14 · 866 阅读 · 0 评论 -
找1000之内的完数和其因子。 一个数恰好等于它因子之和,这个数就称为完数。
/*找1000之内的完数和其因子。 一个数恰好等于它因子之和,这个数就称为完数。*///如6因子为1,2,3,又6 = 1 + 2 + 3,故6为完数#include <stdio.h>#define Size 1000//找完数 并打印 蛮力遍历 void Find_PerfectNumber(){ int sum = 0; for(int i = 6;i < Size;i ++)//找完数 (显然从6开始) { sum = 0;//初始化sum因子总值 .原创 2021-12-29 17:24:11 · 5055 阅读 · 0 评论 -
输入两个正整数m和n,求其最大公约数和最小公倍数。
/*输入两个正整数m和n,求其最大公约数和最小公倍数。 */#include <stdio.h>//找最大公约数 并打印 void Find_MaxCommonDivisor(int m,int n){ if(m == 0 && n == 0) { printf("Maximum common divisor is zero\n"); return; } int mmin = (m > n ? n : m);//取m,n中较小值,作为最后一个测.原创 2021-12-29 17:23:29 · 242 阅读 · 0 评论 -
将“China”译成密码,用原来的字母后面第4个字母代替原来字母。用putchar和printf输出字符数组。
/*将“China”译成密码,用原来的字母后面第4个字母代替原来字母。用putchar和printf输出字符数组。 */#include <stdio.h>//含printf,scanf等 void Decoding(char a[]){ int i; for(i = 0;a[i] != '\0';i ++) { if(i == 0)//第一个字符 是大写, { a[i] = char((int(a[i]) + 4 - 'A')%26 + 'A');//循环 .原创 2021-12-29 17:22:46 · 742 阅读 · 0 评论 -
1900-2000年是闰年的年份。(被4整除但不被100整除 或 能被100整除且被400整除)
/*1900-2000年是闰年的年份。(被4整除但不被100整除 或 能被100整除且被400整除) */#include <stdio.h>int main(){ int i,j; for(i = 1900;i <= 2000;i ++) { if(i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0) { printf("%d ",i); } } r.原创 2021-12-29 17:21:53 · 439 阅读 · 0 评论 -
对于一个二叉树中每一个结点值为x的结点,删去以它为根的子树并释放空间。
对于一个二叉树中每一个结点值为x的结点,删去以它为根的子树并释放空间。/*对于一个二叉树中每一个结点值为x的结点,删去以它为根的子树并释放空间。 */#include "stdio.h"//包含 getchar() scanf() printf() #include "malloc.h"//malloc()动态申请空间 函数//二叉树 结点 struct node{ char data; struct node *lchild,*rchild;}bnode;typedef str原创 2021-12-05 23:12:00 · 2734 阅读 · 1 评论 -
编写递归算法,计算二叉树叶子结点的数目。
编写递归算法,计算二叉树叶子结点的数目。/*编写递归算法,计算二叉树叶子结点的数目。 */#include "stdio.h"//包含 getchar() scanf() printf() #include "malloc.h"//malloc()动态申请空间 函数//二叉树 结点 struct node{ char data; struct node *lchild,*rchild;}bnode;typedef struct node * blink;//计算二叉树叶子结.原创 2021-12-05 12:51:08 · 8659 阅读 · 1 评论 -
后序遍历的非递归形式的算法。
后序遍历的非递归形式的算法。/*后序遍历的非递归形式的算法。 */#include <stdio.h>#include <malloc.h>//用来申请二叉树结点空间 #include <stack>using namespace std;//std空间 typedef struct node{ char data; int flag;//结点是否入过栈 标识 ,初始为0 struct node* lchild; struct node.原创 2021-12-04 22:54:47 · 1627 阅读 · 0 评论 -
先序遍历的非递归形式,用栈的基本操作实现
/*用栈的基本操作实现先序遍历的非递归形式的算法。 */#include <stdio.h>#include <malloc.h>//用来申请二叉树结点空间 #include <stack>using namespace std;//std空间 typedef struct node{ char data; struct node* lchild; struct node* rchild;}node,*pnode;//层序 建立 二叉数 p.原创 2021-12-04 22:18:48 · 954 阅读 · 1 评论 -
在定长顺序存储结构表示串,求串中出现的第一个最长重复子串及其位置。
//直接子串和子串比较,查看所有字符串//比如 字符串 aabcbc, 先遍历第一个元素a,从第二个开始找,找到某个跟他一样的,//开始游标k++,j++...然后记录相等子串长度;以此找到最长重复子串//在a[]数组中 以当前i下标开始 和 以k下标开始 开始游标比对(找到相同元素的时候调用,看它们之后的元素是否仍匹配)/*在定长顺序存储结构表示串,求串中出现的第一个最长重复子串及其位置。 */#include <stdio.h>#define N 31//直接子串原创 2021-12-03 23:05:44 · 790 阅读 · 0 评论 -
以结点大小为1,且带有头结点的链表结构表示串,实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数
以结点大小为1,且带有头结点的链表结构表示串,实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数/*以结点大小为1,且带有头结点的链表结构表示串,实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数 *///结点 typedef struct node{ char data; struct node *.原创 2021-12-03 14:44:04 · 530 阅读 · 0 评论 -
数组实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数
数组实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数/*实现串的六种串的基本操作StrAssign,StrCopy,StrCompare,StrLength,Concat和SubString的函数 *///结点 typedef struct node{ char data;}node,*pnode;#include <stdio.h>#define N 51//取较大值 i.原创 2021-12-03 13:20:37 · 3878 阅读 · 0 评论 -
编写一个实现串的置换操作Replace(&S,T,V)
串的置换操作 用串v置换出 串s中与t相同的所有非空串/*编写一个实现串的置换操作Replace(&S,T,V).*/#include <stdio.h>//获取串长度 int get_stringSize(char *p);//打印 void print_string(char *p);// 串的置换操作 用串v置换出 串s中与t相同的所有非空串 void replace(char s[],char t[],char v[]){ int len_v = .原创 2021-12-02 23:33:55 · 4028 阅读 · 0 评论 -
以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。
以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。/*以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。给出队满条件和相应的如对和出队算法。 */#include <stdio.h>#include <malloc.h>#define N 10typedef struct node{ int data; struct node *rear,*front;//域原创 2021-12-01 22:17:32 · 2198 阅读 · 0 评论 -
正读和反读都相同的字符序列为“回文”,现判别读入一个以‘@‘为结束符的字符序列是否为“回文”。
正读和反读都相同的字符序列为“回文”,现判别读入一个以'@'为结束符的字符序列是否为“回文”。/*正读和反读都相同的字符序列为“回文”,现判别读入一个以'@'为结束符的字符序列是否为“回文”。 */#include <stdio.h>#define N 30//获取字符数组长度 int get_arrsize(char a[]){ int length = 0; while(a[length ++] != '\0'); return length - 1;}/原创 2021-12-01 22:16:20 · 2537 阅读 · 0 评论 -
以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),实现队列的初始化,入队和出队。
没有头指针采取从头结点往后遍历,找第一个出队的元素,如果没有找到(从头结点开始,然next等于头结点,说明绕了一圈),则返回-1;/*以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),实现队列的初始化,入队和出队。 */#include <stdio.h>#include <malloc.h>#define N 10typedef struct node{ int data; struct node* next;}node,*原创 2021-11-29 23:31:11 · 6709 阅读 · 0 评论 -
表达式由单字母变量和双目四则运算算符构成。现将一个表达式转换为逆波兰式(所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 。)。
用二叉树遍历算法求该中缀表达式对应的后缀(逆波兰)表达式。/*表达式由单字母变量和双目四则运算算符构成。现将一个表达式转换为逆波兰式(所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 。)。 *//*建立合法的表达式字符串只含二元操作符的非空表达式数用二叉树遍历算法求该中缀表达式对应的后缀(逆波兰)表达式*/ #include "stdio.h"//包含 getchar() scanf() printf() #include "malloc.h"//malloc()动原创 2021-11-28 23:46:31 · 1401 阅读 · 0 评论 -
识别依次读入的一个以@为结束符的字符序列是否为形如‘序列&序列’模式的字符序列。其中两个序列都不含‘&’,且后序列为前一个序列的逆序列。如,‘a+b&b+a’是,而‘1+3&3-1’不是。
识别依次读入的一个以@为结束符的字符序列是否为形如‘序列&序列’模式的字符序列。其中两个序列都不含‘&’,且后序列为前一个序列的逆序列。如,‘a+b&b+a’是,而‘1+3&3-1’不是。/*识别依次读入的一个以@为结束符的字符序列是否为形如‘序列&序列’模式的字符序列。其中两个序列都不含‘&’,且后序列为前一个序列的逆序列。如,‘a+b&b+a’是,而‘1+3&3-1’不是。 */#include <stdio..原创 2021-11-28 22:38:53 · 2540 阅读 · 0 评论 -
实现顺序表的就地逆置,即利用原表的存储空间将线性表逆置。
实现顺序表的就地逆置,即利用原表的存储空间将线性表逆置。/*实现顺序表的就地逆置,即利用原表的存储空间将线性表逆置。 */#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#include <stdio.h>typedef struct{ int elem[LIST_INIT_SIZE];//存储空间的基址 int length;//当前长度 int listsize;//当前分配的存储容量 }SqList;//.原创 2021-11-27 22:02:09 · 2145 阅读 · 0 评论 -
对单链表实现就地逆置
对单链表实现就地逆置/*对单链表实现就地逆置 */#include <stdio.h>#include "malloc.h"typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//线性链表类型//逆置 //先把头结点后一个结点i放在末尾,然后在之前末尾结点和当前末尾结点i之间插入结点如:1 2 3 4 -->2 3 4 1 --> 4 3 2 1 vo...原创 2021-11-27 21:59:44 · 3306 阅读 · 0 评论 -
已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。现在删除表中所有值大于mink且小于maxk的元素,并释放。
已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。现在删除表中所有值大于mink且小于maxk的元素,并释放。/*已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。现在删除表中所有值大于mink且小于maxk的元素,并释放。 */#include <stdio.h>#include "malloc.h"typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//线性.原创 2021-11-26 22:15:12 · 4520 阅读 · 2 评论