![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
取名太难保护头发
计院狗,好好学习计算机
展开
-
内部排序算法
几种常见的内部排序算法原创 2022-11-09 12:33:51 · 287 阅读 · 0 评论 -
内部排序之选择排序
一、直接选择排序二、堆排序目录一、直接选择排序二、堆排序基本定义基本定义1)大根堆:树中任意一个非终端节点(如果有做孩子或者右孩子)的值比其孩子节点的值大。2)小根堆:树中任意一个非终端节点的值都比其孩子节点小。3)大根堆和小根堆用树来表示肯定是一棵完全二叉树。代码//堆排序(大根堆)//为使数组存放的元素的下标与该值对应的树中的标号一致,所以后面数据的存放都是从下标为1的存储单元开始#include<stdio.h>...原创 2021-10-11 14:05:11 · 79 阅读 · 0 评论 -
树的基本定义和遍历
#include<stdio.h>#include<stdlib.h>//二叉树的链式存储typedef struct BiNode{ int data; struct BiNode *lchild,*rchild; }BiNode,*BiTree;//定义一棵树BiTree root = NULL;void Visit(BiNode *N){ printf("%d\n",N->data);}void PreOrder(BiTree ..原创 2021-10-05 09:32:25 · 112 阅读 · 0 评论 -
反向输出单链表的值
一、题目描述设L为带头节点的单链表,编写算法实现从头到尾反向输出每个节点的值。二、题目分析使用头插法来实现单链表的逆置。时间复杂度为O(n),空间复杂度为O(n)。也可以用另一个链表或数组来存储元素然后逆置,这是空间换时间的做法,空间复杂度和时间复杂度都是O(n).三、代码#include<stdio.h>#include<stdlib.h>//对单链表的定义typedef struct LinkNode{ int data; Lin.原创 2021-10-03 15:59:22 · 762 阅读 · 0 评论 -
在单链表中删除值为x的节点
一、题目再带头节点的单链表L中,删除所有值为x的节点,并释放其空间,假设值为x的节点不唯一,试编写算法以实现上述操作。二、分析题目非常简单,只要熟悉单链表的基本操作就可以很快解决这个问题。三、代码#include<stdio.h>#include<stdlib.h>//对单链表的定义typedef struct LinkNode{ int data; LinkNode *next;}LinkNode,*LinkList;//对单链..原创 2021-10-03 15:13:39 · 6058 阅读 · 2 评论 -
队列的相关操作
由于非循环队列的操作非常简单,并且在出队后会产生很多无法利用的空间,所以在此处不使用非循环队列。一下的介绍均是循环对立。一下代码均是经过测试的,可以直接上机运行。#include<iostream>#include<cstdio>using namespace std;//用顺序表表实现循环队列#define MaxSize 100typedef struct{ int data[MaxSize]; int front,rear; //队头指..原创 2021-10-03 10:37:34 · 99 阅读 · 0 评论 -
栈的实现以及相关操作
一、用顺序表实现的顺序栈#include<iostream>#include<cstdio>using namespace std;//栈的相关操作以及实现,包括初始化、判空、判满、增(push)、删(pop)、查(getpop);栈不涉及“改”的问题。//栈的的数据结构的定义#define MaxSize 100typedef struct{ //顺序栈 int data[MaxSize]; int top;}SqStac...原创 2021-10-02 20:02:32 · 128 阅读 · 0 评论 -
线性表的相关操作
线性表的物理结构分为顺序存储和链式存储。以下分别是对顺序表和链表的相关操作的代码表示。顺序表一、顺序表的分配1.、顺序表的静态分配//对顺序表的静态分配#define MaxSize 100typedef struct{ int data[MaxSize]; //使用静态分配的方式 int length; //顺序表的当前长度}SqList;//初始化一个顺序表void InitList(SqList &L){ for(int i ...原创 2021-10-01 18:51:25 · 127 阅读 · 0 评论 -
《浙大数据结构》进阶试验1—3.1两个有序序列的中位数
题目:一直有两个等长的非降序序列S1,S2,设计函数求S1,S2并集的中位数。有序序列A0、A1、……An-1的中位数是指A(n-1)/2。方法一:开设一个新数组来求两个序列的并集,然后再去求新的序列的中位数。但是这种做法增加了空间的开销。我们在求两个序列的并集中位数并不需要保存整个并集,只需要比较两个序列当前的数字,当所取到的第N个数即是两个序列并集的中位数。/*求两个集合并集的中位数方法一:先求并集,然后求中位数*/#include<bits/stdc++.h>..原创 2021-08-22 17:50:50 · 176 阅读 · 0 评论 -
leetcode 141 环形链表
https://leetcode-cn.com/problems/linked-list-cycle/solution/huan-xing-lian-biao-by-leetcode/原创 2020-03-12 21:27:06 · 69 阅读 · 0 评论 -
leetcode
题目链接:https://leetcode-cn.com/problems/remove-linked-list-elements/题目分析:方法一:(参考leetcode官方题解)a.要删除的节点式中间节点,选择要删除节点的前一个接点pre,将pre指向删除节点的nextb.要删除的节点是头结点,如果直接删除会导致链表没有头结点。 此时设置一个哨兵节点,此处哨兵为伪头。/*...原创 2020-03-12 17:57:13 · 122 阅读 · 0 评论 -
leetcode237:删除链表中的节点
题目链接:ttps://leetcode-cn.com/problems/delete-node-in-a-linked-list/题目含义:给定一个节点,删除这个节点。当时一看,这个来一个pre指针,不就解决了吗?Too young,too simple!都没有头指针,那来的遍历,pre还有啥用!策略:(不是我自己想出来的,我当时就也没想到,见识太少)比如我们要删除一个节点node,我们...原创 2020-03-12 13:37:56 · 85 阅读 · 0 评论 -
leetcode 面试题52:两个链表的第一个公共节点
题目分析:1.公共节点:两个链表拥有公共节点不是指两个链表的节点的数据域相同,而是指两个链表的指针指向同一个节点,即具有相同的地址。2.需要注意的是:由于单链表只有一个next域,所以只要找到两个链表的第一个公共节点,那么从第一个公共节点开始,两个链表后面的节点均是重合的,即两个有公共节点而部分重合的单链表,拓扑形状看起来像Y,而不是X。3.解决方法: a.暴力法:对于第一...原创 2020-03-12 12:40:54 · 480 阅读 · 0 评论 -
数据结构--顺序存储结构
关于一元多项式的计算问题方法一:可以取一个数组,将对应的幂的系数存储在相应的下标的位置,下标表示指数的大小。这样的方法对于非零项比较少的多项式会造成空间的浪费。方法二:采用结构体来表示指数和系数typedef struct{int index;double coefficient;}polynomial;polynomial pn[100];对于两个多项式,其系数和指...原创 2019-06-15 10:50:50 · 838 阅读 · 0 评论 -
PAT 1007 素数对猜想 (20 分)
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744这道题比较简单,但是自己的做法稍微复杂了一点:先将100000范围的素数都找出来保存在数组prime[]中,然后再用循环去判断。看了晴神的做法,自己确实有点傻逼,哈哈哈#include<bits/stdc++.h&...原创 2019-04-29 20:10:55 · 95 阅读 · 0 评论 -
PAT 1015 Reversible Primes (20 分)
附上题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805495863296000这道题目主要考察两个知识点:1.如何判断一个数是一个素数2.如何进行进制之间的转化注意:题目中给的数不管是二进制还是十进制,都是以十进制的格式输入的,所以我们需要得到N在任意进制下的各个位数,再将各个位上的数颠倒,...原创 2019-04-29 14:52:02 · 130 阅读 · 0 评论 -
素数的判断和怎么得到某个数据范围内的素数问题
对于数据个数比较少的题目来说,求某一范围内的素数问题,可以直接用传统的枚举方法来判断即可。下面是怎么判断一个数是不是素数。 bool isPrime(int num) { if(num <= 1) return false; int sqr = (int)sqrt(num*1.0); for(int i = 2; i <= sqr; i++) { ...原创 2019-04-28 23:36:50 · 590 阅读 · 0 评论 -
PAT B1013 数素数 (20 分)
附上题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/9948053099633541这道题目,有一点需要注意的就是,找出一个包含了10000个素数的范围,下面提供一下简单的代码:这段代码基本上包含三个部分:1.怎么判断一个数是素数2.怎么判断某个范围内的数哪些是素数,并且保存下来第一点和第二点...原创 2019-04-29 13:04:48 · 161 阅读 · 0 评论 -
PAT A1069 The Black Hole of Numbers (20 分)
题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805400954585088首先分析一下这道题目的考点:1.获取一个数字的各个位数2.排序3.循环4.用最简单的整数输出就可以解决问题,如果将其转化为字符串再转换回来,比较麻烦。建议用前者。那么这道题目有哪些陷进:1.对于很多人说的...原创 2019-04-28 20:37:52 · 279 阅读 · 0 评论