算法/数据结构练习
文章平均质量分 91
数据结构与算法的习题练习
怡晗★
有在努力的小coder
展开
-
霍纳法则与多项式求值问题
对于多项式的一般式来说:可以简化为下面的等式:上面的等式即为霍尔法则证明如下:使用霍纳法则可以将上面的多项式转化成下面的形式://其中n是多项式的阶数,a[]中存储系数,x是给定值。函数返回多项式f(x)的值i >= 0;此时上面的代码时间复杂度只与多项式的阶数有关,而因为多项式的阶数为N,此时算法的时间复杂度即为O(N)5x%5E54x%5E4x%5EiN%5E2。原创 2024-05-01 21:39:10 · 405 阅读 · 0 评论 -
正整数的性质:和与根
/ 记录各位之和num /= 10;// 获取下一个高位数值相比较于数字和来说,数字根是数值的每一位相加求和直到和结果为1位数,例如6278的数字根计算方式为6+2+7+8=23->2+3=5,所以6278的数字根为5求一个数值的数字根有两种方法循环求和// 获取最低位和tmp /= 10;tmp = sum;sum = 0;sum = tmp;数学计算(去9法)原创 2024-04-24 13:43:29 · 643 阅读 · 0 评论 -
小小算式(1 + 2) * (3 + 4)背后的大道理
如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 + ”:先3减去4,再加上5。在复杂的表达式中,操作符仍然在操作数的前面,但操作数可能是包含操作符的平凡表达式。对于逆波兰表达式一般用栈的数据结构解决,当表达式中的字符为操作数时,操作数入栈,当表达式中的字符为操作符时,依次弹出两个操作数,进行对应操作符的运算。的操作符,它的操作数写法仍然是常规顺序,如,波兰记法“/ 6 3”的逆波兰记法是“6 3 /”而不是“3 6 /”;原创 2024-04-08 13:52:00 · 738 阅读 · 2 评论 -
二叉树基础练习(C语言实现)
本题可以考虑用到相等式的传递性,即a=b且b = c时,有a = c,代入到本题中,可以考虑当根节点与其孩子节点相同,孩子节点作为父亲节点与其孩子节点相同,那么此时可以说明根节点与最下方的孩子节点相同,层层递进,最后可以判断整体是否为单值。本题可以考虑将一棵树分为两部分,一部分是左子树,一部分是右子树,先比较两棵树的根节点,再一棵树的左子树和另一棵树的右子树比较,再一棵树的右子树和另一棵树的左子树比较,不相等返回。本题推荐使用前序遍历的思路,如果根节点不相同,那么直接可以返回。与二叉树的前序遍历思路类似。原创 2024-03-06 23:30:24 · 849 阅读 · 0 评论 -
队列基础练习(C语言实现)
因为队列满足先进先出,所以一个队列中的数据转移到另一个队列时不改变原来队列中数据的排列顺序,但是栈的数据是后进先出,所以当非空队列向空队列转移数据时只需要保留非空队列中的最后一个数据,再让该数据出队即可,而栈和队列的添加数据顺序相同,都是放在最后一个数据后的位置,所以插入数据只需要插入到当前非空队列的尾部即可。定义两个栈,但是不同于上题的两个队列(两个队列没有区分),本题中的两个栈需要作区分,一个栈作为数据出模拟队列的栈,另一个作为数据入模拟队列的栈。所在的位置的数据,否则无数据返回-1;原创 2024-02-24 22:02:37 · 882 阅读 · 0 评论 -
链表基础练习(C语言实现)
回文链表,本质即为以中间节点为对称轴,如果中间节点的左右部分完全相等,则证明该链表为回文链表,根据这个特点,可以考虑思路:因为回文链表以中间节点为对称轴,所以先找到中间节点,因为中间节点的左右部分完全相等,所以将中间节点的后部分链表反转再与原链表的节点中的val进行比较,如果相等即为回文链表,不相等则不为回文链表。带头双向链表优化了四个指针为空的问题,为四个指针单独开辟两个空间作为头结点,遇到大于或者等于x的尾插到大链表的头结点处,遇到小于x的尾插到小链表的头节点处,此时不需要单独处理第一个节点。原创 2024-02-21 22:27:14 · 920 阅读 · 0 评论 -
顺序表基础练习(C语言实现)
时,只让快指针走,否则将快指针中的数据给慢指针所在的位置,再让快指针和慢指针同时走,最后返回慢指针的值即为修改后的数组(注意后面虽然仍有数据,但是返回的长度限制了访问的范围,相当于“看不见等于删除”)使用快慢指针法,快指针先走,慢指针后走,二者每次都走一步,如果数组中的数据等于。本题和上一题思路类似,同样是用两个指针,一个为。,并且两个指针移动一步,最后返回。所在位置的后一个位置,再移动。原创 2024-02-21 19:17:50 · 789 阅读 · 0 评论