C语言数据结构
主要参考严蔚敏数据结构(C语言版)
青衫白衣98
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。
展开
-
顺序存储二叉树之二叉树的建立,洛谷1087
分析二叉树的链式存储建立二叉树的缺点:只能够进行前序遍历,中序遍历,后续遍历的方式建立二叉树,建树的方式不够随意灵活。对于一些题目要求插入的点,不知道父亲节点指针的位置,每次增加新节点都得遍历整个二叉树。而对于数组的方式存储二叉树,直接通过访问父亲节点的下表来建树,比较灵活比如:在数据为a的节点插入左孩子节点(值为b)链式存储法一:第一步:需要找到节点数据为a的链表指针并返回(遍历)...原创 2020-03-16 14:19:23 · 442 阅读 · 0 评论 -
堆树——大顶堆的实现
堆树的定义父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。堆的存储堆排序,通过数组实现一个点的左儿子等于其下标乘2,右儿子等于下标乘2加1(及a[i]的左儿子a[2i]右儿子a[2i+1])C++代码实现大顶堆,注释已表明#include<iostream>#include<...原创 2020-03-12 22:11:43 · 224 阅读 · 0 评论 -
排序(插入排序、起泡排序、选择排序和快速排序)
排序一、插入排序算法思想:逐步将记录插入到已排好序的有序表中。(一)直接插入排序(Straight Insertion Sort)(二)折半插入排序(Binary Insertion Sort)二、起泡排序三、快速排序算法思想: 通过一趟排序将第一个记录排好位置,同时将待排序记录分割成独立的两部分。其中前部分的关键字都比后部分的关键字小。然后再分别对这两部分继续递归排序,以达到整个序...原创 2020-02-02 21:47:59 · 602 阅读 · 0 评论 -
查找(顺序查找、折半查找和二叉排序树的查找与插入)
查找一、静态查找顺序查找的存储结构顺序查找折半查找算法思想:先确定待查记录的范围。给定的值与中间记录进行比较若相等,则找到, 返回位置。若不相等,则缩小范围在前半部分或后半部分。重复2,直到找到或不存在范围找不到结束。二、动态查找动态查找表的特点:表结构本身是在查找过程中动态生成的。即对给定值key, 若表中有其关键字等于key的记录,则查找成功返回,否则插入关键...原创 2020-02-02 14:13:34 · 1654 阅读 · 0 评论 -
线性表的链式存储
线性链表的存储结构typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域 }LNode, *LinkList;线性表的基本操作List item//在第i个元素前插入元素eStatus ListInsert(LinkList &L, int i, ElemType e){ if(i...原创 2020-02-01 20:49:52 · 110 阅读 · 0 评论 -
线性表之顺序存储
一、顺序表存储结构typedef struct{ ElemType *elem; int length; //当前长度 int listsize; //当前分配的存储容量 }SqList;二、顺序表的基本操作构造一个空的顺序表。//构造一个空的线性表Status InitList(SqList &L){ L.elem = (ElemType*)malloc(S...原创 2020-02-01 20:49:26 · 241 阅读 · 0 评论 -
图之邻接表(存储结构、图的遍历、最小生成树、关键路径、最短路径)
二、邻接表的存储结构(ADJacency List)//邻接表(Adjacency List) //链表中结点的类型 typedef struct ArcNode{ int adjvex; //该弧指向的顶点的位置 struct ArcNode *nextarc; //指向下一个弧结点的指针 InfoType info; //该弧的相关信息的指针 }ArcNode;//头结点的类...原创 2020-02-01 12:40:57 · 2393 阅读 · 0 评论 -
数据结构之树(建立二叉树、树的先序遍历、中序遍历、后序遍历和层次遍历)
树的链式存储树的遍历一、前序遍历算法思想(递归过程):访问根结点先序遍历左子树先序遍历右子树//先序遍历的递归调用 void preTravel(BiTree T){ if(T != NULL) { printf("%d", T->data); preTravel(T->lchild); preTravel(T->rchlid); }}...原创 2020-01-15 11:27:29 · 487 阅读 · 0 评论 -
二叉树的遍历应用(求二叉树的高度,节点数和哈夫曼树和哈弗曼编码)
哈夫曼树和哈弗曼编码存储结构//哈夫曼树采用静态三叉链表进行存储 typedef struct{ int weight; int lchild; int rchild; int parent;}HufNode, *HufTree;HufNode HT[2*N-1];//哈弗曼编码存储结构 typedef struct{ char ch; char code[10];}H...原创 2020-01-15 11:26:44 · 799 阅读 · 0 评论 -
图之邻接矩阵(存储结构、图的遍历、最小生成树、关键路径、最短路径)
图的分类图可分为有向图(DG)、有向网(DN)、无向图(UDG)、无向网(UDN)邻接矩阵的存储结构//邻接矩阵typedef struct{ ElemType vexs[N]; //存储顶点的一维数组 int arcs[N][N]; //存储邻接矩阵的二维数组 //对于网的邻接矩阵arcs[i][j] = 无穷大 或 权值(当i = j时也可等于0) int vexnum,...原创 2019-12-15 21:50:22 · 3283 阅读 · 0 评论 -
C语言栈和队列(栈)
栈一、栈的顺序存储顺序存储(法一)存储结构(一)typedef struct{ ElemType elem[MAXSIZE]; int top;}SqStack;//当top == -1时,栈为空,当top == MAXSIZE-1时,该栈为满存储结构(二)int elem[MAXSIZE]; int top;进栈操作//进栈Status Push(Sq...原创 2019-12-03 16:51:05 · 168 阅读 · 0 评论 -
C语言指针(引用传递和值传递,头指针和头结点)
结构体指针的初始化LinkList&L 是引用传递 可以起到修改链表的效果LinkList L 是值传递 传的是L的一个副本 对副本操作后无法起到修改链表的效果在函数changStudentAge1 和 changStudentAge2里面我们都给传入的指针变量分配了一个新的内存,然后再将数据域的值赋值为5,但是我们发现,当函数结束之后,changStudentAge1没有改变传入...原创 2019-12-03 14:46:23 · 1239 阅读 · 1 评论