C语言
May Hacker
无所谓才能无所畏!我会变得更强!
展开
-
C语言 不大于2019的最大反数、回文数
前言从低位开始,不断提取数字,最后比较即可C语言实现int main(){ int i,num,temp; for(i=2019; i>=0; i--) { temp = 0; num = i; while(num>0) { temp*=10; temp+=num%10; num/=10; } if原创 2020-12-23 22:49:38 · 320 阅读 · 0 评论 -
C语言 字符串按单词逆序输出
题目描述给定字符串Hello world I逆序输出为I world HelloC语言实现// “Hello world I”// “I world Hello ”void wordReversePrint(char s[]){ int i,len = strlen(s); char *start = s; s+=len-1; for(i=len-1; i>=0; i--) { if(*s==' ')//碰见空格就输出空原创 2020-12-14 18:08:53 · 4190 阅读 · 0 评论 -
C语言实现 无序单链表去重
前言对于无序单链表去重,目前我有两种思路两层while,主节点和其他节点挨个比对,遍历时,保存前驱其他节点,碰到相同的删除就可以了,时间复杂度是O(n2)设置flag数组打表,遍历链表且保存前驱,如果第一次碰到该元素,则标记为1,如果再次碰到这个元素则删除就可以,时间复杂度是O(n),缺点就是打表的缺点,无法顾及到所有的数,当数很大时,空间开销大。这里我使用第一种方法。惯例,单链表使用带头节点,方便操作。实现构建单链表typedef struct ListNode{ struct原创 2020-12-11 15:45:08 · 2172 阅读 · 0 评论 -
C语言 递归实现二叉排序树的插入
前言二叉排序树,是用于方便查找的一种树。特征为,左子树的值小于根节点的值,右子树的值大于根节点的值。插入思路当树为空时,新建节点,并让其成为根节点。如果值相同,那么代表插入失败。如果值大于当前结点,应该插入到右子树。如果值小于当前结点,应该插入到左子树。整体是一个递归的思想。二叉排序法int insertNodeBinarySortedTree(BinarySortedTree T,int value){ // 空树则当根节点 if(T==NULL) {原创 2020-12-03 00:16:50 · 1847 阅读 · 3 评论 -
给定两个子序列,存入两个单链表中,判断B是否为A的子序列(C语言)
思想使用两个指针p和q,分别指向需要匹配的两个单链表A和B的第一个数据结点。使用一个pre指针保存p和q匹配的初始位置两两比对,如果相同继续一起往后走,如果不同,则q回到B,p回到pre,也就是开始匹配的地方。再进行比对。例如1 2 3 4 53 4 5注意:以下实现基于带表头结点的链表C语言代码实现/** 判断是否是子序列**/int judgeIsChildOrder(ListNode *A,ListNode *B){ ListNode *p = A-&g原创 2020-11-28 23:39:55 · 1527 阅读 · 2 评论 -
C语言 strstr()函数介绍
前言C语言中,strstr()函数用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中。例如:char *strstr(const char *str1, const char *str2)str1是总串,str2是需要匹配的第一个字串位置,返回值为char * 类型。代码实践int main(int argc, char *argv[]) { char origin_str[100],match_str[100]; gets(origin_str); gets(matc原创 2020-11-22 23:23:57 · 25792 阅读 · 0 评论 -
C语言中的函数指针(指向函数的指针)
函数指针是什么?在定义一个函数之后,在编译后,系统会为函数分配一段存储空间。指针用来保存地址的,而函数指针也是一样,只不过保存的是函数存储空间的起始地址.如何在C语言中使用函数指针函数指针的定义int (*p)(int,int);int代表的是指针变量名,两个int代表,函数参数有两个,且都为int型,当然以上定义只为示例,需要根据不同的函数,指定不同的参数类型和参数个数。通过函数指针调用函数我们先定义一个判断大小的函数int Max(int a,int b){ return原创 2020-11-07 20:29:28 · 1901 阅读 · 0 评论 -
C语言 将整数n分解为若干质数(素数)之积
C语言代码#include <iostream>int main(int argc, char** argv) { int n; scanf("%d",&n); int i=2;//2是最小的素数 while(n>i) { if(n%i==0) { printf("%d ",i); n/=i; }else { i++; } } printf("%d",n);//最后无法分解了,则剩下的这个数就是最后一个质数因子 retur原创 2020-10-27 21:59:52 · 6988 阅读 · 7 评论 -
C语言 结构体数组按字段排序
先按照课程编号从小到大排序,再按照成绩从高到底的顺序进行排序.原创 2020-10-27 10:13:21 · 2919 阅读 · 0 评论 -
C语言 逆序输出字符串
前言逆序输出字符串最可能先想到的是遍历时用栈保存字符,最后出栈。既然栈可以实现,那我们也可以用递归的方法来实现,并且一定会比较简单。除了以上两种,还可以对字符串进行原地逆置,最后再将该字符串输出即可。一、简单递归实现void fun(char *s){ if(*s!='\0') // 递归终止条件 { fun(s+1); // 注意这里是先递归再输出,这样就可以从后面开始逆序输出 printf("%c",*s); }} int main(int argc, char *a原创 2020-10-27 09:20:16 · 14366 阅读 · 0 评论 -
C语言 构造双循环链表 正向输出和反向输出
前言双循环链表是指,每个结点都有指向下一个结点的指针和指向前一个结点的指针。同时,尾结点的next域指向头结点,头结点的prior域指向尾结点。C语言代码实现#include <stdio.h>#include <stdlib.h>typedef struct DoubleCirNode{ int data; struct DoubleCirNode *next; struct DoubleCirNode *prior;}DoubleCirNode,*DCList原创 2020-09-23 23:14:06 · 1284 阅读 · 0 评论 -
输入一组数,构建有序链表 (C语言实现)
要求说明输入一组数,构建有序链表。整体思路用数组保存这组数,每次都去找最小值,把最小值构建结点并使用头插法插入到单链表中。 然后将该值删掉(为简便起见,把值弄成MAX)。这里使用的是类直接插入的排序方法。代码实现#include <stdio.h>#include <stdlib.h>#define MAX 1000000// 单链表结构体定义typedef struct node{ int val; struct node *next;} n原创 2020-07-04 11:14:39 · 2848 阅读 · 0 评论 -
C语言中printf 中 %f 和 %lf 的区别
前言其实这个问题就是错的,printf中根本没有%lf格式输出这一说,这是笔者自己常犯的错误,特此与大家分享一波。scanf中的格式控制printf中的格式控制在printf中,无论是float类型还是double类型,输出都需要用%f,在有些系统中用%lf也不会出错,但是尽量还是按照标准来。...原创 2020-01-29 13:28:26 · 25421 阅读 · 7 评论