
数据结构篇
边练边记
大王怕我去巡山
万变不离其宗
追本溯源
以不变应万变
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
06、栈的顺序表示SeqStack
SeqStack.h#pragma once#define STACKSIZE 100typedef char DataType;typedef struct { DataType stack[STACKSIZE]; int top;}SeqStack;/*stack用于存储栈中的数据元素,top为栈顶指针*//*初始化栈*/void InitStack(SeqStack* S);/*判断栈是否为空,为空返回1,否则返回0*/int StackEmpty(SeqStack S.原创 2021-12-20 00:41:08 · 604 阅读 · 0 评论 -
05、约瑟夫环-DLinkList的使用
有100个士兵,编号从1到100,围城一个圈,他们按照顺时针方向进行报数,报数为m的人出列,这样重复下去,直到所有的人都出列。使用双向循环链表来解决约瑟夫换问题:1、首先创建一个带头节点的双向循环链表。2、注意头节点head不参与报数void Josephus(DLinkList head, int n, int m, int k)/*在长度为n的双向循环链表中,从第k个人开始报数,数到m的人出列*/{ DListNode *p, *q; int i; p = head;原创 2021-12-19 11:21:26 · 663 阅读 · 0 评论 -
04、双向循环链表DLinkList
双向循环链表初始化往里面插入元素测试插入:DLinkList.h#pragma oncetypedef int DataType;typedef struct DNode { DataType data; struct DNode* piror; struct DNode* next;}DListNode,*DLinkList;int InitList(DLinkList* head);/*初始化单链表*/int ListEmpty(DLinkList...原创 2021-12-13 00:43:00 · 1168 阅读 · 0 评论 -
03、单循环链表-基于单链表创建
循环单链表的tail指向链表的头部,在内存中的表示如下:打印测试结果:创建循环单链表/*单循环链表*/LinkList CreateCycList(){ LinkList head; InitList(&head); DataType e; int i = 0; printf("创建一个单链表,输入0表示结束\n"); while (1) { printf("请输入第%d个结点的data域值:", i+1...原创 2021-12-12 21:31:18 · 380 阅读 · 0 评论 -
02、单链表LinkList
LinkList.h#pragma oncetypedef int DataType;typedef struct Node { DataType data; struct Node* next;}ListNode,*LinkList;/*定义方式:线性表的链式存储,是采用一组任意的存储单元存放线性表的元素除了存储元素本身的信息外,还要存储一个指示其直接后继元素的信息(直接后继元素的地址)。这两个部分构成的存储结构称为节点(node)。即节点包含两个域:数据域和指针域。通过指针原创 2021-12-11 23:49:35 · 1624 阅读 · 1 评论 -
01、顺序表SeqList
SeqList.h#pragma once#define ListSize 100typedef int DataType;typedef struct { DataType list[ListSize]; int length;}SeqList;void InitList(SeqList* L);int ListEmpty(SeqList L);int GetElem(SeqList L, int i, DataType* e);int LocateElem(SeqList L原创 2021-12-11 10:58:39 · 1517 阅读 · 0 评论 -
数据结构专题三:堆、堆排序以及快排
堆是一棵完全二叉树,树中的每个结点都不小于或不大于左右孩子结点的值。如果父亲结点的值大于孩子结点的值,那么称为大顶堆,反之称为小顶堆。其中大顶堆用于实现优先队列。可以用数组来进行存储:由二叉树性质可以知道,对于结点i,其左孩子为2*i,右孩子为2*i+1;int heap[100] , n=10;建堆时,对非叶子结点进行向下调整downAdjust,使得父节点的值大于左右孩子结点的值。void downAdjust(int low, int high){ int i= low,j=原创 2020-07-09 23:32:03 · 278 阅读 · 0 评论 -
数据结构专题二:二叉树_3
平衡二叉树AVL树是一棵二叉查找树,对AVL树的任意结点来说,其左子树和右子树的高度差的绝对值不超过1.其中左右子树的高度之差称为该结点的平衡因子;struct node{ int v,height;//v为结点的权值,height为结点的高度 node * lchild, *rchild; }//创建一个节点,权值为vnode * NewNode(int v){ node * Node = new node; Node->v = v; .原创 2020-06-29 23:06:22 · 206 阅读 · 0 评论 -
数据结构专题二:二叉树_2
二叉查找树BinarySearchTree又称为排序二叉树、二叉搜索树:要么二叉查找树是一棵空树;要么二叉查找树由根结点,左子树,右子树组成,且左子树上所有结点的数据域均小于等于根结点的数据域,右子树的数据域均大于根结点的数据域1、查找如果当前根结点数据域等于x,查找成功;如果当前根结点数据域小于x,往右子树查找;大于x,往左子树查找void search(node * root ,int x){ if(root == NULL){ return; ..原创 2020-06-28 23:04:25 · 199 阅读 · 0 评论 -
数据结构专题二:二叉树_1
以下都是树,由于一条边连接两个顶点,切树中没有环,因此对有n结点的树,边数一定是n-1。且满足连通,边数等于顶点数减一的结构一定是一颗树。二叉树:二叉树要么没有根结点,是一棵空树;要么由根结点,左子树右子树构成,且左子树和右子树都是二叉树。简而言之,二叉树每个节点最多有2两个子节点满二叉树:每一层的结点个数都达到了当层所能达到的最大结点数,如E完全二叉树:除了最下面一层外,其余层的结点个数都达到了最大结点数,且最下面一层的结点都靠左。struct node{ int data.原创 2020-06-28 21:47:35 · 476 阅读 · 0 评论 -
数据结构专题一:栈、队列、链表
这里栈和队列用STL库来说明一下:stack是STL中实现的一个后进先出的容器。清空:clear()获取栈内元素的个数:size()判断空:empty()进栈:push()出栈:pop()取栈顶元素:top()队列queue,在STL中则是实现了一个先进先出的容器。清空 clear()获取队列中的元素个数 size()判空 empty()入队 push() 将元素放到队尾出队 pop() 这里是令队首元素出队获取队首 front()获取队尾 bac原创 2020-06-28 20:39:26 · 260 阅读 · 0 评论