C语言
程序喵阿呆
道济天下,智周万物
展开
-
快排qsort
void swap(int a[], int i, int j){ if(i >= j) return; int tmp = a[i]; a[i] = a[j]; a[j] = tmp; return;}void qsort(int a[], int low, int high){ if(low >= high) return; int pos; int p = a[low]; int i = low; int .原创 2021-12-27 23:20:31 · 235 阅读 · 0 评论 -
反转链表-三个指针
struct node* reverse_linklist(struct node*head){ if(head == NULL || head->next == NULL) return head; struct node* beg = NULL; struct node* mid = head; struct node* end = head->next; while(1) { mid...转载 2021-12-27 16:45:56 · 152 阅读 · 0 评论 -
二叉树实现
#include<stdio.h>#include<stdlib.h>#define NAMESIZE 32struct score_st{ int id; char name[NAMESIZE]; int math; int chinese;};struct node_st{ struct score_st data; struct node_st *l,*r;};void print_s(struct s...原创 2021-12-13 20:51:26 · 3605 阅读 · 0 评论 -
荣耀机试题2
#include<stdio.h>#include<stdlib.h>#include<string.h>#define fnum 20 //水果种类struct s{ char f[32]; int w[101];};void sort(int a[], int people){ int i,j; for(i = 0; i < people; i++) for(j = i...原创 2021-12-12 21:16:10 · 854 阅读 · 0 评论 -
有限状态机编程
头文件relay.h#ifndef _RELAY__H_#define _RELAY__H_#include <stdlib.h>#define JOBMAX 10000enum { STATE_RUNNING = 1, STATE_CANCELD, STATE_OVER};struct relay_stat_st{ int state; int fd1; int fd2; int64_t count12, count21;};// retrurn原创 2021-11-07 23:44:17 · 249 阅读 · 0 评论 -
pthread学习--使用条件变量实现信号量
在实际开发过程,可能会控制某个模块所使用的资源,同一时刻只允许某个功能使用一定数量的资源。同样是筛质数,同一时刻只允许同时四个线程进行计算,所以需要使用一个信号量进行总资源的控制,代码如下://mysem.h#ifndef _MYSEM_H__#define _MYSEM_H__#include <pthread.h>//extern struct mysem;struct mysem { int val; pthread_mutex_t mutex;原创 2021-11-05 15:19:49 · 314 阅读 · 0 评论 -
线程学习--pthread--锁链及条件变量
pthread_cond_wait函数的使用,一般跟lock一起用pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);等待条件变量满足; 把获得的锁释放掉;(注意:1,2两步是一个原子操作) 当然如果条件满足了,那么就不需要释放锁。所以释放锁这一步和等待条件满足一定是一起执行(指原子操作)。--很重要。 pthread_cond_wait()被唤醒时,它解除阻塞,并且尝试获取锁(不一定拿到锁)。因此,一原创 2021-11-05 14:43:02 · 396 阅读 · 0 评论 -
线程学习--pthread-筛质数
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <pthread.h>#define LEFT 40000000#define RIGHT 40000200void *primer(void *arg){ int i = (int)arg.原创 2021-10-27 20:57:44 · 237 阅读 · 0 评论 -
mydeamon--守护进程实例
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>static int deamonize(void){ pid_t pid = fork(); if(pid < 0) { perror("fork()"); exi.原创 2021-10-26 22:33:23 · 145 阅读 · 0 评论 -
mysudo--Linux用户权限管理实现
一直对Linux中的u+s权限不是很理解,一起来看看setuid的使用任何用户执行时,都以setuid程序文件所属的用户的身份运行。一般使用场景是,对归属root的程序进行setuid,以便普通用户有root用户的权限。上代码:#include <stdio.h>#include <stdlib.h>#include <wait.h>#include <unistd.h>#include <sys/types.h>in原创 2021-10-26 17:24:59 · 195 阅读 · 0 评论 -
leetcode-125.验证回文字符串
125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true解释:"amanaplanacanalpanama" 是回文串示例 2:输入: "race a car"输出: false解释:"raceacar" 不是回文串提示:1 <= s.length <= 2 * 105原创 2021-10-15 11:15:42 · 140 阅读 · 0 评论 -
合并两个有序数组
合并两个有序数组第一种方法:暴力法,先合并,再排序,冒泡排序,简单粗暴void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ int i = 0, j = 0; for(i = m, j = 0; i < m+n, j < n; i++, j++) nums1[i] = nums2[j]; int tmp; for(i = 0原创 2021-08-21 16:43:00 · 498 阅读 · 0 评论 -
HashMap的使用
尝试自己写一个HashMap,统计一个数组中各个元素的个数,数组设置的比较小,后续再优化,冲突的时采用地址链接法。#include<stdio.h>typedef struct Node{ int val; int count; struct Node *next;}node;#define seed 7node *p[seed] = {NULL};int add_hash(int key){ int idx = key * key % seed; if(p[id原创 2021-08-18 23:41:31 · 180 阅读 · 0 评论 -
leetcode--多数元素即众数
leetcode 多数元素题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:[3,2,3]输出:3示例2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。第一种解法:go中的map,很简单func majorityElement(nums []i...原创 2021-08-18 18:03:42 · 149 阅读 · 0 评论 -
leetcode只出现一次的数字
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4第一种解法:思考:首先不考虑说明部分,不考虑空间复杂度和时间复杂度,看到题目中有个限制,除了唯一元素外,其他元素都均出现两次,遍历整个数组,把出现两次的元素都标记0,最后再遍历一把数组。如果全部.原创 2021-08-16 21:15:52 · 205 阅读 · 0 评论 -
leetcode11-装水最多的容器-这题是不是过于简单
###解题思路执行用时:1308ms,在所有C提交中击败了17.99%的用户内存消耗:6.2MB,在所有C提交中击败了93.30%的用户看起来不能使用过多的循环,不然用时感人。。。这题是不是过于简单了,暴力法,遍历即可###代码intmaxArea(int*height,intheightSize){inti,j;intmax=0;intarea=0;for(i=0;i&l...原创 2020-08-14 15:36:36 · 133 阅读 · 0 评论 -
leetcode6-Z字型变换(超好理解--暴力法)
6. Z 字形变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例1...原创 2020-08-10 17:03:20 · 214 阅读 · 0 评论 -
leetcode4-求两个正序数组的中位数(二分查找法待补充)
#include<stdio.h>#include<malloc.h>double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){ if(nums1Size + nums2Size == 0) return 0; if(nums1Size == 0) { if(nums2Size % 2 == 0) ...原创 2020-08-06 23:16:51 · 132 阅读 · 0 评论 -
leetcode8-字符串装整形(atoi)--注意越界
8. 字符串转换整数 (atoi)请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字..原创 2020-08-06 16:45:35 · 248 阅读 · 0 评论 -
leetcode12-整形数字转罗马数字(疯狂使用goto)
12. 整数转罗马数字罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+...原创 2020-08-05 09:16:36 · 193 阅读 · 0 评论 -
leetcode9-回文数(简单0_0)
9. 回文数解题思路第一次首次提交就通过,没有错误和超时,yeah!!!首先把整形数每一位分离出来,存在一个数组中,从数组两端向中间挤进,判断是否相等。bool isPalindrome(int x){ if(x < 0) return false; if(x >= 0 && x < 10) return true; int a[20] = {0}; int len = 0; .原创 2020-08-04 20:54:01 · 103 阅读 · 0 评论 -
leetcode7-整数反转(简单0_0)
7. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21解题思路主要思路:t = t*10 + x % 10;x = x /10;注意边界条件和反转之后越界问题int reverse(int x){ signed int t = 0; while (x / 10) { t ..原创 2020-08-04 20:36:39 · 127 阅读 · 0 评论 -
leetcode5-最长回文字符串(超时通不过,难受~_~)
解题思路:固定从头开始的第一个字符串,一个从尾开始,分别遍历每一个字符,看是否与固定的字符组成最长回文字符串。超时超时啊,有点想不通啊!char * longestPalindrome(char * s){ int i,j; int start,len; int length = strlen(s); if(length < 2) return s; len = 0; for(i = 0; i < len.原创 2020-07-16 21:02:52 · 277 阅读 · 0 评论 -
变异题---求字符串中最长的头尾字符相同的子串(letcode5刷题失败程序)
题目:(做letcode第5题:最长回文字符串时,把回文字符串理解错了,写成了如下程序,记录一下)给定字符串s,求s的所有子串中,头尾字符相同长度最长的子串。解答:char * longestPalindrome(char * s){ int length = 0; int i,j,m; int len = 0; int flag = 0; int start; length = strlen(s); if(length &.原创 2020-07-15 16:07:32 · 515 阅读 · 0 评论 -
letcode3-无重复字符的最长子串(加油)
题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列...原创 2020-07-14 19:06:00 · 80 阅读 · 0 评论 -
letcode2-两数之和(内存击败100%用户*_*)
/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*addTwoNumbers(structListNode*l1,structListNode*l2){intsum=0;inti=1;while(NULL...原创 2020-07-13 20:41:18 · 269 阅读 · 0 评论 -
郝斌老师数据结构10(递归)
专题:递归【这对你的编码能力是个质的飞跃,如果你想成为一个很厉害的程序员,数据结构是必须要掌握的,因为计算机专业的本科生也达不到这水平!计算机特别适合用递归的思想来解决问题,但是我们人类用递归的思想来考虑问题就会感到十分困扰,这也是很多学过递归的人一直都搞不明白的地方!那是不是递归可以随便写,当然不是,有些同学一用递归程序就死翘翘了。递归的思想是软件思想的基本思想之一,在树和图论上面,几乎全是用递归来实现的,最简单,像求阶乘这种没有明确执行次数的问题,都是用递归来解决】定义: ...原创 2020-07-02 14:38:10 · 245 阅读 · 0 评论 -
郝斌老师数据结构9(循环队列)
队列定义:一种可以实现先进先出的存储结构分类:链式队列:链表实现静态队列:数组实现,静态队列通常必须是循环队列,减少内存浪费。链式队列:与链表类同,实现略循环队列:循环队列需要两个参数来确定: 1.front(队头) 2.rear(队尾)循环队列的几个定义解释: 1.队列初始化:front和rear均为0 2.队列非空:front指向队列第一个元素下标,rear指向队列最后一个元素的下一个元素下标 ...原创 2020-06-30 20:01:03 · 229 阅读 · 0 评论 -
郝斌数据结构8(两栈共享空间-参考大话数据结构)
数组有两个端点,两个栈有两个栈底,让一个栈的栈底在数组的开始端,即下标为0的地方;让另外一个在栈底在数组的末端,即下标为n-1的地方,如果两个栈增加元素,就是两端点向中间的延伸。#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define Maxsize 100typedef struct SeqStack{ int data[Maxsize]; int top1; ..原创 2020-06-28 10:46:35 · 161 阅读 · 0 评论 -
郝斌数据结构6(双向链表)
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<stdbool.h>typedef struct Node{ int data; struct Node * prior; struct Node * pnext;}NODE, * PNODE;PNODE creat_list(){ int len = 0; int i = 0;原创 2020-06-23 14:32:18 · 130 阅读 · 0 评论 -
郝斌数据结构5(静态链表)
最近在看视屏学习郝斌老师的数据结构,但是视频中只是讲了一部分数据结构的内容,静态链表没有讲,我参考大话数据对静态链表进行尝试。静态链表其实是为了给没有指针的高级语言设计的一种实现单链表能力的方法。把静态链表整体看做是一个结构体数组,这个结构体中有两个数据域组成,data(数据)和cur(游标),数组的每一个下标都对应一个数据域和一个游标,数据域data存放数据,cur相当于单链表中的next指针,存放该节点的后继节点的坐标。为了方便插入数据,一般在把数组建得较大,以便有一些空闲空间在插入时不溢出。静原创 2020-06-22 16:57:57 · 106 阅读 · 0 评论 -
郝斌数据结构7(栈)
#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<malloc.h>typedef struct Node{ int data; struct Node *pNext;}NODE, *PNODE;typedef struct Stack{ PNODE pTop; PNODE pBottom;}STACK, *PSTACK;voi原创 2020-06-17 11:42:21 · 107 阅读 · 0 评论 -
郝斌数据结构4(链表程序)
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct Node{ int data; struct Node * pnext;}NODE, * PNODE;PNODE creat_list(){ int len = 0; printf("请输入您需要创建的链表长度:len = "); scanf("%d",&len);原创 2020-06-15 11:12:59 · 237 阅读 · 0 评论 -
郝斌数据结构2(连续存储-数组)
线性结构特点:把所有节点用一条直线串起来连续存储什么是数组:元素类型相同,大小相等数组的优缺点:优点:存取速度快缺点:插入删除元素很慢例子(我自己改变一部分,但大致结构没有变)#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<stdbool.h>struct Arr{ int *pBase;//数组的首地址 int cnt;//数组内有效字节数原创 2020-06-09 20:38:41 · 186 阅读 · 0 评论 -
郝斌数据结构3(typedef、链表基础知识)
typedef使用#include<stdio.h>typedef struct Student{ int sid; char name[100]; char sex;}* PST, ST;int main(void){ ST st; //struct Student st; PST pst = &st; //struct Student *pst = &st; pst->sid = 99; printf("%d\n",pst->sid);原创 2020-06-15 11:11:53 · 256 阅读 · 0 评论 -
代码文档生成工具doxdgen使用简易教程
标题代码文档工具简易使用手册说明:doxdgen是一款开源的代码文档生成工具,在简单的探索研究之后,主要用于本项目生成dfs_api.h的接口文档,提供给用户侧查阅接口,按照指定的格式进行注释,使用doxdgen工具可以自动生成接口文档,期望大家可以推广使用。以下仅对window下doxdgen处理C代码的简易教程1.doxdgen下载安装下载地址:https://www.doxygen.nl/download.html在这个页面不用填写邮箱什么的,直接下拉下载,下载后直接安装即可。2.doxd原创 2020-06-08 11:37:44 · 1592 阅读 · 0 评论 -
郝斌数据结构1(预备知识、指针、跨函数使用内存)
概述数据结构的定义我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对元素进行排序等)而执行的相应操作,这个相应的操作也叫算法。数据结构 = 个体的存储 + 个体的关系存储算法 = 对存储数据的操作算法定义通俗的说算法是解题的方法和步骤衡量算法的标准:时间复杂度:程序大概要执行的次数空间复杂度:程序执行过程中大概所占用的最大内存空间难易程度 :易用易懂,避免过原创 2020-06-02 20:55:15 · 111 阅读 · 0 评论 -
C语言-数组小练习
1.题目:1.有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位#include<stdio.h>#include<stdlib.h>int main(void){ int n; printf("please input n:"); scanf("%d",&n); int *a = (int *)malloc(sizeof(int)*n); int i = 0;原创 2020-05-19 20:53:25 · 235 阅读 · 0 评论 -
scanf函数读入单个字符问题
如果用scanf(_"%c",&ch),那么程序不会忽略为了输入而按下的回车键操作,而是认为回车键是后续操作而继续相应;而scanf(" %c", &c)在%c之前空格会告诉scanf忽略前面的空行,而等待第一个非空行元素读入其中。 修改scanf处,加上空格后程序运行就正常了。原文链接:https://blog.csdn.net/qiye005/article/details/46650933/...转载 2020-05-19 15:29:19 · 2307 阅读 · 0 评论