首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现(C语言版

将根节点最大堆叫做最大堆或大根堆,根节点最小堆叫做最小堆或小根堆。堆性质: 堆中某个节点值总是不大于或不小于其父节点值; 堆总是一棵完全二叉树。...堆实现 初始化 堆存储结构是一个数组,堆初始化需要定义一个数组,当前元素个数和容量。和顺序表初始化一样。...,10<28,不满足小堆条件,将10和28,进行交换: 交换完后,此时10变成了28双亲结点,28变成了10孩子结点。...现在再将10与它双亲结点比较,10<18,不满足小堆特点,继续交换。 交换完后10变成了18双亲结点,18变成了10孩子结点。...HeapPop(HP* php); HPDataType HeapTop(HP* php); size_t HeapSize(HP* php); bool HeapEmpty(HP* php); Heap.c

10310

位运算--C语言版

问题引入 题目:求一个数字二进制位中有多少个1 假设我们给定一个数字为7,7二进制为0000 0111(已省略前面的24个0)接下来我们来探究一下如何求出7二进制当中有多少个数字1 思路一...要想求出一个数字有多少个1,我首先会想到,要是能求出这个数字每一位数字,那么不就直接知道有多少个1了,接下来问题就是,如何求出这个数字每一位呢?...1个数,但是7这个数字二进制除去后面3位是1,其余都是0,也就是说在向右移位3次之后,后面就全是0了,所以之后29次循环就是在做无用功了,所以执行效率很低 思路二 在每进入一次循环后,就将移向右移动一位...n后n重新赋值给n,再判断n是否为为0,要是为0,就说明此时n二进制全是0,就可以直接返回count,这样就可以有效不必要减少循环次数 public static int Findnum(int...上面的代码还是在一位一位按顺序进行移位,有没有更好方法可以将1个数全部快速求出来?

67910
您找到你想要的搜索结果了吗?
是的
没有找到

基本操作(C 语言版

基本操作(C 语言版) 复习堆基本操作C语言实现,以小顶堆为例。因为大顶堆和小顶堆实现方式差不多,会小顶堆,大顶堆也就会了吧哈哈!...堆介绍 堆定义 堆(Heap)就是用数组实现二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点位置。...堆常用方法: 构建优先队列 支持堆排序 快速找出一个集合中最小值(或者最大值) 堆属性 堆分为两种:最大堆和最小堆,两者差别在于节点排序方式。...最大堆(大顶堆):① 根值大于左右子树值 ② 子树也是最大堆 最小堆(小顶堆):① 根值小于左右子树值 ② 子树也是最小堆 这是一个最大堆,,因为每一个父节点值都比其子节点要大。...堆属性非常有用,因为堆常常被当做优先队列使用,因为可以快速访问到“最重要”元素。

93220

飞机订票系统—C语言版

简介 可以算个伪原创吧,这是之前为朋友做一个课程设计,当初从网上找了几个最后修改出这么一个简单系统,当个作业交给老师还是没什么问题。附件里有所有文件打包下载。...附件内容 ①AircraftBookingSystem(源文件).rar——这是源文件(即.c和.h)打包 ②AircraftBookingSystem.rar——这是源程序打包 ③C语言课程设计—...—飞机订票系统.doc C语言课程设计——飞机订票系统.docx 这两个是最开始时写课程报告文档。...④C语言课程设计——飞机订票系统a.doc 这是朋友说页数太多了,之后精简到我感觉实在没法精简地步课程报告文档。 ③和④喜欢哪个用哪个吧,里面的封面是朋友给。...(j,"yes")==0); //判断结束 print(); } 附件(打包下载) [Downlink href="http://pan.baidu.com/s/1qWx5ZeW"]飞机订票系统—C语言版

9.4K61

学会Cantor表--C语言版

Cantor表题目如下: 你是否因为读不懂Cantor表而苦恼,事实上,我们只要将Cantor表进行一下转化就可以十分轻松解决这道题目 仔细看图可知,奇数行分子在递减,分母在递加,而偶数行分子在递加...,分母在递减,就可以进一步得出结论:第n项中就会有n个数字,而且数字分子和分母相加就是n+1。...假设我设n为第n项,h为行数,k为列数,我将行数一次相加,如果得到行数之和大于n,就说明我找到了行数,进而可以求出列数,所以就可以得出最终结果。...如果上面的文字不好理解,我们可以将问题具体化 将设我输入n为7,使用sum来记录行数依次相加结果,直到sum>=n时,此时函数循环变量 i 为4,那么行数h也就是4,sum-1赋值给sum,sum变为...} } printf("%d/%d\n", k, h - k + 1); } return 0; } 以上就是我对于Cantor表内在规律理解

