数据结构
冬雪如春
这个作者很懒,什么都没留下…
展开
-
快速排序(C语言)
首先我们要对一组数据进行排序:在数组中选一个基准数(通常为数组第一个,黄圈圈标记了);将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说;对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。好了,咱们开始吧!快速排序需要两个哨兵,i 和 j,分别指向数组的头和尾。接下来就要进行移动。我们通常选择第一个元素作为基准数,去移动数组元素,使其达到这个基准数的左边都是小于它的,右边都是大于它的。开始移动 i 和 j ,原创 2022-02-23 21:06:51 · 64387 阅读 · 28 评论 -
栈的运用(不带括号的加减乘除)
例如计算 2+3*4-1/5这个式子,在计算机中如和那代码实现首先明白整体的思路:这里由操作数和运算符,所以这里我们要创建两个栈,来分别充当操作数栈和运算符栈,好,现在创建栈。栈的特点是先进后出,这里我们创建一个结构体这里把top当成一个指示标志,来记数,这里设置了data数组的最大内存容量是10,所以看下图,这里需要对我们上面定义的结构体初始化。初始化为-1,后面再++时,可以和数组下标对上,当top=9时说明栈已经满了top初始化的函数这里需要创建两个栈,一个时运算符的栈,一个是操原创 2022-02-22 20:15:32 · 430 阅读 · 0 评论 -
平衡二叉数的旋转
平衡二叉数平衡二叉数是二叉数,还有一个平衡因子的概念,就是二叉数中的某个结点的左右子树的高度之差称之为这个结点的平衡因子。注意:平衡因子是左子树高度减去右子树高度。平衡二叉数是另一种形式的二叉查找树,特点:左右子树的高度之差的绝对值不大于1,称这样的二叉数是平衡二叉数。上图就是一个平衡二叉数,所有结点的平衡因子都不大于绝对值1下图就不是平衡二叉数,有的结点的平衡因子的绝对值超过了1.那么我们如何来调整使其重新变回成一个平衡二叉数呢?下面介绍四种方法:1、LL型上图代码解释:p和c原创 2022-02-21 19:08:10 · 328 阅读 · 0 评论 -
带头结点的双向循环链表
思路:1、首先定义一个结构体,定义一个结构体指针类型,为创建结点做准备。2、创建头指针,和空链表,这里注意一级指针和二级指针的实参和形参的传 递。3、插入结点也要创建结点,再插入,后面再根据需要进行插入,删除,等操作。#include <stdio.h>#include <stdlib.h>#define CREATE_OK 1#define CREATE_NO 0#define MALLOC_OK 1#define MALLOC_NO 0/* *双向循环原创 2022-02-21 10:28:09 · 817 阅读 · 0 评论 -
带头结点的顺序栈
#include <stdio.h>#include <stdlib.h>#define SIZE 10enum ret_vla{MALLOC_OK = 100, MALLOC_NO, CREATE_OK, CREATE_NO, FULL_OK, FULL_NO, EMPTY_OK, EMPTY_NO, PUSH_OK, PUSH_NO, POP_OK, POP_NO};//顺序栈struct stack_node{ int stack_data[SIZE]原创 2022-02-19 22:01:58 · 392 阅读 · 0 评论 -
带头结点的单链表
#include <stdio.h>#include <stdlib.h>#include <time.h>#define MALLOC_OK 1#define MALLOC_NO 0#define CREATE_OK 1#define CREATE_NO 0/* *带头结点的单链表 * * */struct node{ int num; char name; int age; struct node *n原创 2022-02-19 19:24:04 · 137 阅读 · 0 评论 -
Java数据结构和算法-稀疏数组的实现
Sparse array以棋盘为例:思路:将棋盘看成一个二维数组,可以用二维数组对其进行相应的存储,在这个棋盘中有黑棋和红棋,没有棋子的是空白,黑棋用1进行表示,红棋用2进行表示,空白就用0 进行表示。 如果单纯的将棋盘进行存储,有很多空白的空格,导致存储空间利用的不够充分。如下图:这是一个11*11的表格作为棋盘,空间中有效数字的各数是有限的,但是大多数是没有用到的,都是以0来表示的,这样空间中重复的数值很多,我们可以用数组将相同的数据记录下来,放在数组里面,减少空间的浪费,记录一共有几行几列。原创 2020-11-03 22:12:09 · 140 阅读 · 1 评论