数据结构与算法
安安csdn
这个作者很懒,什么都没留下…
展开
-
十大排序算法 详解 markdown
文章目录快速排序归并排序堆排序堆排序堆排序的基本思想堆复杂度代码稳定: 如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定: 如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。如何记忆稳定算法:冒插归稳 冒冒失失插到最前面面试,神气归来,稳了快速排序最坏情况下(例如前面所说,数组倒序,枢纽元选第一位)快速排序将花费O(N2)时间。最好情况下,快速排序和归并排序一样,花费O(NlogN)时间。平均情况下,快速排序花费O(NlogN)时间。快原创 2020-10-17 10:37:16 · 782 阅读 · 0 评论 -
十大排序算法 详解
目录归并排序稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。如何记忆稳定算法:冒插归稳 冒冒失失插到最前面面试,神气归来,稳了归并排序参考:https://blog.csdn.net/m0_38056893/article/details/79461901参考:https://www.cnblogs.com/shudonghe/p/3302888.html...原创 2020-09-23 09:20:14 · 281 阅读 · 1 评论 -
DP(Dynamic Programming)动态规划
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解...原创 2020-03-01 12:40:29 · 1385 阅读 · 0 评论 -
递归例题合集
#include<stdio.h>int djc(int n);int djc(int n){ return n ? n*djc(n-1) : 1; }void main(void){ int n; printf("请输入一个小于13的正整数:"); scanf("%d", &n); printf("%d! = %d\n", n, djc(n));}...原创 2020-01-31 08:00:46 · 860 阅读 · 0 评论 -
指针与二维数组
指针与一维数组 ************************************************************************************* 数组名称可以参加所有指针相关运算! int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *...原创 2020-01-22 09:00:37 · 172 阅读 · 0 评论 -
安安编程思路记录
单链表实现对单链表中的元素进行排序安安思想:自己创建一个新链表,先将原链表中的第一个元素插进来,然后依次取原链表中的元素,遍历新链表(若要求递增顺序),找到比该元素大的那个节点,插到该节点的前面 。过完所有原链表中的元素后,将原链表的头结点指向新链表实验书思想:将原链表拆开,第一个只包含一个元素,剩下的元素放到另一个链表里面销毁单链表实验书思想:从前往后释放初始:pr...原创 2020-01-13 09:41:59 · 186 阅读 · 0 评论 -
数据结构:(堆栈应用)括号匹配性(2019.2.27)
1.对于一个字符串的循环条件 //for(i = 0; i < strlen(str); i++){ //自己写的 for(i = 0; str[i]; i++){ //朱老师写的 ... } 2.对于代码优化 /* ...原创 2019-02-27 15:44:23 · 233 阅读 · 0 评论 -
数据结构:(堆栈应用)表达式正确性(2019.2.28)
判断一个字符是否是特定的几个运算符之一: (1) 写一个函数判断 boolean isOperator(char ch){ return (ch == '+' || ch == '-' ); } (2)//此处也可以函数的形参里定义一个常量字符指针指针,然后调...原创 2019-02-27 20:37:03 · 472 阅读 · 0 评论 -
数据结构:栈之链栈
链栈是运算受限的单链表,即其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。(王道)自己感觉是可以设头结点,也可以不设头结点。如果设的话,则top指向头结点;如果不设的话,则top指向第一个有效元素...原创 2019-03-09 08:24:40 · 557 阅读 · 0 评论 -
数据结构:线性表之顺序表
实现顺序表的初始化、插入、删除、判空、判满、求值、查找、输出等操作。之前的顺序表实现:https://blog.csdn.net/weixin_42072280/article/details/83590795 线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。 线性表是一种逻辑结构,表示元素之间一对一的相邻关系。 顺序表和链表是指存储结构,两者属于...原创 2019-02-17 18:40:06 · 286 阅读 · 0 评论 -
链表菜单中的小问题
1.C语言中boolean的使用方法 (C语言中没有boolean函数,这是C++函数的。若是想在C语言中使用,则按以下方法) #define TRUE 1 #define FALSE 0 typedef unsigned char boolean; //boolean表示逻辑值 对菜单的基本要求: 居中显示(水平、垂直) ...原创 2018-09-22 11:29:09 · 225 阅读 · 0 评论 -
带头结点链表例题
编程思想:编程时先搭好框架,比较难处理的部分用汉字表示,以后慢慢一步一步进行处理 空链的定义 #include<stdio.h> typedef struct POINT{ int row; int col; struct POINT *next; }POINT; void main(void)...原创 2018-09-16 12:19:19 · 374 阅读 · 0 评论 -
链表知识点
(1)准备工作1:结构体成员为本结构体类型的指针变量的情况(链域) struct STI { int score; int age; struct STI st; }; 上述定义时错误的,错误原因:长度不确定。 struct STI { int score; int age;...原创 2018-09-15 15:49:21 · 467 阅读 · 0 评论 -
动态存储分配
静态存储方式:是指在程序运行期间由系统分配固定的存储空间的方式。 动态存储分配:是指在程序运行期间根据需要进行动态的分配存储空间的方式。 使用函数:malloc()、free() 需要malloc.h头文件的支持。 函数声明:void *malloc(unsigned int 字节数) 该函数的返回值类型是:...原创 2018-09-15 11:29:07 · 4409 阅读 · 0 评论 -
数据结构:(单链表应用)多项式表示及多项式相加(2019.2.25和2.26)
单链表:多项式表示及多项式相加(2019.2.25和2.26) 方法1:顺序存储结构直接表示 a[i] : 项x^i的系数ai 用下标表示幂,用数组的值表示系数 两个多项式相加:两个数组对应分量相加 方法2:顺序存储结构表示非零项 ...原创 2019-02-16 17:13:46 · 3003 阅读 · 0 评论 -
数据结构:线性表之带头结点单链表
之前跟着朱老师写的一个带头结点的:https://blog.csdn.net/weixin_42072280/article/details/82722253 创建链表时有两种方法, 一种是先初始化(创建一个空链表),然后对这个空链表进行结点输入,创建链表;这个时候,由于已经有了头结点,将其传入,直接在头结点的后面进行操作; 另外一种是将初始化和创建链表放到一个函数里,这...原创 2019-02-19 07:57:59 · 944 阅读 · 0 评论 -
数据结构:栈之顺序栈
之前写的:https://mp.csdn.net/postedit/83661447(好多都是参考的这个) 栈的表示 由于栈是一个线性表,即元素只能从栈顶进出栈,所以其存储结构也如同线性表,有顺序存储和链式存储之分 栈的顺序存储表示 栈的顺序存储结构简称为顺序栈,和线性表相类似,用一维数组来存储栈。 根据数组是否可以需要增大,...原创 2019-02-25 21:48:01 · 356 阅读 · 0 评论 -
数据结构:队列之链队列
队列的链式存储 简称链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单链表。 队列的链式存储类型描述: //链式队列结点 typedef struct LinkNode{ dataType data; struct LinkNode *next; }LinkNode; //链式...原创 2019-03-11 18:01:48 · 1266 阅读 · 0 评论 -
数据结构:队列之循环队列
将顺序队列臆造成一个环,即把存储队列元素的表从逻辑上看成一个环,称为循环队列。 队列中元素个数:(Q.rear - Q.front + MAXSIZE) % MAXSIZE; 队首指针进1:Q.front = (Q.front + 1) % MAXSIZE 队尾指针进1:Q.rear = (Q.rear+ 1) % MAXSIZE (当队首指针Q...原创 2019-03-11 11:49:43 · 549 阅读 · 0 评论 -
数据结构:队列之顺序队列
队列:简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,在表的另一端进行删除。 向队列中插入元素称为入队或进队,删除元素称为出队或离队。 先进先出的线性表。 队头:允许删除的一端。 队尾:允许插入的一端。 空队列:不含任何元素的空表。 队列的常见操作: 初始化队列 判队为...原创 2019-03-11 09:46:41 · 675 阅读 · 0 评论 -
数据结构:(堆栈应用)递归
1.如果在一个函数、过程或数据结构的定义中又应用了它自身,那么这个函数、过程或数据结构称为是递归定义的,简称递归。 2.递归的精髓在于能否将原始问题转化为属性相同但规模较小的问题。 3.必须注意递归模型不能是循环定义的,其必须满足两个条件: (1)递归表达式(递归体) (2)边界条件(递归出口) 4.在递归调用的过程中,系统为每一层的返回点、局部变量...原创 2019-03-11 09:09:33 · 832 阅读 · 0 评论 -
数据结构:(堆栈应用)括号匹配性(另一种方法)
之前的那个:https://blog.csdn.net/weixin_42072280/article/details/87975849/*([[])]]()[]([])*//*要求: 只考虑小括号和中括号 算法设计: 通过结构体定义一个栈SeqStack和一个char类型的数组,用来存储字符串输入一行字符串,逐一判断其中的括号如果是左括号,则直接进栈。如果是有括号...原创 2019-03-10 21:33:32 · 226 阅读 · 0 评论 -
数据结构:(堆栈应用)数制转换
当把余数全部进栈后,如何获得最后的进制数 方法1:直接一个一个输出 void showData(SeqStack s){ int i; for(i = 0; i < s.top+1; i++){ printf("%d", s.data[i]); ...原创 2019-03-10 07:46:17 · 586 阅读 · 0 评论 -
数据结构:(单链表应用)约瑟夫问题(60)(2019.2.27)自己写的开心
/*问题:约瑟夫问题 共有n个人,数到第m个人出局 要求:用单向循环链表来模拟此过程,打印出最后剩下的人的编号验证: n=11, m=3,则输出为7 2019.2.27 9:20-10:20(60) *//*思考:自己用的是带头结点的单链表,所以删除的时候,之前没有考虑到头结点的next成员的值变化,导致程序出错,最后经过debug,成功修改。答案是直接建立的不带头结点...原创 2019-02-27 10:27:46 · 137 阅读 · 0 评论 -
数据结构:(堆栈应用)表达式求值
自己先写了一个 局限:只能处理0-9的数,中间结果和最后结果也只能是0-9 将操作数栈和操作符栈中的数据设置成了相同的数据类型,导致中间计算的时候特别麻烦,也修改了好久代码,不过最后结果也出来了 实现:运算符有“+-*/^()” 具体思路: 遇到空格直接跳过,遍历下一个字符 遇到数字则进操作数栈 遇到运算符则先进行判断,再处理 ...原创 2019-03-06 11:28:52 · 1084 阅读 · 0 评论 -
数据结构第一章知识点:绪论
https://blog.csdn.net/weixin_42072280/article/details/82954123 在一个没有返回值的函数中,若想结束函数,不进行后面语句的执行,则可以用下面的方法: void fun(){ ... return; ... } ...原创 2019-02-16 15:30:46 · 360 阅读 · 1 评论 -
数据结构第一章问题:绪论
目录 eg2.写一个函数printN,打印出从1到N eg3.写程序计算给定多项式在给定点x处的值 最大子列和问题(遗留,分而治之) eg2.写一个函数printN,打印出从1到N#include<stdio.h>void printN1(int n); //直接输出 void printN2(int n); //递归 ...原创 2019-02-16 15:29:38 · 319 阅读 · 1 评论 -
指针数组与数组指针的区别
数组指针与指针数组的区别 转自:http://www.cnblogs.com/hongcha717/archive/2010/10/24/1859780.html 数组指针(也称行指针) (1)定义 int (*p)[n]; int (*p)[n]; <=> int[n] (*p);...原创 2018-10-20 09:51:18 · 284 阅读 · 0 评论 -
数据结构:发牌算法
发牌算法原创 2018-10-19 20:15:17 · 640 阅读 · 0 评论 -
数据结构:折半查找
二分查找 折半查找(Binary Search) 折半查找算法的基本前提: 1)采用物理线性结构存储; 2)数据必须有序。 思想: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则...原创 2018-10-17 23:50:02 · 2276 阅读 · 0 评论 -
编程:数据逆置
题目:数据逆置 要求:有一组数据,要求逆置这些数据。或者说,有数组int ar[10],并赋初值,要求编程实现对该数组元素的逆置。 代码部分分析: ar[0] -> temp[9] ar[1] -> temp[8] ar[2] -> temp[7] ar[3] -> temp[6] ...原创 2018-10-07 11:57:41 · 701 阅读 · 0 评论 -
(第二章)知识点:数据结构与算法
1、引入 凭借一句话获得图灵奖的Pascal之父——Nicklaus Wirth,让他获得图灵奖的这句话就是他提出的著名公式:“算法+数据结构=程序”。 2、算法 解决问题的方法(广义) (1)算法的特点: 1)有效性; 2)可行性; 对于浮点数(科学计数法),考察这样的问题: 3e18 + 3e-18 这...原创 2018-10-07 11:57:03 · 334 阅读 · 0 评论 -
知识点:指向函数的指针(线性表会再遇到)
1、指向函数的指针的定义及分析 int (*p)(); 更加确切的定义方案:函数类型 (*指针变量名称)(形参类型表); 假设p是一个能够指向“这样类型的函数”的指针变量:int fun1(int, int); 对于能够指向上述类型的函数的指针变量的确切定义如下:int (*p)(int, int); 对于上述变量声明,可以这样理解:...原创 2018-10-06 19:29:07 · 470 阅读 · 0 评论 -
头文件中加 #ifndef
在开发大型应用程序的时候,都是(非常有必要)将程序按照单元功能(模块)分开,即程序的模块化。然而有时因为模块功能函数划分太多,难以避免导致当前的头文件被重复#include的情况,这时便会出现重复定义的错误。于是为了解决这种情况,就需要用到”#ifndef/#define/#endif”。其标准格式为: #ifndef <标识> #define <标识...原创 2018-10-06 14:08:50 · 1154 阅读 · 0 评论 -
关于库函数的声明 .h & #
库函数也需要声明; 对于库函数的声明,C语言程序是通过“系统头文件”进行的; #include<stdio.h>这就是关于printf()函数、scanf()函数等函数的声明。 #include<XXXX.h>的本质是:将XXXX.h的全部内容(C程序)复制一份,代替#include<XXXX.h>;即,XXXX.h的...原创 2018-10-06 14:07:35 · 1106 阅读 · 0 评论 -
带头结点链表&不带头结点链表
带头结点链表 空链: POINT head1 = {0}; //此为不完全赋初值,指针被赋值为NULL。若不赋值,则head1中的三个成员是有值的,其值为垃圾数据 //此链为一个空链(不关心数据域,只要指针域为空即可),空链是链表的起始点。 ...原创 2018-10-06 14:06:25 · 924 阅读 · 0 评论 -
关于指针赋初值为NULL的问题
关于指针赋初值为NULL的问题 因为NULL本质就是0,则,一个指针变量的值为0,意味着它指向整个内存的最开始字节处,而这个地方是用户程序(APP)的禁区,不能访问,如果强行访问,则,将被OS禁止并中断这个进程执行(程序被中断)。 上述说法,不能说指针的值不能为NULL,只是说,不能对0编号开始的空间进行“访问”。即,可以令指针指向0编号区域,只要不访问就没有问题。 ...原创 2018-10-06 14:04:18 · 9818 阅读 · 1 评论 -
二维数组
1.二维数组定义 int m[3][4]; 上述语句定义了一个3行4列的二维数组。 int a[3][4] <=> int [4] a[3] 理解为:a数组有3个元素,每个元素是一维数组,即 int [4] 类型 二维数组的定义与一维数组一样,应该遵循相同的原则。 二维数组m共有12个元素,每个元素都是int类型的。 这1...原创 2018-10-20 09:57:23 · 789 阅读 · 0 评论 -
小技巧:每一行输出4个元素
int a[] = {{1, 2, 3, 4 }, {5, 6, 7, 8 }, {9, 10, 11, 12}}; for(i = 0; i < 12; i++){ printf("a[0][%2d]=%2d ", i, a[0][i]); if((i+1) % 4 == 0){ //输出小技巧,每一行输出4个 ...原创 2018-10-20 10:59:27 · 11369 阅读 · 0 评论 -
****************************数据结构之旅开始啦**********************************************
加油,用心!原创 2019-02-16 08:19:33 · 126 阅读 · 0 评论