82020

手写线程池 - C语言版

线程池原理 我们使用线程时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发线程数量很多,并且每个线程都是执行一个时间很短任务就结束了,这样频繁创建线程就会大大降低系统效率,...: 任务队列,存储需要处理任务,由工作线程来处理这些任务 通过线程池提供 API 函数,将一个待处理任务添加到任务队列,或者从任务队列中删除 已处理任务会被从任务队列中删除 线程池使用者,也就是调用线程池函数往任务队列中添加任务线程就是生产者线程...工作线程(任务队列任务消费者) ,N个 线程池中维护了一定数量工作线程,他们作用是是不停读任务队列,从里边取出任务并处理 工作线程相当于是任务队列消费者角色, 如果任务队列为空,工作线程将会被阻塞...(使用条件变量 / 信号量阻塞) 如果阻塞之后有了新任务,由生产者将阻塞解除,工作线程开始工作 管理者线程(不处理任务队列中任务),1个 它任务是周期性对任务队列中任务数量以及处于忙状态工作线程个数进行检测...当任务过多时候,可以适当创建一些新工作线程 当任务过少时候,可以适当销毁一些工作线程 2.

1.9K30

成员访问符号(.和-)详解c语言版

成员访问符号(.和->)详解: 一、成员访问符 成员访问符通常是指:用于访问结构体、类或对象成员(属性或方法)符号。 操作符名称: 点号(.)...箭头符号(->) 双冒号(::) 在大多数编程语言中都使用点号来访问结构体、类或对象成员。 在CC++中,当通过指针访问结构体或类成员时,需要使用箭头符号来代替点号。...一般用于C++中,在C++中,一般用于访问命名空间中成员,也可以用于访问静态成员和嵌套类。 在C语言中,我们主要使用前两种操作符,对于第三种我们在本文中不进行深入展开。...; 但是我们在具体使用上仍可能出现差错,下面我用一些代码详细为大家说明二者用法具体区分 struct Person p1; //p表示类型为结构体Person 变量 struct...p2表示是Person结构体指针变量(存储是结构体变量地址),所以需要用->来访问成员变量,无法用 (.)来访问 所以第6行错误,第7行正确; 但是我们可以对 指针pp进行解引用,(*pp)

20710

