自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 数据结构 第六章 查找——串的存储结构与基本操作

串的存储结构:(1)定长顺序存储表示:#define MaxSize 255typedef struct{ char ch[MaxSize]; //给每个串变量分配一个定长数组 int length; //串的实际长度 }SString;超过预定义长度的串值会被舍去,称为截断。(2)堆分配存储表示://堆分配存储表示typedef struct{ ch...

2019-05-16 21:19:59 437

原创 数据结构 第六章 查找——散列表,散列查找

已知的几种查找方法:(1)顺序查找:O(n);(2)二分查找(静态查找):O(logn);(3)二叉搜索树:O(h)(h为二叉查找树高度);(4)平衡二叉树:O(logn)。查找的本质:已知对象找位置:(1)通过有序的安排对象:全序(顺序),半序(查找树,左子树小于根结点,右子树大于根结点);(2)直接算出对象位置:散列表。散列查找的两项基本工作:(1)计算位置:构造散列函数确定...

2019-05-16 13:47:01 3114

原创 数据结构 第七章 排序——归并排序,基数排序

归并排序:核心:有序子列的合并。(1)将两个有序子列(存放在同一顺序表中的相邻位置)归并成一个有序数列的算法:void Merge( ElementType a[], ElementType TmpA[], int L, int R, int RightEnd ){ int LeftEnd = R - 1; int tmp = ...

2019-05-13 21:06:24 397

原创 数据结构 第七章 排序——冒泡排序,快速排序

冒泡排序:void Bubble_Sort( ElementType a[], int n ){ int i, k; for( k = n - 1; k > 0; k-- ){ //外部循环,每一次冒泡结束后最后一个位置的元素总是有序的,所以在下一次排序时就不需要比较它 int flag = 0; //标记设为0 f...

2019-05-13 20:48:57 772

原创 数据结构 第七章 排序——选择排序, 堆, 堆排序

选择排序:void Selection_Sort( ElementType a[], int n ){ int i, j; for( i = 0; i < n - 1; i++ ){ //n个元素共进行n-1趟选择排序 int min = i; //假设当前元素是未排序序列中最小的元素 for( j = i + 1; ...

2019-05-11 19:36:34 244

原创 数据结构 第七章 排序——直接插入排序,折半插入排序,希尔排序

直接插入排序:void Insert_Sort_Direct( ElementType a[], int n ){ int i, j; for( i = 1; i < n; i++ ){ //外部循环,此时假定a[0]是已经排好序的,所以把下标从1到n-1的数据依次插入序列中 int tmp = a[i]; //暂时存储要插入的元素 for( j = i; j...

2019-05-09 20:28:36 324

原创 数据结构 第五章 图——拓扑排序与关键路径

有向无环图(Directed Acyclic Graph, DAG):有向图中不存在环。拓扑排序:AOV网(Activity On Vertex Net):用DAG图表示一个工程,顶点表示活动,弧表示活动之间的优先制约关系(即活动的先后执行顺序)。拓扑序列:如果图中从顶点v到顶点w之间有一条有向路径,则v一定排在w之前。拓扑排序(DAG图中)每个顶点出现且只出现一次。算法步骤:(1)从...

2019-04-27 10:16:35 449

原创 数据结构 第五章 图——最小生成树,Prim算法,Kruskal算法

生成树:生成树是一个图的极小连通分量:(1)包含图中所有顶点;(2)只含最少的边,如果增加一条边则会构成回路,减少一条边则会不连通(因为树是一种特殊的图,树一定是连通的,而且树中不会有回路)。最小生成树(Minimum Spanning Tree, MST):(1)带权连通无向图;(2)图的所有生成树中各边权值之和最小的一颗生成树。特点:(1)一个图得最小生成树是不唯一的,但最小生...

2019-04-27 08:59:27 406

原创 数据结构 第五章 图——最短路径问题

最短路径问题的抽象:在网络中,求两个不同顶点之间的所有路径中边的权值之和最小的一条路径:(1)这条路径就是这两个顶点间的最短路径(Shortest Path);(2)第一个顶点为源点(Source);(3)最后一个顶点为终点(Destination)。(4)不考虑负值圈(negative-cost-cycle)情况。问题分类:(1)单源最短路径问题:从固定源点出发,求其到其它所有顶点...

2019-04-26 14:45:01 972

原创 数据结构 第五章 图——图的遍历

图的遍历:(1)广度优先搜索(BFS, Breadth-First-Search);(2)深度优先搜索(DFS, Depth-First-Search)。广度优先搜索:类似于二叉树的层序遍历,优先考虑最早被发现的顶点。void BFSTraverse( G ptrg ){ int i; for( i = 0; i < ptrg -> vernum; i++ ) vi...

2019-04-26 14:10:00 234

原创 数据结构 第五章 图——基本概念,两种存储方式

图(Graph)的定义:图G由一组顶点(顶点集)V(vertex)和一组边(边集)E(Edge)组成,记做G( V, E ),边是顶点对( v, w )∈ E,用|V|表示顶点的个数,|E|表示边的个数。无向边:( v, w )用圆括号,表示顶点v和顶点w之间的边没有方向;有向边:< v, w > 用尖括号,表示从顶点v指向顶点w的边(单行线)。类型名称:图.数据对象集:G(...

2019-04-26 14:04:46 452

原创 【每日刷题】 PAT 数据结构 03-树2 List Leaves (25 分)

题目描述:代码如下://03-树2 List Leaves (25 分)#include <stdio.h>typedef struct TreeNode{ int index; int Left; int Right;}TNode;TNode T[10];typedef struct queue{ TNode data[10]; int rear;...

2019-04-13 16:22:47 237

原创 数据结构 第四章 树——哈弗曼树(C语言)

带权路径长度(WPL):从树根到任意结点的路径长度与该结点权值的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和。哈夫曼树(最优二叉树):WPL最小的二叉树。//哈夫曼树#include <stdio.h>typedef struct TreeNode{ int weight; struct TreeNode *Left, *Right;}TNode; ...

2019-04-12 11:30:15 337

原创 数据结构 第四章 树——树、森林、并查集(C语言)

树的存储结构:(1)双亲表示法:#define Maxsize 100typedef struct Node{ //树结点定义 ElementType data; //数据 int parent; //双亲位置标记 }TreeNode;struct Tree{ TreeNode nodes[ Ma...

2019-04-11 20:49:51 329

原创 【每日刷题】 PAT 数据结构 03-树1 树的同构 (25 分)

题目描述:代码如下://树的同构#include <stdio.h>typedef struct TreeNode{ char data; int Left; int Right;}TNode;TNode T1[10], T2[10];int CreatTree( TNode T[] ); //创建树int Isomorphic( int r1...

2019-04-11 15:32:17 2207 3

原创 数据结构 第四章 树——平衡二叉树(C语言)

平衡二叉树(Balanced Binary Tree)(AVL树):或者是一颗空树,非空时则具有:(1)左子树与右子树也是平衡二叉树;(2)左子树和右子树的高度差的绝对值不超过1(平衡因子(Balance Factor)(BF = HL - HR)),即平衡因子的绝对值不超过1。平衡二叉树的调整:每次在二叉排序树中插入一个结点时,首先检查其插入路径上的结点是否因为此次操作而导致了不平衡(...

2019-04-10 20:31:55 362

原创 数据结构 第四章 树——二叉搜索树(C语言)

二叉搜索树(二叉排序树或二叉查找树)(BST,Binary Search Tree):或者是一颗空树,若不为空,则:(1)非空左子树的所有键值小于根结点的键值;(2)非空右子树的所有键值大于根结点的键值;(3)左右子树分别也是二叉搜索树。结构定义与操作集://二叉排序树#include <stdio.h>#include <stdlib.h>#defin...

2019-04-10 20:14:58 223

原创 记2020王道——《数据结构》第四章中一道存在问题的题目

P123 第4题:设n,m为一颗二叉树上的两个结点,在后序遍历时,n在m前的条件是()A.n在m右方 B.n是m祖先 C.n在m左方 D.n是m子孙这道题答案选择D,但后序遍历是左右中,所以n在m前面的话有三种情况:n左m右,n左m中,n右m中,这三种情况后两种都对应着n是m子孙,但第一种情况n左m右的时候如果n,m是一个结点的左右孩子,此时在后序遍历时n在m前面,但n不是m的子孙...

2019-04-10 18:53:28 4000 15

原创 【每日刷题】 PAT 乙级 1009 说反话 (20 分)

题目描述:我的代码://1009#include <stdio.h>#include <string.h>int main(){ char str[81], c[81]; gets( str ); int len = strlen( str ); int i, j; for( i = len - 1; i >= 0; i-- ){ if(...

2019-04-09 15:39:54 416

原创 【每日刷题】 PAT 基础习题集 7-21 求特殊方程的正整数解 (15 分)

题目描述:代码如下://7-21#include <stdio.h>int main (){ int n, i, j, count = 0; scanf( "%d", &n ); for( i = 1; i <= 100; i++ ) for( j = i; j <= 100; j++ ) if( i * i + j * j == n ...

2019-04-08 18:01:17 305

原创 数据结构 第四章 树——线索二叉树(C语言)

二叉树的线索化:如果当前结点没有左孩子,则让它的Left指针指向它的前驱结点,如果没有右孩子,则让它的Right指针指向它的后继结点,然后增设两个标志域来判断当前的指针域指向的是孩子结点还是前驱后继结点。指向前驱结点或后继结点的指针叫做线索。通过中序遍历线索化二叉树:在这里插入代码片...

2019-04-08 17:00:28 211

原创 【每日刷题】 PAT 乙级 1022 D进制的A+B (20 分)

题目描述:代码如下://1022#include <stdio.h>int main(){ int a, b, d; scanf( "%d%d%d", &a, &b, &d ); int sum = a + b; int z[40], num = 0; do{ z[num++] = sum % d; sum /= d; }whil...

2019-04-08 15:43:32 170

原创 数据结构 第四章 树——二叉树的存储结构与遍历(C语言)

二叉树的遍历,即按某条线路访问树中的结点,每个节点被访问一次,且只访问一次,常见的遍历算法分为先序(NLR)、中序(LNR)、后序(LRN)和层次遍历。先序遍历:void PreOrder( BiTree T ) //先序遍历 { if( T ){ visit( T ); PreOrder( T -> Left ); PreOrder( T -> Ri...

2019-04-05 20:35:34 364

原创 数据结构 第四章 树——树的基本概念和基本术语以及二叉树的基本概念

数据结构的三个典型操作:(1)插入;(2)删除;(3)查找。数据结构的基本操作之一:查找:(1)静态查找:集合中记录是固定的,没有插入和删除等操作,只有查找操作;(2)动态查找:集合中记录是动态的,有插入、删除和查找等操作。静态有序查找可以使用二分查找算法(C语言实现如下):int binary_search( ElementType a[], ElementType x, int...

2019-04-04 20:56:23 543 1

原创 【每日刷题】 PAT 基础习题集 7-20 打印九九口诀表 (15 分)

题目描述:代码如下://7-20#include <stdio.h>int main ( ){ int n, i, j; scanf( "%d", &n ); for( i = 1; i <= n; i++ ){ for( j = 1; j <= i; j++ ) printf( "%d*%d=%-4d", j, i, i * j );...

2019-04-03 20:05:10 335

原创 【每日刷题】 PAT 基础习题集 7-19 支票面额 (15 分)

题目描述:代码如下://7-19#include <stdio.h>int main ( void ){ int n,flag = 1; scanf( "%d", &n ); int y, f; for( y = 0; y < 100; y++ ){ for( f = 0; f < 100; f++ ){ if( 98 * f - 1...

2019-04-02 21:38:47 438

原创 【每日刷题】 PAT 乙级 1032 挖掘机技术哪家强 (20 分)

题目描述:先附上刚开始自己写的代码(17分,最后一个测试点运行超时)://1032#include <stdio.h>typedef struct player{ int num; int score;}P;int main ( void ){ int n, i, j, index; scanf( "%d", &n ); P s[n]; int...

2019-03-29 21:46:23 602

原创 【每日刷题】 PAT 数据结构 01-复杂度3 二分查找 (20 分)

题目描述:代码如下:Position BinarySearch( List L, ElementType X ){ int left, right, mid; left = 1; right = L -> Last; while( left <= right ){ mid = ( left + right ) / 2; if( X > L ->...

2019-03-29 21:38:52 287

原创 【每日刷题】 PAT 数据结构 02-线性结构1 两个有序链表序列的合并 (15 分)

题目描述:代码如下:List Merge( List L1, List L2 ){ List p1 = L1 -> Next, p2 = L2 -> Next; List L3 = ( List )malloc( sizeof( struct Node ) ); L3 -> Next = NULL; List p = L3; while( p1 &&...

2019-03-29 21:36:22 255

原创 【每日刷题】 PAT 乙级 1001 害死人不偿命的(3n+1)猜想 (15 分)

题目描述:代码如下://1001#include <stdio.h>int main ( void ){ int n, count = 0; scanf( "%d", &n ); while( n != 1 ){ if( n % 2 == 0 ) n /= 2; else n = ( 3 * n + 1 ) / 2; count++;...

2019-03-26 14:57:28 144

原创 算法笔记 第二章——C/C++快速入门 学习总结

如果时间充足的话,想学C语言的话推荐去看书《C和指针》,然后配着MOOC上翁恺老师的课程一起看,看完之后基础可以比较扎实,如果时间很紧张就仔细阅读这部分内容,配着翁恺老师MOOC一起。由于之前有C的基础,这学期也在学习C++,所以很多基础的部分就省略掉,只整理一些小点:(1)cin 和 cout消耗的时间比printf和scanf多得多。(2)在C++标准中,#include <std...

2019-03-26 14:48:34 569

原创 【每日刷题】 PAT 基础习题集 7-18 二分法求多项式单根 (20 分)

题目描述:代码如下://7-18#include <stdio.h>double ret( double m, double a0, double a1, double a2, double a3 );int main ( void ){ double a0, a1, a2, a3; double a, b, root, mid; scanf( "%lf%lf%l...

2019-03-25 11:05:20 598

原创 【每日刷题】数据结构起步自测题 自测-5 Shuffling Machine (20 分)

题目描述:代码如下://zc-5#include <stdio.h>typedef struct PK{ char c; int i;}P;int main ( void ){ int k, i, j; P p[54]; scanf( "%d", &k ); int a[54]; for( i = 0; i < 54; i++ ) ...

2019-03-23 12:56:54 319

原创 【每日刷题】 PAT 数据结构 02-线性结构2 一元多项式的乘法与加法运算 (20 分)

题目描述:代码如下://一元多项式的乘法与加法运算#include <stdio.h>#include <stdlib.h>typedef struct dx{ int a; int x; struct dx *next;}D;typedef D* P;P read( ); //读取void print...

2019-03-23 12:41:26 419

原创 【每日刷题】 PAT 基础习题集 7-16 求符合给定条件的整数集 (15 分)

题目描述:代码如下://7-16#include <stdio.h>int main ( void ){ int a; scanf( "%d", &a ); int num, i, j, k, count = 0; for( i = a; i <= a + 3; i++ ) for( j = a; j <= a + 3; j++ ) f...

2019-03-22 20:33:20 1635 1

原创 【每日刷题】 PAT 基础习题集 7-15 计算圆周率 (15 分)

题目描述:代码如下://7-15#include <stdio.h>#include <math.h>double fact( int n );int main ( void ){ double e; scanf( "%lf", &e ); int i = 1; double temp = 1, fz, fm = 1, sum = 0, t ...

2019-03-22 20:22:31 528

原创 【每日刷题】 PAT 基础习题集 7-17 爬动的蠕虫 (15 分)

题目描述:代码如下://7-17#include <stdio.h>int main ( void ){ int n, u, d; scanf( "%d%d%d", &n, &u, &d ); int s = 0, t = 0; while( s < n ){ if( s + u < n ){ t += 2; s ...

2019-03-22 19:00:30 760

原创 《数据结构与算法分析——C语言描述》第三章 链队列实现(C/C++语言)

链队列实现如下://队列实现——链队列#include <stdio.h>#include <stdlib.h>#define ElementType inttypedef struct queue{ ElementType data; struct queue* next;}Queue;typedef struct LinkQ{ Queue *r...

2019-03-21 20:20:42 316

原创 《数据结构与算法分析——C语言描述》第三章 队列基本概念及循环队列实现(C语言)

类型名称:队列(Queue)数据对象集:一个有0个或多个元素的有穷线性表操作集:void make_empty( Q ptrq ); //初始化栈 int IsEmpty( Q ptrq ); //判断队列是否为空,若为空,返回1,否则返回0 void EnQueue ( ElementType x, Q ptrq );...

2019-03-20 19:20:31 311

原创 【每日刷题】 PAT 基础习题集 7-14 求整数段和 (15 分)

题目描述:代码如下://7-14#include <stdio.h>int main ( void ){ int a, b; scanf( "%d%d", &a, &b ); int sum = 0, i, count = 0; for( i = a; i <= b; i++ ){ printf( "%5d", i ); coun...

2019-03-20 15:40:26 953 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除