数据结构
Devour123
这个作者很懒,什么都没留下…
展开
-
C语言,日历显示,年历显示,简单易懂
日历显示功能实现:1.输入一个年份,输出是在屏幕上显示该年的日历2.输入年月,输出该月的日历。3.输入年月日,输出距今天还有多少天,星期几,是否公历节代码实现:1.计算今天是星期几int CaculateWeekDay(int y,int m, int d) { if(m==1||m==2) { m+=12; y--; } int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; // 计算今天是星期机 return iWeek;}原创 2021-03-08 19:17:19 · 5727 阅读 · 0 评论 -
七大排序完整篇,C语言实现,简单易懂
冒泡排序BubbleSort(T* d,const int n) { T temp; for (int i=0; i<n-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */ for (int j=0; j<n-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */ if (!comp(d[j],d[j+1])) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */ temp = d[j]; d[j原创 2021-02-14 11:23:43 · 260 阅读 · 0 评论 -
直接插入排序
依次插入十个数进行直接插入排序,然后从小到大排序输出。再插入一个数据后仍保持有序。int main(){ int a[11]; int i,t,j,s,number; for(i=0; i<10;i++) //数组进行遍历输入 scanf("%d", &a[i]); for(i=0;i<=10;i++){ //进行循环比较 for(j=i;j<10;j++){ if(a[i] > a[j]){ t=a[i]; a[i]=a[j];原创 2021-01-26 21:48:11 · 67 阅读 · 0 评论 -
哈希表(散列表)查找成功与不成功的平均查找长度,一篇就够了
完整举例:在地址空间为0~16的散列区中,对以下关键字序列构造两个哈希表:{Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec} 哈希函数:H(x)=i/2,i为首字母在字母表中的序号。(等概率的情况下)(1) 用线性探测开放地址法处理冲突;求查找成功与查找不成功的平均查找长度。很据:H(x)=i/2;除不尽的,向下取整即可。如下所示:Jan - 5 Feb - 3Mar -6 Apr -0May - 6 June -5原创 2020-12-26 22:14:21 · 8963 阅读 · 5 评论 -
散列表,这一篇就够了,链地址法
链地址法概念:对于不同的关键字可能会通过散列函数映射到同一地址,为了避免非同义词发生冲突,可以把所有的同义词存储在一个线性链表中,这个线性链表由其散列地址唯一标识。概念很抽象,接下来用实例说明:举例说明:关键字序列为{19,14,23,01,68,20,84,27,55,11,10,79},散列函数H(k)=K %13,用链地址法处理冲突,建立表如下:步骤:求余结果相同的,放在同一地址就可以了上一篇:平方探测法...原创 2020-12-26 19:24:51 · 5158 阅读 · 0 评论 -
散列表,这一篇就够了,平方探测法,有负值
一级目录二级目录三级目录原创 2020-12-26 18:55:52 · 7968 阅读 · 0 评论 -
散列表,这一篇就够了,线性探测
散列表查找平均长度概念:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表处理冲突的方法分为两种,一是开放定址法,二是拉链法。开放定址法有四种:线性探测法,平方探测法,再散列法,伪随机序列法拉链法:链接法开放定址法主要学习两种:线性探测法,平方探测法,这也是常考察的知识点。线性探测法:冲突发生时,顺序查看表中的下一个原创 2020-12-24 09:19:30 · 6081 阅读 · 0 评论 -
判断无向图是否为一课时,是返回true,否则flase
算法思想:一个无向图 G是一棵树的条件是, G必须是无回路的连通图或有 n-1条边的连通图。这里采用后者作为判断条件。对连通的判定,可用能否遍历全部顶点来实现。可以采用深度优先搜索算法在遍历图的过程中统计可能访问到的顶点个数和边的条数,若一次遍历就能访问到n个顶点和n-1条边,则可断定此图是一棵树。算法实现如下:bool isTree(Graph& G){ for(i=1;i<G.vexnum;i++) visited[i] = false; //访问标记visit[]初始化原创 2020-12-11 19:58:06 · 434 阅读 · 0 评论 -
计算Java List(Map)重复项次数,按次数高低排序
已知数组有n个数据,设计算法查找重复数据并计算重复次数,并对重复次数进行排序。算法思想:利用HashMap存储数据 ,元素的存取顺序不能保证一致。但键值是唯一、不重复的。创建HashMap<String, Integer>,第一:用k记录数据的大小,首先把整型数据(int)转化为字符串(string)。用V记录重复的次数。最后Map按照Integer作为value来排序。代码如下:import java.util.ArrayList;import java.util.Collection原创 2020-12-05 21:57:10 · 2248 阅读 · 4 评论 -
实现冒泡排序,简单易懂
冒泡排序冒泡排序,一个排序可以把一个元素放在最终位置上,最大或者最小。冒泡排序,一个排序可以把一个元素放在最终位置上,最大或者最小。public class maopao { public static void main(String[] args) { int[] str = {1,3,2,9,13,11,25,4,7,5}; for (int i = 0; i < str.length-1; i++) { int temp;原创 2020-11-29 22:03:22 · 119 阅读 · 0 评论 -
判断一个字符串是否为回文,通俗易懂
回文判断,判定给定的字符串是否为回文,例如“abba”和abdba均是回文,但good不是回文一算法思想:遍历前一半字符与后一半字符相比较,判断相同即可,简单粗暴。算法如下:总结:上述为给定的字符串,如果想自己输入的话,加入Scanner函数就可以。如有更好的算法,欢迎评论吐槽,点个赞!一算法思想:遍历前一半字符与后一半字符相比较,判断相同即可,简单粗暴。算法如下:public class Palindrome { public static void main(String args[])原创 2020-11-25 21:35:45 · 6887 阅读 · 1 评论 -
java 顺序表(数组)删除最小值
已知顺序表L中的数据元素是整数类型,编写算法删除顺序表中值最小的数据元素。基本思想:先把第一个数据元素,赋值为最小值;再用for循环遍历比较,哪一个小就把它赋值为最小值。并记录最小值的位置。然后进行覆盖删除就可以了...原创 2020-11-22 23:00:56 · 1107 阅读 · 0 评论 -
C语言 如何判断数组中是否存在某个元素
已知数组元素,判断是否有重复元素(则判断某元素在此之前是否出现过),有则赋值1,否则赋值0,其结果保存在新的数组中。如以下例子:数组元素:1 2 3 4 2 1 5 4 3 2预期结果:0 0 0 0 1 1 0 1 1 1算法思想:本题就是判断某元素在此之前是否出现过。用两重循环即可以实现:一重循环遍历数组中的元素,二重循环进行比较是否存在重复元素,代码如下:#include<stdio.h>#include<stdlib.h>#include<time.h&原创 2020-11-21 21:46:09 · 10691 阅读 · 0 评论 -
数据结构 线性表(数组)循环右移k位
(线性表(数组)循环右移k位已知线性表A采用顺序存储结构。编写算法,将该表A中元素循环右移K位,要求空间复杂度为O(1)** 例如:表中的原始数据是1,2,3,4,5,6若k=2;则表A的最终数据是:5,6,1,2,3,4**算法思想:线性表在处理的时候,按照数组的形式的进行处理,因此此处用数组的格式实现。首先先右移动一位,即最后一个数会被覆盖,因此先记录下最后一个数。这样循环K次就可以了,代码如下:#include <stdio.h>int main(){ int da原创 2020-11-21 20:28:45 · 2623 阅读 · 4 评论