数据结构——队列(C语言版

准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c用来放调用函数,SeqList.h用来放头文件和函数声明...队列中数据是按照先进先出顺序,也就是说先进去数字也先出来 因为队列这种性质,所以队列我们用链表来实现比顺序表方便很多,因为用顺序表每插入一个数或者删除一个数都需要遍历整个数组,这样就会很容易出错且不够方便...,我们一般采用单链表来实现队列 队列节点结构 队列采用单链表结构,所以与单链表差异不大 typedef int QDataType; typedef struct QueueNode { struct...test.c //队列 void TestQNode() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush...QueueBack(Queue* pq); //取长度 QDataType QueueSize(Queue* pq); //判断是否为空 bool QueueEmpty(Queue* pq); SeqList.c

5610

判断大小端--C语言版

大端(存储)模式,是指数据低位保存在内存高地址中,而数据高位,保存在内存低地址 中; 小端(存储)模式,是指数据低位保存在内存低地址中,而数据高位,,保存在内存高地 址中。...printf("小端\n"); } else { printf("大端\n"); } return 0; } 方法二:利用联合体数据存储特点...联合体里面的数据会共用同一块内存,改变其中一个数据值,其他数据值可能也会随之变化 int is_byteorder(int* p) { union un { //定义一个联合体类型...int i; char c; }u; u.i = 1;//修改i值,c值也会随之发生变化 return u.c; } int main() { int...\n"); } else { printf("大端\n"); } return 0; } 如果将 i 改为1,如果是小端存储,就会将01存储到 c

1.9K20

数据结构——栈(C语言版)

准备工作:本人习惯将文件放在test.c、SeqList.c、SeqList.h三个文件中来实现,其中test.c用来放主函数,SeqList.c用来放调用函数,SeqList.h用来放头文件和函数声明...队列中数据是按照先进后出顺序,也就是说先进去数字后出来 因为栈这种性质,所以栈我们用顺序表来实现比链表方便很多,顺序表就可以实现尾插尾出,所以我们一般就采用顺序表来实现 栈节点结构 队列采用顺序表结构...bool STEmpty(ST* pst); //找栈顶元素 STDataType STTop(ST* pst); //栈中元素个数 STDataType STSize(ST* pst); test.c...("%d ", STTop(&st)); STPop(&st); } STDestroy(&st); } int main() { test(); return 0; } SeqList.c...,熟练栈和队列,对我们巩固顺序表和链表帮助很大,当然,栈在一些场景下很实用,后面我会出一个专门习题讲解篇章,讲数据结构一些经典题型,感兴趣可以点赞关注一下 创作不易,还请各位大佬点赞支持一下!

6410

用栈模拟实现队列(c语言版)

前言 用"栈实现队列",力扣中一道oj题,可以帮助刚接触"栈"和"队列"新手更好理解栈和队列这两种结构....MyQueue): //模拟队列类型声明 typedef struct { ST stackpush; //用于模拟队列 入队操作 ST stackpop; //用于模拟队列...步骤: 申请两个栈大小空间. 申请失败时判断一下. 对队列中两个栈,一次调用他们初始化函数....初始状态下或者stackpop(模拟出队栈)数据出队列到空时,里面是没有数据,所以先判断stackpop是否有数据. 有数据:则直接获取stackpop栈顶元素作为队首元素....); STDestory(&obj->stackpop); free(obj); } 二、总代码: 前面的代码是栈实现,由于c语言不能像c++那样直接调用库. typedef int

16510

数据结构——单向链表(C语言版

在数据结构和算法中,链表是一种常见数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点指针。在C语言中,我们可以使用指针来实现单向链表。下面将详细介绍如何用C语言实现单向链表。...定义节点结构体 首先,我们需要定义表示链表节点结构体。每个节点包含一个数据域和一个指向下一个节点指针域。...head, 2); printf("List after deleting 2: "); printList(head); return 0; } 通过以上步骤,我们实现了用C语言创建...链表是一种重要数据结构,掌握链表实现原理对于理解其他数据结构和算法也非常有帮助。...在接下来我们也将学习双向链表等更有意思东西,如果本篇有不理解地方,欢迎私信我或在评论区指出,期待与你们共同进步。

8010

数据结构——顺序表(C语言版

顺序表是数据结构中最基本一种线性表,它以一段连续存储空间来存储数据元素,元素之间顺序由它们在内存中位置来决定。在C语言中,我们通常使用数组来实现顺序表。...return 0; } 通过以上实现,我们可以在C语言中创建、插入、删除和查找顺序表中元素。...顺序表简单实现不仅有助于理解数据结构基本概念,还可以为解决实际问题提供基础。...顺序表作为线性表开头部分,对于我们后续学习数据结构中还是很重要,需要我们把它学好,本篇文章也只是点了一下知识点并给出少许例子,更多知识还需要我们自己去探索学习!...感谢观看,还请点一个小小赞吧!!!

6410

C语言链表排序_C语言版数据结构链表

//以上搬运至郝斌老师数据结构中视频知识,然后依样画葫芦去写; //当然指针知识和链表基础知识要先懂: //首先先创建链表,如下: #include #...退出程序\n”); exit(-1); //需要加头文件stdlib.h } PNODE pTail = pHead; //创建尾节点作为首节点,这个作用在于后面将新创建节点覆盖于尾节点...; exit(-1); } printf(“请您输入要输入第%d节点值:”, i+1); scanf(“%d”, &val); pNew->data = val;...; //使新节点再次成为尾节点,和首次步骤一样 } return pHead; } //其次,对链表遍历是必须; void traverse_list(PNODE pHead...:len = 5 请您输入要输入第1节点值:12 请您输入要输入第2节点值:34 请您输入要输入第3节点值:26 请您输入要输入第4节点值:44 请您输入要输入第5节点

1.8K30
领券