
数据结构
文章平均质量分 61
ywl470812087
个人简介:深耕物联网行业,ERP,优快云博客专家。 任职华为网联网智慧照明、空调资深工程师,并且上线投产使用,研发企业亿量级吞吐中间件。 擅长 Java语言、C语言等。
展开
-
二叉树,红黑树,B树、B+树的区别
二叉搜索树可以提高查询效率,左小右大,但是他不好掌握根节点的数字是哪个,容易一边倒,导致层数变多,降低效率。原创 2022-12-28 12:46:19 · 610 阅读 · 0 评论 -
一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为
一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为( )A.O(n) B.O(e)C.O(n+e) D.O(n2)...原创 2020-06-13 20:35:32 · 135193 阅读 · 2 评论 -
对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是
对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是( )A.(c,d) B.(d)C. b D.(b)简单分析:A=head(L)=(a,b)tail(A)=b...原创 2020-06-13 20:30:04 · 125141 阅读 · 0 评论 -
二维教组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[9][7]的地址为 ( )
二维教组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[9][7]的地址为( )A.429B.432C.435D.438[分析]本题考查数组元素存储地址的计算。题目中给出了二维数组A[12][18],要求对其采用列优先的存储方法进行顺序存储,它的每列元素个数为12个,且每个元素占3个存储单元,那么存储一列元素就需要12×3=36个存储单元,而数组下标一般从零开始,因此元素A[9][7]表示第10行第8列的元素。根据题目要...原创 2020-06-13 13:11:35 · 128447 阅读 · 4 评论 -
对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是 ()
对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是( )。A.(e,f)B.((e,f))C.(f)D.()本题考查广义表的概念和特征。广义表是线性表的推广,有时也称其为列表,它的定义一般记作L=(a1,a2,…,an)。其中n是它的长度,而ai是其元素,它可以是单个元素,也可以是广义表。在广义表非空时,第一个元素是表头(head),而其余元素组成的表是表尾(tail)。Tail(L)操作表示取表尾,即去除表头部分的操作。题目中给出的广义...原创 2020-06-13 13:08:18 · 114313 阅读 · 0 评论 -
已知先序和中序求后序
先序: ABCDEFGH中序: BDCEAFHG求后序:DECBHGFA具体看B站郝斌视频:https://www.bilibili.com/video/BV11s41167h6?p=71原创 2020-05-30 13:12:47 · 116754 阅读 · 1 评论 -
二叉树的遍历
遍历先序遍历[先访问根节点]先访问根节点再先序访问左子树再先序访问右子树中序遍历[中间访问根节点]中序遍历左子树再访问根节点再中序遍历右子树后序遍历[最后访问根节点]先中序遍历左子树再中序遍历右子树再访问根节点已知两种遍历序列求原始二叉树通过先序和中序或者中序和后序我们可以还原出原始的二叉树但是通过先序和后序是无法还原出原始的二叉树的换种说法:只有通过先序和中序,或 通过中序和后序我们才可以唯一的确定一个二叉树...原创 2020-05-30 12:36:43 · 93358 阅读 · 0 评论 -
数据结构:在一个单链表中,若删除p指向节点的后继节点,则执行的操作为:( )
在一个单链表中,若删除p指向节点的后继节点,则执行的操作为:( )A.q=p->next; p->next=p->next->next; free(q)B.p=p->next; q=p->next;p=q->next; free(q)C.q=p->next->next; p=p->next; free(q)D.p=p->next->next;q=p->next; free(q)为什么答案是A呢?按照我的理解是:删除原创 2020-05-30 11:19:08 · 150385 阅读 · 0 评论 -
数据结构之树概述
非线性结构:树的定义:树(Tree)是n(n>=0)个节点的有限集T。它或是空集(空树即n=0),或者是非空集。对于任意一颗非空树:(1)有且仅有一个特定的称为根的节点。(2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集合T1,T2,T3,......................,Tm 其中每个集合本身又是一棵树,并称为根的子树。树定义专业定义:1. 有且只有一个称为根的节点2.有若干个互不相交的子树,这些子树本身也是一棵树通俗的定义:1.树.原创 2020-05-16 18:58:54 · 101710 阅读 · 0 评论 -
递归实现汉诺塔程序
#include <stdio.h>//将n个盘子从x借助y移动到zvoid move(int n,char x, char y, char z){ if (1 == n) { printf("%c-哈哈->%c\n",x,z); }else{ move(n - 1, x,z, y); //将n-1个盘子从x借助z移到y上 printf("%c-->%c\n", x,z); //将第n个盘子从x移到z上 move(n - 1, y, .原创 2020-05-10 19:40:57 · 113821 阅读 · 0 评论 -
递归求1到100的和算法演示
#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>long sum_sum(int n) { if (1 == n) { return 1; } else { int sum = n + sum_sum(n - 1); return sum; }}int main(void) { sum_sum(5); pr.原创 2020-05-10 12:50:47 · 109994 阅读 · 0 评论 -
递归求n的阶层算法实现
#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>void f();void g();void k();void f() { printf("FFFF\n"); g();}void g() { printf("GGGG\n"); k();}void k() { printf("KKKK\n");}int mai.原创 2020-05-10 11:18:42 · 117548 阅读 · 0 评论 -
队列入队和出队程序演示
#include <stdio.h>#include <string.h>#include <malloc.h>typedef struct Queue { int * pBase; int front; int rear;} QUEUE;void init(QUEUE *);bool en_queue(QUEUE *pQ, int val); //入队void traverse_queue(QUEUE * pQ);bool ful.原创 2020-05-10 09:52:44 · 102717 阅读 · 0 评论 -
链表队列回收队列
回收队列 回收可以快速取消队列,方法是让头尾碰面即可。status destoryQueue(LinkQueue* que) { //回收队列 if(que->head){ que->rear = que->head->next; free(que->head); que->head=que-...原创 2020-05-05 12:17:10 · 104902 阅读 · 0 评论 -
链表队列出队算法
出队操作 我们来思考这个过程,在下图队列中,我们出队的第一个元素是元素A,不是1。(因为1不是插入进来了的,而是我们初始化时就有的)。我们首先让*t等于head的next,即元素A。然后修改head的next指向为元素A的next。这样head的next就会指向元素B。出队操作就完成了。代码如下:status delQueue(LinkQueue* que,QElemtyp...原创 2020-05-05 12:11:48 · 111949 阅读 · 0 评论 -
链表队列入队算法
入队操作 一定要搞清指针的概念。 首先rear和head指向同一个元素。然后,我们使rear的next指向新元素,这样rear指向的元素(即1)的next就是新元素了。最后,我们让rear指向新元素。这样一个入队操作就完成了。 代码如下:status enQueue(LinkQueue* que,QElemtype e){ QueuePtr p = (Que...原创 2020-05-05 12:08:43 · 123677 阅读 · 0 评论 -
链表队列初始化
队列初始化 初始化主要是对为队列中的两个重要节点分配空间,这里我们需要注意的是初始化时头指针和尾指针指向同一个节点。代码如下:status initQueue(LinkQueue* que) { //初始化队列 que->head=que->rear=(QueuePtr)malloc(sizeof(QNode)); if(!que->hea...原创 2020-05-05 12:04:32 · 105626 阅读 · 0 评论 -
链表队列入门介绍
1,快速开始:队列是一种和栈相反的,遵循先进先出原则的线性表。此文章使用链表来实现队列。如上图所示,就像一个自来水管,先进入水管的水先从水龙头出来,即Front位置的元素最先出队列,因为它们是最先入队列的。2、实现队列 本代码是严蔚敏教授的数据结构书上面的伪代码的C语言实现代码。 一定要多思考,多问为什么! 首先我们定义了一些常量:#include <...原创 2020-05-05 12:00:58 · 120887 阅读 · 0 评论 -
静态队列
静态队列- --用数组实现静态队列通常都必须是循环队列循环队列的讲解:1.静态队列为什么必须是循环队列数组表示的问题 对于队列最好的方法是使用链表实现,因为对于数组来说,队列可能会出现下面这种情况:如图所示,不可以继续添加元素,否则会造成数组越界而遭致程序出错。然而此时又不应该扩充数组,因为还有大量实际空间未被占用。此时我们应该如何解决这个问题呢?我们将其实现...原创 2020-05-05 11:56:57 · 112537 阅读 · 0 评论 -
队列入门简介
线性结构的两种常见应用之二队列定义:种可以实现“先进先出”的存储结构分类:链式队列、静态队列队列(常用数据结构之一)队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。简介队列是一种特殊的线性表,特殊之处在于它只允...原创 2020-05-05 09:51:40 · 117399 阅读 · 0 评论 -
栈清空程序演示
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{ int data; struct Node * pNext;}NODE,*PNODE;typedef struct Stack{ PNODE pTop; //栈顶元素 PN...原创 2020-05-04 16:28:36 · 108964 阅读 · 0 评论 -
出栈程序演示
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{ int data; struct Node * pNext;}NODE,*PNODE;typedef struct Stack{ PNODE pTop; //栈顶元素 PN...原创 2020-05-04 13:31:24 · 113785 阅读 · 0 评论 -
栈程序演示
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{ int data; struct Node * pNext;}NODE,*PNODE;typedef struct Stack{ PNODE pTop; //栈顶元素 PN...原创 2020-05-04 12:54:55 · 122690 阅读 · 0 评论 -
栈入门
栈的定义:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。基本概念要搞清楚这个概念,首先要明白”栈“原来的意思...原创 2020-05-02 20:30:12 · 121685 阅读 · 4 评论 -
数组和链表的总结
数据结构狭义:数据结构是专门研究数据存储的问题数据的存储包含两方面:个体的存储 +个体关 系的存储广义:数据结构既包含数据的存储也包含数据的操作对存储数据的操作就是算法算法:狭义:算法是和数据的存储方式密切相关广义:算法和数据的存储方式无关这就是泛型思想数据的存储结构有几种连续存储[数组]优点:查询速度很快.缺点:1,事先必须知道数组...原创 2020-05-02 19:30:52 · 113032 阅读 · 0 评论 -
链表删除功能实现演示
插入算法演示:#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>typedef struct Node { int data; //数据域 struct Node * pNext; //指针域}Node, *pNode;...原创 2020-05-02 14:49:33 · 96964 阅读 · 0 评论 -
链表插入功能实现演示
#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>typedef struct Node { int data; //数据域 struct Node * pNext; //指针域}Node, *pNode;//函数...原创 2020-05-02 14:16:11 · 130149 阅读 · 0 评论 -
链表选择排序算法功能实现演示
算法:狭义的算法是与数据的存数方式密切相关广义的算法是与数据的存储方式无关泛型:利用某种技术达到的效果就是:不同的存数方式,执行的操作是一样的#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>typedef struct N...原创 2020-05-02 11:58:28 · 95590 阅读 · 0 评论 -
创建链表和遍历链表算法演示
#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>typedef struct Node { int data; //数据域 struct Node * pNext; //指针域}Node, *pNode;//函...原创 2020-04-29 21:59:50 · 106472 阅读 · 0 评论 -
链表的分类
链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须是从头指针开始进行了。之后的每一个结点,其实就是上一个的后继指针指向的位置。这里有个地方要注意,就是对头指针概念的理解,这个很重要。“链表中第一个结点的存储位置叫做头指针”,如果链表有头结点,那么头指针就是指向头结点数据域的指针。画一个图吧。头指针就是链表的名字。头指针仅仅是个指针而已。头结点是为了操作的统一与方便而设立...原创 2020-04-26 22:14:10 · 118028 阅读 · 0 评论 -
数据结构链表知识入门
链表定义:n个节点离散分配,彼此通过指针相连每个节点只有一个前驱节点,每个节点只有一个后续节点首节点没有前驱节点尾节点没有后续节点专业术语:首节点:第一个有效节点尾节点:最后一个有效节点头结点: 1,第一个有效节点之前的那个节点 2,头结点并不存放有效数据 3,加头结点的目的主要是为了方便对链表的操作 ...原创 2020-04-26 21:55:01 · 114909 阅读 · 0 评论 -
C语言的typedef用法
案例1:#include <stdio.h>#include <string.h>#include <malloc.h>typedef int zhangsan; //为int在多取一个名字 zhangsan等价于intstruct Student{ int sid; char sname[100]; char sex; } ...原创 2020-04-25 22:15:56 · 105596 阅读 · 0 评论 -
C语言代码实现数组(简单)
前一节课讲了数组的删除功能实现:删除功能本节课内容我们实现数组的反转功能和冒泡排序功能:#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>struct Arr{ int * pBase; //存储数组第一个元素的地址 int...原创 2020-04-25 17:52:11 · 103726 阅读 · 0 评论 -
C语言代码实现数组(简单)
上节课我们讲了数组的追加和插入功能,这节课我们讲删除删除功能:#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>struct Arr{ int * pBase; //存储数组第一个元素的地址 int len; //数组...原创 2020-04-25 15:51:55 · 112442 阅读 · 0 评论 -
C语言代码实现数组(简单)
数组实现(这里实现三个方法):#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>struct Arr{ int * pBase; //存储数组第一个元素的地址 int len; //数组所能容纳最大元素的个数 int cn...原创 2020-04-22 22:07:20 · 108935 阅读 · 0 评论 -
C语言代码实现数组(简单)
我们上次实现了数组的初始化和输出,还没有实现数组的追加和插入功能#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>struct Arr{ int * pBase; //存储数组第一个元素的地址 int len; //数组所...原创 2020-04-25 14:03:49 · 120479 阅读 · 0 评论 -
数据结构之结构体malloc跨函数使用内存
#include <stdio.h>#include <string.h>#include <malloc.h>struct Student { int sid; int age;};struct Student * createStudent();void showStudent(struct Student *);int main() ...原创 2020-04-19 15:27:43 · 95689 阅读 · 0 评论 -
数据结构之malloc()函数动态内存分配复习
直接上代码分析#include <stdio.h>#include <string.h>#include <malloc.h>int mian() { int a[5] = { 1,5,8,46,12 }; int len; printf("请输入你要分配数组的长度: len="); scanf("%d", &len); ...原创 2020-04-19 14:09:11 · 115409 阅读 · 0 评论 -
数据结构之结构体复习
为什么出现结构体? 为了表示一些复杂的数据,一些基本数据类型无法满足要求,当要用一个变量描述一个对象的多个属性时,普通的内置数据类型是表示不了的,这个时候就可以用结构体回。结构体和类很相似,唯一不同的是:结构体默认是公有成员,而类默认是私有成员。什么叫结构体?C语言中的结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data...原创 2020-04-19 10:07:23 · 112701 阅读 · 0 评论 -
数据结构之指针复习
废话不多说,拿起键盘就是干,直接上代码:#include <stdio.h>int main() { double *p; double x = 66.6; p = &x; //x占8个字节,一个字节占8位,一个字节一个地址 double arr[3] = { 1.1,2.2,3.3 }; double *q; q = &arr[0];...原创 2020-04-19 09:17:25 · 108011 阅读 · 0 评论