![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
随心小记
这个作者很懒,什么都没留下…
展开
-
队列的优化(顺序)
队列不适合代码复用(单链表)定义front使其始终代表队头的下标 出队时将队头元素返回,且front++定义rear使其始终代表队尾下一个元素的下标入队时将新元素插入,且rear++include转载 2017-05-22 22:03:17 · 242 阅读 · 0 评论 -
遍历
遍历单链表的遍历是指从第一个结点开始(下标为0的结点),按照某种次序依次访问每一个结点(正序(0到n)或逆序(n到0))二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点 (递归实现) 前序遍历若二叉树为空 空操作访问若二叉树不为空 访问根节点的数据前序遍历左子树前序遍历右子树void pre_traverse(BTreeNode* root) { i转载 2017-06-07 09:09:04 · 296 阅读 · 0 评论 -
各种排序应用场合
时间复杂度O(n*n)插入排序、选择排序和冒泡排序O(nlgn)快速排序、堆排序和归并排序影响排序效果的因素待排序的数据规模关键字的结构及其初始状态稳定性的要求语言工具的条件存储结构时间和辅助空间复杂度应用场景:若n较小(数据规模较小),插入排序或选择排序较好若数据初始状态基本有序(正序),插入、冒泡或快速排序为宜若n较大,则采用时间复杂度为O(nlogn)的排序方法:快转载 2017-06-07 09:39:25 · 5869 阅读 · 0 评论 -
递归
递归:将大型复杂问题转化为与原问题相同但规模较小的问题进行处理递归需要有边界条件当边界条件不满足时,递归继续进行当边界条件满足时,递归停止 int fibonacci(int n) { if(n > 1) { return fibonacci(n-1)+fibonacci(n-2); } else if(n == 1) {转载 2017-05-21 16:42:44 · 316 阅读 · 0 评论 -
队列优化(链式)
优化方案- 定义rear指针时钟指向链表的最后一个元素 - 入队时将新元素通过rear插入队尾,且将rear指向元素- 定义front指针始终指向链表的第一个元素链式队列的关键状态- 空队列状态:front = NULL,rear = NULL;关键操作- 入队: - rear->next = node; - rear = node; - node->next转载 2017-05-23 09:10:42 · 235 阅读 · 0 评论 -
哈希表
工程中的代码实现常常会需要键-值的映射即给出一个值即可得到其代表的数据哈希的定义:在数据元素的存储位置和它的关键字之间建立一个映射关系f,通过f可以直接得到关键字所代表的数据元素哈希表:哈希技术中用于存储数据元素的数据结构哈希函数:哈希技术中的映射关系f数组时最简单也是最高效的哈希实现哈希技术需要具体的数据结构为基础常用操作:创建哈希销毁哈希清空哈希加入键值对删除键值对根转载 2017-06-04 10:25:11 · 157 阅读 · 0 评论 -
树
树一种非线性的数据结构 树是由n(n >= 0)个结点组成的有限集合 根节点:只有直接后继,没有直接前驱树的结点包含一个数据及若干指向子树的分支 结点拥有的子树数称为结点的度度为0的结点称为叶结点度不为0的结点称为分支结点树的度定义为所有结点中的度的最大值树中结点的最大层次称为树的高度或深度创建树销毁树清空树插入结点删除结点获取结点获取根节点获取树的结点数获取树的高度转载 2017-06-04 11:12:36 · 144 阅读 · 0 评论 -
选择排序
基本思想: 每一趟(例如第i趟,i = 0,1,2,…n-2)在后面n-i个待排的数据元素中选出关键字最小的元素,作为有序元素序列的第i个元素#include <stdio.h>void Print(int array[],int len){ int i = 0; for(i=0;i<len;i++) { printf("%d",array[i])转载 2017-05-23 23:09:54 · 142 阅读 · 0 评论 -
两个栈实现一个队列的功能
入队:将元素进栈A 出队:判断栈B是否为空,若为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;若栈B不为空,栈B直接出栈,并push到栈A。Qt_Dir:1-2转载 2017-08-14 16:50:54 · 155 阅读 · 0 评论 -
插入排序
基本思想void InsertSort(int array[],int len){ int i=0; int j=0; int k=-1; int temp=-1; //开始将第零个元素作为有序序列 for(i=1;i<len;i++) { k = i; temp = array[k]; for转载 2017-05-25 19:36:16 · 124 阅读 · 0 评论 -
快速排序
基本思想 1)任取待排序序列中的某个数据元素(例如:第一个元素),作为基准,按照该元素的关键字大小将整个序列划分为左右两个子序列:左侧子序列中所有元素都小于或等于基准元素 右侧子序列中所有元素都大于基准元素基准元素排在这两个子序列中间2)分别对这两个子序列重复实施上述方法,直到所有的对象都排在相应位置上为止int partition(int array[],int low,int转载 2017-06-03 10:37:03 · 151 阅读 · 0 评论 -
创建二叉树
二叉树在结构上不依赖组织链表指路法通过根节点与目标节点的相对位置进行定位#define BT_LEFT 0#define BT_RIGHT 1typedef unsigned long long BTPos;结点指针域定义typedef struct tag_BTressNode BTressNode;struct tag_BTressNode{ BTreeNode* left;转载 2017-06-07 08:26:37 · 199 阅读 · 0 评论 -
二叉树
孩子兄弟表示法:能够表示任意的属性结构每个结点中有且仅有三个指针域 数据指针、孩子结点指针、兄弟结点指针每个结点的结构简单 只有孩子结点指针和兄弟结点指针构成了“树杈”定义:二叉树是由n(n >= 0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成转载 2017-06-04 16:00:58 · 194 阅读 · 0 评论 -
冒泡排序
void BubbleSort(int array[],int len){ int i=0; int j=0; int exchange=1; for(i=0;(i<len)&&(exhange);i++) { exchange = 0; for(j=len-1;j>i;j--) { i转载 2017-05-25 20:16:09 · 128 阅读 · 0 评论 -
静态链表
静态链表的定义顺序表中的元素由两个数据域组成:data和next data域用于存储数据 next域用于存储下一个元素在数组中的下标 静态链表是在顺序表的基础上利用数组实现的单链表节点结构体定义**头文件中定义typedef struct tag_StaticListNode{ unsigned int data; int next;}TStaticListNode;静态转载 2017-05-18 20:15:16 · 359 阅读 · 0 评论 -
栈(顺序)
栈的顺序实现头文件#ifndef SEQSTACK_H#define SEQSTACK_Htypedef void SeqStack;SeqStack* SeqStack_Create(int capacity);void SeqStack_Destroy(SeqStack* stack);void SeqStack_Clear(SeqStack* stack);int SeqStack_转载 2017-05-20 10:47:53 · 178 阅读 · 0 评论 -
栈(链式)
头文件#ifndef LINKSTACK_H#define LINKSTACK_Htypedef void LinkStack;LinkStack* SeqStack_Create();void LinkStack_Destroy(LinkStack* stack);void LinkStack_Clear(LinkStack* stack);int LinkStack_Push(LinkS转载 2017-05-21 10:20:01 · 159 阅读 · 0 评论 -
符号匹配
算法思路从第一个字符开始扫描;当遇见普通字符时忽略,当遇见左符号时压入栈中;当遇见右符号时从栈中弹出栈顶符号;进行匹配 匹配成功:继续读入下一个字符匹配失败:立即停止,并报错结束 成功:所有字符扫描完毕,且栈为空失败:匹配失败或所有字符扫面完毕但栈非空 代码#include "LinkStack.h"int isLeft(char c){ int ret = 0;转载 2017-05-21 11:29:26 · 1210 阅读 · 1 评论 -
栈与递归
void reverse(char* s)'{ if((s != NULL)&&(*s != '\0')) { reverse(s+1); printf("%c\n",*s); }}int main(void){ reverse("12345"); printf("\n"); return 0;}函数调用时栈转载 2017-05-21 14:55:26 · 274 阅读 · 0 评论 -
队列
队列(先进先出)队列是一种特殊的线性表队列仅在线性表的两端进行操作 队头:取出数据元素的一端队尾:插入数据元素的一端 顺序队列#ifndef SEQ_QUEUE_H#define SEQ_QUEUE_Htypedef void SeqQueue;SeqQueue* SeqQueue_Create(int capacity);void SeqQueue_Destroy(SeqQueue*转载 2017-05-22 09:54:35 · 224 阅读 · 0 评论 -
队列(链式)
#ifndef LINK_QUEUE_H#define LINK_QUEUE_Htypedef void Link_Queue;Link_Queue* LinkQueue_Create();void LinkQueue_Destroy(LinkQueue* queue);void LinkQueue_Clear(LinkQueue* queue);int LinkQueue_Append(L转载 2017-05-22 19:46:38 · 159 阅读 · 0 评论 -
文章标题
算法:解决特定问题求解步骤的描述 好的算法:时间效率高和存储量低判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高阶项的阶数:输入规模越大,次要项影响越来越小算法事件复杂度:随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同;O(n) ;(n就是程序语句执行多少次)对数阶:2的x次方等n,x=O(logn)int count = 1;while(count转载 2017-09-20 00:18:38 · 288 阅读 · 0 评论