
数据结构
kiki喜欢吃蛋糕
没有更新就是去吃蛋糕啦@^ - ^@
展开
-
1.线性表算法题
1.顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除的元素,空出位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。算法大致思想是扫描整个顺序表寻找最小值,辅助变量k为记录最小值位置方便最后填补。出错点在最后需要删除最后一个元素(L.length–)属实语文理解水平不行了。。。bool DeleteElem(SqList &L,int &e){ if(L.length==0){ printf(“出错了!”); return false; } in原创 2022-04-18 21:09:40 · 671 阅读 · 0 评论 -
数据结构(补充)22.顺序表
一.顺序表的定义:线性表的顺序存储又叫顺序表,它由一组地址连续的存储单元依次存储线性表中的数据元素。特点:逻辑上相邻的两元素在物理位置上也相邻。线性表中任意元素都可以随机存取(随机访问)。通常用高级语言中的数组来描述。存储密度高,每个结点只存储数据元素。二.定义顺序表(静态数组):define MaxSize 50 //假设线性表的最大长度为50typedef struct{ ELemType data[MaxSize]; //顺序表元素 int length; //顺序表当原创 2022-04-15 19:06:45 · 1147 阅读 · 0 评论 -
数据结构-21.图的存储与遍历
邻接矩阵法:#define MaxVertexNum 100 //顶点数目最大值typedef struct char Vex[MaxVertexNum]; //顶点表 int Edge[MaxVertexNum][MaxVertexNum]; //二维数组存储边的信息 int Vexnum,arcnum; //图的当前顶点数和边数/arc:弧}MGraph;这种存储方法导致空间复杂度很高。达到O(n^2),适用于稠密图。...原创 2021-10-10 20:07:00 · 129 阅读 · 2 评论 -
数据结构-20.二叉排序树BST
一.定义和查找指定值:二叉排序树又称二叉查找树。Binary Search Tree左子树<根节点<右子树非递归算法:常数级空间即可O(1)//定义二叉排序树typedef struct BSTNode{ int val; struct BSTNode *lChild,*rchild;}BSTNode,*BSTree;BSTNode* BST_Search(BSTree T,int key){ while(T!=NULL&&T->val!=key)原创 2021-10-09 11:16:24 · 151 阅读 · 2 评论 -
数据结构-19.在线索二叉树中找前驱和后继
中序线索二叉树找中序后继:在中序线索二叉树中找到指定结点*p的中序后继next1.若p->tag=1,则next=p->rchild2.若p->tag=0,则next=p的右子树中最左下结点。//找到以p为根的子树中,第一个被中序遍历的结点ThreadNode *Firstnode(ThreadNode *p){ //循环找到最左下结点(不一定是叶子结点) while(p->ltag==0) p=p->lchild; return p;}//在中序线索二原创 2021-10-08 15:13:24 · 1173 阅读 · 0 评论 -
数据结构-18.线索二叉树
一.线索二叉树的定义://线索二叉树结点typedef struct ThreadNode{ ElemType data; struct TheadNode *lchild,*rchild; int ltag,rtag; //左右线索标志}ThreadNode,*ThreadTree;原创 2021-10-04 20:32:06 · 137 阅读 · 0 评论 -
数据结构-17.二叉树的层次遍厉-由遍历序列构造二叉树
算法思想:1.初始化一个辅助队列2.根结点入队3.若队列非空,则队头结点出队,访问该结点,并将其左右孩子插入队尾4.重复3直到队列为空//二叉树结点(链式存储)typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//链式队列结点typedef struct LinkNode{ BiTNode *data; //存指针而不是结点 struct LinkNode *ne原创 2021-10-04 10:22:35 · 206 阅读 · 0 评论 -
数据结构-16.二叉树的先序中序后序遍历
typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;先序遍历:(递归)void PreOrder(BiTree T){ if(T!=NULL){ visit(T); //访问根结点(打印) PreOrder(T->lchild); //递归遍历左子树 PreOrder(T->rchild); //递归遍历右子树 }}中序遍历:(递归)voi原创 2021-10-03 10:28:21 · 128 阅读 · 0 评论 -
数据结构-15.二叉树的顺序存储
顺序存储:可以让第一个位置空缺,保证数组下标和结点编号一致。#define MaxSize 100struct TreeNode{ ElemType value; bool isEmpty; //结点是否为空};TreeNode t[MaxSize];for(int i=0;i<MaxSize;i++){ t[i].isEmpty=true;}定义一个长度为MaxSize的数组t,按照从上至下,从左到右的顺序依次存储完全二叉树中的各个结点。根结点标号为1i的左孩子:2I原创 2021-10-03 09:30:39 · 384 阅读 · 2 评论 -
数据结构-14.KMP算法
KMP算法:主串指针不回溯,模式串指针回溯。next数组和模式串对应int Index_KMP(SString S,SString T,int next[]){ int i=1,j=1; while(i<S.length&&j<=T.length){ if(j==0||S.ch[i]==T.ch[j]){ i++; j++; } else j=next[j]; //模式串向右移动 } if(j>T.length) return原创 2021-09-30 16:48:03 · 126 阅读 · 0 评论 -
数据结构-13.串
一.串的基本定义:串的顺序存储://静态数组实现(定长顺序存储)#define MaxSize 408 //预定义最大串长typedef struct{ char ch[MaxSize]; //静态数组实现 int length; //串的实际长度}SString;//动态数组实现(堆分配存储)typedef struct{ char *ch; //按串长分配存储区,ch指向串的基地址 int length; //串的长度}HString; HString S;原创 2021-09-24 09:11:12 · 91 阅读 · 0 评论 -
数据结构-12.栈的应用(括号匹配)
一.括号匹配:基本思想:用栈实现括号匹配,依次扫描所有字符,遇到左边括号入栈,遇到右边括号弹出栈顶元素检查是否匹配。可能出错的情况:1.左括号单 2.右括号单 3.左右括号不匹配代码实现:先定义顺序栈(考试的时候最好用顺序栈,简单),链栈也可以尝试。//定义一个顺序栈#define MaxSize 10typedef struct{ char data[MaxSize]; //静态数组存放顺序栈 int top; //栈顶指针}SqStack;定义基本操作(中文要标清楚)。原创 2021-09-22 18:48:55 · 224 阅读 · 0 评论 -
数据结构-11.链队列
一.链队列的定义:typedef struct LinkNode{ //链式队列结点定义 ElemType data; struct LinkNode *next;}LinkNode;typedef struct { //链式队列 LinkNode *front,*rear; //队列的队头指针和队尾指针}LinkQueue;int main(){ LinkQueue Q; return o;}二.初始化一个队列:带头结点的队列:void InitQueue(Link原创 2021-09-16 19:32:50 · 243 阅读 · 0 评论 -
数据结构-10.顺序队列
一. 队列的定义:(FIFO)队列的顺序实现//定义一个队列#define MaxSize 10typedef struct { Elemtype data[MaxSize]; //静态数组存放队列元素 int front,rear; //定义队头队尾指针}SqQueue; //初始化队列void InitQueue(SqQueue &Q){ Q.front=Q.rear=0;} //队头队尾指针指向0//判断一个队列是否为空bool EmptyQueu原创 2021-09-15 20:52:00 · 62 阅读 · 0 评论 -
数据结构-9.顺序栈+链栈
一.栈的定义:(LIFO)只允许在一端进行插入或删除操作的线性表。空栈:空的栈顶:允许插入和删除的一端。(栈顶元素)栈底:不允许插入和删除的一端。(栈底元素)二.顺序栈的定义://定义一个顺序栈#define MaxSize 10 //定义栈中元素最大个数typedef struct{ ElemType data[MaxSize]; //静态数组存放栈中元素 int top; //栈顶指针(数组下标}}SqStack;int main(){ SqStack S; ret原创 2021-09-13 10:51:07 · 115 阅读 · 2 评论 -
数据结构-8.静态链表 顺序表
静态链表:分配一整片连续内存空间,各个结点集中安置。用数组实现。//定义一个静态链表#define MaxSize 10struct Node{ ElemType data; int next;};void testSLinkList(){ struct Node a[MaxSize]; //…} 由于静态链表已经被淘汰了,现在基本很少用到。顺序表;静态分配法:(数组大小不能变化)//定义一个顺序表:(静态分配)#define MaxSize 10typedef s.原创 2021-09-09 16:34:26 · 476 阅读 · 0 评论 -
数据结构-7.循环链表
一.循环单链表:定义循环单链表和普通单链表一样:typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;初始化循环单链表:bool InitList(LinkList &L){ L=(LNode*)malloc(sizeof(LNode)); //分配一个单链表 if(L==NULL); return false; L->next=L;原创 2021-09-08 19:42:46 · 123 阅读 · 0 评论 -
数据结构-6.双链表
由于单链表不能逆向检索十分不方便,我们引入双链表来使检索更方便一些。原创 2021-09-06 11:17:58 · 173 阅读 · 0 评论 -
数据结构-5.单链表的建立
一.带头结点的单链表的建立-尾插法初始化一个单链表。再复习一下初始化一个单链表://初始化一个带头结点的单链表typeset struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;bool InitList(LinkList &L){ L=(LNode*)malloc(sizeof(LNode)); if(L==NULL) return false; L—>next=NULL; retu原创 2021-09-05 15:09:37 · 608 阅读 · 0 评论 -
数据结构-4.单链表的查找
单链表的查找主要还是注意循环,以及返回的是指针,不用加if判断它是否为空。时间复杂度都是O(n)。原创 2021-09-04 17:10:38 · 905 阅读 · 0 评论 -
数据结构-3.单链表的删除
一.带头结点按位序删除删除单链表第i个位置,用e返回删除的元素。同插入一样找到第i-1个结点。bool DeleteList(LinkList &L,int i,int &e){ //注意这里e是引用,因为要返回到函数的调用者处 if(i<1) return false; LNode *p; p=L; for(int j=0;j<i-1&&p!=NULL;j++){ p=p->next; } if(p==NULL) return原创 2021-09-03 20:30:37 · 2019 阅读 · 2 评论 -
数据结构-2.单链表的插入
单链表的插入元素主要是带头结点还是不带头节点,前插还是后插。这里容易出错的还是循环语句中的各变量赋值以及考虑指针是否为空。原创 2021-09-03 19:43:47 · 2235 阅读 · 0 评论 -
数据结构-1.单链表的初始化
单链表是最基础的数据结构,由于之前专业课听得一脸懵,所以现在重新学习数据结构。学好单链表也是为了之后的学习打基础。原创 2021-09-03 16:31:38 · 5743 阅读 · 6 评论