老顶的实用程序
各种普遍应用且实用的程序及思路分享
张大彪cx
keep going
展开
-
堆排序(向下排序法)
【代码】堆排序(向下排序法)原创 2022-08-21 09:19:27 · 389 阅读 · 1 评论 -
不会吧,不会吧,全网最细汉诺塔讲解,不会有人不知道吧。面试官直呼内行,看完只想默默找水喝(C语言)
最干hanoi,看完直呼口干舌燥Hanoi(汉诺塔问题)一、什么是汉诺塔二、分析1、移动过程2、应用思想+函数雏形3、部分代码三、总代码四、递归调用OVERHanoi(汉诺塔问题)一、什么是汉诺塔在研究汉诺塔问题时,我们要明白到底什么是汉诺塔。1、有三根相邻的柱子,标号为A,B,C。 2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。关于汉诺塔的基本玩法呢,大家也可以去度娘上搜索一下,切.原创 2021-08-20 00:53:02 · 1357 阅读 · 2 评论 -
Leetcode622.---设计循环队列cx
typedef struct { int* a; int k; // 队列最多能存多少个数据 int front; // 头 int tail; // 尾(队尾数据下一个)} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) { MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));.原创 2021-05-04 00:28:11 · 95 阅读 · 0 评论 -
数据结构---栈和队列的理解与实现cx
栈的含义及特性定义:限定仅在表尾进行插入或删除操作的线性表。表尾为栈顶,表头为栈底,不含元素的空表称为空栈。最先放入栈中元素在栈底,最后放入的元素在栈顶;而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。栈的存储结构栈有两种主要的存储结构:顺序栈和链式栈。栈是一种在操作上稍加限制的线性表,即其本质就是线性表,而线性表有两种主要的存储结构—顺序表和链式表,因此栈有两种存储结构,我们主要来实现顺序储存栈的顺序储存顺序栈和顺序表数据成员相同,不同之处: 顺序栈的入栈和出栈操作只允许.原创 2021-04-25 19:51:32 · 105 阅读 · 0 评论 -
Leetcode20.---有效的括号cx
题目注意由于C语言没有栈的库,所以要自己写一个栈代码and思路typedef char STDataType; struct Stack { STDataType* a;//静态栈相对动态栈有许多的缺点 int top; //栈顶 int capacity; //容量,方便增容 }; //typedef struct Stack ST; typedef struct Stack Stack; .原创 2021-04-25 19:19:22 · 102 阅读 · 0 评论 -
C语言 数据结构入门----顺序表的实现cx
顺序表的基础实现C语言实现顺序表的基础操作顺序表线性结构存储示意图C语言顺序表的基本操作定义顺序表结构体结构体初始化接口的列举(SepList.h)接口的实现(SepList.c)OVERC语言实现顺序表的基础操作所谓数据结构顺序表和链表的基本操作,实际上就是实现对一个顺序表(链表)的增删查改及其其他接口的实现。顺序表线性结构存储示意图C语言顺序表的基本操作定义顺序表结构体由长度和数据数组组成:typedef int SeqDataType;//类型typedef struct SeqLi原创 2021-04-23 22:51:45 · 276 阅读 · 0 评论 -
删除链表中重复的结点cx---超详细思路(三指针搞起)
题目思路删除结点一般要使用双指针,但通过画图得知,双指针在遍历的过程中会丢失链表,所以:常规情况考虑完,不可忽略的是任何一种的极端情况:分析完毕,但也要注意代码的完整。上才艺/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode.原创 2021-04-22 21:43:31 · 55 阅读 · 0 评论 -
Leetcode138.---复制带随机指针的链表cx
题目解题首先要看懂题意,什么是复杂结点优化主要针对所提出的两个问题:对其进行进一步的优化代码实现然后对所画的图的思路进行代码实现:总代码/** * Definition for a Node. * struct Node { * int val; * struct Node *next; * struct Node *random; * }; */struct Node* copyRandomList(struct Node* head).原创 2021-04-21 18:40:55 · 48 阅读 · 0 评论 -
力扣141.142---环形链表(龟兔指针的干活)cx
LeetCode141.首先明白什么是环形链表:依旧是应用龟兔即快慢指针:代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */bool hasCycle(struct ListNode *head) { struct ListNode* slow = head,* fast = head; .原创 2021-04-20 15:18:39 · 69 阅读 · 0 评论 -
Leetcode160.---相交链表cx
题目至于单链表的相交结点有一些说明思路余下的注意事项在代码中体现:上才艺/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { i.原创 2021-04-18 20:49:08 · 56 阅读 · 0 评论 -
一刀流---链表分割cx
上题目这个题目更像是前面题的变形,所以所应用的方法呢,还是差不多一样的但实现后我们会发现一个这样的错误:这一般是程序的迭代出现了问题,所以要想象极端情况好了,上才艺/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class Partition {public: ListNode* partition(Lis.原创 2021-04-16 15:48:03 · 57 阅读 · 0 评论 -
链表的回文结构cx(快慢指针和链表逆置的综合升级)
题目会问结构即对称的结构思路一因为空间复杂度并不符合题意,故就不写代码了,但这种方法也可以通过测试用例思路二上才艺/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class PalindromeList {public: struct ListNode* middleNode(struct ListNode*.原创 2021-04-17 15:27:16 · 76 阅读 · 0 评论 -
合并二次方---合并两个有序链表cx
题目比较取小的结点,尾插进新的链表(无头)通过题目可以让我联想到前段时间的合并两个有序数组,所以第一个思路也就衍生出来后面是代码滴实现:struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ //先判断下l1或l2是否有空指针 if(l1 == NULL) return l2; if(l2 == NULL) return l1; struc.原创 2021-04-16 11:12:32 · 92 阅读 · 0 评论 -
超赞,重拳出击死亡快慢指针cx
快慢指针是较常用的一种算法,以两道题为例,具体实现下:Leetcode.876—链表的中间节点引用快慢指针转化为代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* middleNode(struct ListNode* head){ struct ListNo原创 2021-04-15 22:31:41 · 69 阅读 · 0 评论 -
Leetcode206.---反转链表cx(链表的逆置)
链表的逆置First代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head){ if(head == NULL||head->next == NULL)//判断是否为空链表或只有一个节点 .原创 2021-04-14 22:59:08 · 51 阅读 · 0 评论 -
Leetcode203.---移除链表元素cx
移除链表元素基础的思路当然必须要考虑某些特殊情况,如收个元素就是val代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeElements(struct ListNode* head, int val){ //返回地址故不需要二级指针 s.原创 2021-04-14 20:32:11 · 59 阅读 · 0 评论 -
Leetcode189.---旋转数组cx
题目既然是多种方法,我们就从之容易想到的思路开始再慢慢优化出最优解思路三来说较为新颖,这种只能多做题多看书来拓宽自己的思维那我们就具体实现下第三种void Rrverse(int* num,int left,int right)//逆置函数{ while(left < right) { int tmp = num[left]; num[left] = num[right]; num[right] = tmp;原创 2021-04-13 17:51:34 · 57 阅读 · 0 评论 -
Leetcode88.---合并两个有序数组cx
题目虽然时间复杂度O(m+n)已经最优,但由于空间复杂度为O(N)不符合条件,于是本着优化空间复杂度,有了思路二void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ int end1 = m - 1;//第一个数组的小标 int end2 = n - 1;//第二个数组的小标 int end = m + n - 1;//合并之后最后一个元素的下标 while(e原创 2021-04-13 15:22:38 · 55 阅读 · 0 评论 -
Leetcode989.---数组形式的整形加法cx
/** * Note: The returned array must be malloced, assume caller calls free(). */int* addToArrayForm(int* A,int ASize, int K, int* returnSize){ int kSize = 0; int num = K; while(num) { ++kSize; num /= 10; } int len原创 2021-04-12 21:52:46 · 59 阅读 · 0 评论 -
Leetcode26.---删除有序数组中的重复项cx
删除有数组中的重复项题目第一种:以空间换时间但其空间复杂度为O(N),并不符合题目的要求,所以只是把思路捋顺一下,具体代码就不实现了第二种:运用三指针的形式基本思路捋顺后,代码就可以轻而易举地实现,但要注意的是,其中要充分考虑各个地方可能出现的越界问题。int removeDuplicates(int* nums, int numsSize){ if(numsSize == 0) { return 0;//解决倒二的越界风险原创 2021-04-12 10:02:30 · 51 阅读 · 0 评论 -
Leetcode27.---移除元素cx
每日一题——移除元素题目分析题目具体思路思路一:挪动数据这种思路为大家最容易想到的思路,也是较复杂的一种思路,具体代码如下:但通过具体的代码分析得知:不符合题目的要求,故行不通。思路二:运用指针将不是val的都放到一个新的数组中分析如下,可知依旧不符合题目要求:思路三:运用双指针经分析可见此方法可以依据题意合理完成,代码实现:int removeElement(int* nums, int numsSize, int val){ int src = 0,dst原创 2021-04-11 22:23:55 · 90 阅读 · 1 评论 -
墩墩墩---冒泡排序
什么是冒泡排序即两个相邻的数进行比较,如果不符合就交换,交换后交换的数与他相邻的数再进行比较,直到比较到最后一位(因为是叫做冒泡,所以我还喜欢叫它墩墩排序)例如假设有一个数组{4,3,2,1},我们要求要将它按从小到大输出,就可以运用到冒泡排序,由最左端开始:{3,4,2,1} —>{3,2,4,1} —> {3,2,1,4}这就是一趟,第一趟比较完开始第二趟 —> {2,3,1,4} —> {2,1,3,4} —> {2,1,3,4}第二趟,{1,2,3,4}第三趟。这原创 2021-01-25 20:38:29 · 425 阅读 · 0 评论 -
关于素数N种解法
关于素数其实还有许多的解法,但由于时间关系就先介绍这种试除法及优化,等有时间还会继续更新其他的方法。原创 2021-01-22 23:14:49 · 150 阅读 · 0 评论 -
基础函数的玩法---找两个数的最大值
话不多说,上才艺原创 2021-01-20 18:53:25 · 134 阅读 · 0 评论 -
无解的二分查找法
这是Robbie新推出的一个板块,每天分享一个小程序,基本都是可以训练一个或多个知识点的,且非常实用的哦,好了,废话不多说,今天是二分查找,上代码。题目是在一个有序数列中找一个数,大家可以先尝试自己写一下,然后在与Robbie来对比,看哪一个比较快捷。这是结果哦!!!...原创 2021-01-18 21:47:30 · 76 阅读 · 0 评论