数据结构
文章平均质量分 86
Suhan42
来csdn只办三件事:开源!开源!还是***开源!
展开
-
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
入队和出队的复杂度:在循环队列中,入队和出队操作的时间复杂度都是O(1),即常数时间复杂度。:循环队列将队列的头部和尾部连接起来形成一个环状结构,当队列的尾部指针达到数组的最末尾时,它将会绕回到数组的开头。:循环队列拥有固定的容量,即队列最多可以存储的元素数量是预先确定的。这里就必须空出一个元素的位置,不能让Q.rear==Q.front,因为这样,就和判空的条件一样了。重要术语:队头(可以出队(删除)的一段),队尾(放入(入队)的元素的一段),空队列。若队列Q未满,将x加入,使之成为新的队尾。原创 2024-04-25 10:20:25 · 1174 阅读 · 0 评论 -
【数据结构】三、栈和队列:4.栈的应用(括号匹配,四则运算表达式求值,进制转换,递归)
(grammer parsing)再求值,也可以边分析边求值,语法分析的作用是检查输入的字符串是否是一个合法的表达式,一般使用语法分析器(parser)解决。一种递归分析表达式的方法是,将表达式当成普通的语法规则进行分析,分析后拆分成如图所示的表达式树,然后在树结构上自底向上进行运算。所以,在中缀转后缀中,要采用**“左优先”原则**:只要左边的运算符能先运算,那么就先优先计算左边的。手算:从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数。原创 2024-04-23 15:26:00 · 1333 阅读 · 0 评论 -
【数据结构】三、栈和队列:3.链栈(链栈栈的初始化,判空,进栈,出栈,读取栈顶,链栈实例)
这两种声明方式是等价的。两者都创建了一个动态分配的 StackNode 类型的结点,并将它的地址赋给相应的指针变量。两者都可以通过 temp1->data 或 temp2->data 来访问结点的数据成员,以及 temp1->next 或 temp2->next 来访问结点的下一个结点的指针成员。不同的只是它们的声明方式,temp1 是通过别名 LinkStack 来声明的指针变量,而 temp2 是直接以 StackNode* 类型来声明的指针变量。销毁栈后遍历栈结果: 栈为空!当前栈的元素个数:5。原创 2024-04-23 15:06:57 · 554 阅读 · 0 评论 -
【数据结构】三、栈和队列:2.顺序栈&共享栈(顺序栈的初始化,判空,进栈,出栈,读取栈顶,顺序栈实例)
因为顺序栈的缺点是栈的大小不可变,所以引出共享栈,两个栈共享一片空间。这片存储空间不单独属于任何一个栈,某个栈需要的多一点,它就可能得到更多的存储空间。两个栈的栈底在这片存储空间的两端,当元素入栈时,两个栈的栈顶指针相向而行。当他们下一个指针的位置在一起时,说明这个栈已经放满元素。C++是一门面向对象的高级语言,在我们编写代码中,常常离不开对对象的创建和清理对象资源。指向栈顶元素,一般存储的是数组的下标。top当前指向的位置是栈顶上面的一个没有元素的空位置。如果有abcde,5个元素,那么满栈top=4。原创 2024-04-23 14:30:07 · 1236 阅读 · 0 评论 -
【数据结构】三、栈和队列:1.栈的基础(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))
上述公式称为卡特兰(Catalan)数,可采用数学归纳法证明(不要求掌握)。重要术语:栈顶(现在能放入的一段),栈底(最早放入的元素的一段),空栈。全部进入后出栈:e->d->c->b->a(倒序)若S为空,则返回true,否则返回false。:n个不同元素进栈,出栈元素不同排列的个数为。若栈S非空,则用x返回线顶元素。a->b->c->d->e(进一个出一个)销毁并释放栈 S 所占用的内存空间。进栈顺序:a->b->c->d->e。构造一个空栈S,分配内存空间。进行插入或删除操作的线性表。原创 2024-04-23 14:26:24 · 906 阅读 · 0 评论 -
【数据结构】汇总二、线性表(逻辑结构、物理(存储)结构、基本操作、1.顺序表2.单链表3.双链表4.循环链表5.静态链表6.顺序表与链表的对比不同)
10//静态链表的最大长度//静态链表结构类型的定义,并且使用typedef进行重命名为SLinkList[MaxSize]//存储数据元素int next;//下一个元素的数组下标//数组a作为静态链表//等同于链表定义形式,这样可以使用StackLink来创建静态链表的节点,使用来创建指向静态链表节点的指针。//数据域int cur;//游标//例如,可以使用以下方式创建一个静态链表节点:p = &node;原创 2024-03-07 15:37:21 · 1080 阅读 · 0 评论 -
【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))
若分配空间过大,则浪费内存资源。若元素占用空间很大,那么移动元素花费的时间要比查找元素花费是时间代价更大。只需分配一个头结点(也可以不要头结点,只声明一个头指针),之后方便拓展。按位查找:由于单链表每个节点只存储了指向下一个节点的指针,只能。按位查找:使用顺序存储,每个数据元素大小相同,所以可以。,即可以在**O(1)**时间内找到第i个元素。插入/删除元素要将后续元素都后移/前移。时间复杂度O(n),时间开销主要来自。时间复杂度O(n),时间开销主要来自。,不可随机存储,所以访问节点时。原创 2024-03-06 20:27:45 · 470 阅读 · 0 评论 -
【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)
10//静态链表的最大长度//静态链表结构类型的定义,并且使用typedef进行重命名为SLinkList[MaxSize]//存储数据元素int next;//下一个元素的数组下标//数组a作为静态链表//等同于链表定义形式,这样可以使用StackLink来创建静态链表的节点,使用来创建指向静态链表节点的指针。//数据域int cur;//游标//例如,可以使用以下方式创建一个静态链表节点:p = &node;原创 2024-03-06 20:23:58 · 985 阅读 · 0 评论 -
【数据结构】二、线性表:4.循环链表的定义及其基本操作(循环单链表,循环双链表的初始化、判空、判断头结点、尾结点、插入、删除)
循环双链表(Circular Doubly Linked List)是一种特殊类型的双向链表,其中最后一个节点的下一个指针指向头节点,头节点的前一个指针指向最后一个节点,形成一个循环。循环单链表与普通单链表的主要区别在于,循环单链表的尾节点的指针不是指向 nullptr,而是指向头节点,形成一个闭环。这意味着,在循环单链表中,可以通过尾节点的指针重新回到头节点。循环单链表(Circular Singly Linked List)是一种特殊类型的单链表,其中最后一个节点的指针指向头节点,形成一个循环。原创 2024-03-05 16:24:29 · 1241 阅读 · 0 评论 -
【数据结构】二、线性表:3.双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、遍历查找、删除、判空等)
对于只需要顺序遍历或仅从头部开始操作的情况,单链表可能是更简洁和高效的选择。但对于需要在两个方向上遍历或在任意位置插入或删除节点的情况,双链表就更有优势了。单链表(Singly Linked List)和双链表(Doubly Linked List)是两种常见的链表数据结构,它们在节点之间的连接方式上有所区别。双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现,时间复杂度为。注意:要注意代码中结点前驱后继的调整顺序,防止出现自己指向自己的情况。双链表与单链表一样,为了操作方便也可以加入。原创 2024-03-04 20:48:58 · 854 阅读 · 0 评论 -
【数据结构】二、线性表:2.单链表的建立(尾插法实例、头插法)
当插入1个元素时,while需要循环一次,插入2个元素,while循环1此…插入n个元素,while循环n-1次。通过将用户输入的数据逐个添加到链表的尾部,可以方便地保存输入的数据,并在后续处理中使用。头插法建立单链表的特点是:新节点插入到链表的头部位置,因此建立完成的链表元素顺序是和输入数据集合的顺序相反的,即。),指向表尾,当要在尾部插入一个新的数据元素时,就只需要对r结点做一个后插操作就行了。如果要把很多个数据元素存到一个单链表中,如何操作?这种操作,时间复杂度太大,并不是最佳方案。原创 2024-03-04 19:13:38 · 473 阅读 · 0 评论 -
【数据结构】二、线性表:2.单链表的插入、删除、查找
单链表按位查找是指根据节点在链表中的位置(即节点序号或下标)来查找节点的操作。通常情况下,我们需要查找的节点序号是从1开始计数的,即第1个节点、第2个节点、第3个节点等。由于需删除结点的前驱结点未知,或者要删除的是第一个结点,且不带头结点。ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。ListInsert(&L,i,e):插入操作。LocateElem(L,e):按值查找操作。转移p结点的内容到后面,在逻辑上实现在p结点前插入。时间复杂度:O(1)原创 2024-03-04 18:18:08 · 1317 阅读 · 0 评论 -
【数据结构】二、线性表:2.单链表的定义与实现(带头结点与不带头结点的区别)
单链表适用于需要频繁插入、删除节点的场景,但不适用于随机访问节点的场景,因为随机访问需要从头指针开始遍历整个链表。与数组不同,单链表的节点是通过指针来连接的,因此在插入、删除节点时不需要移动其他节点,只需要修改指针的指向即可,这是单链表的一个优势。不带头结点,写代码更麻烦对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑对空表和非空表的处理需要用不同的代码逻辑。单链表是一种常见的线性数据结构,由一个个节点组成,每个节点包含两个部分:数据部分和指针部分。由于单链表每个节点只存储了指向下一个节点的指针,原创 2024-03-04 18:12:09 · 621 阅读 · 0 评论 -
【数据结构】二、线性表:1.顺序表的插入、删除、查找、特点
平均情况:假设新元素插入到任何一个位置的概率相同,即i=1,2,3, …,length+1的概率都是p=1/(n+1),循环n次;i=2时,循环 n-1 次;i=3,循环n-2次…i=n+1时,循环0次.平均循环次数=np+ (n-1)p+(n-2)p+…最坏情况:新元素插入到表头,需要将原有的n个元素全都向后移动。i=n+1,循环0次;最好时间复杂度 =O(1);i=1,循环n次:最坏时间复杂度=O(n);平均时间复杂度= O(n)时间复杂度:O(n)时间复杂度:O(1)时间复杂度:O(n)原创 2024-03-04 18:08:07 · 461 阅读 · 0 评论 -
【数据结构】二、线性表:1.顺序表的定义与实现(静态分配、动态分配)
顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。那么,第二个元素就是LOC(L)+数据元素的大小;第三个元素就是LOC(L)+数据元素的大小*2。按前后顺序输出线性表L的所有元素值。返回线性表L的长度,即L中数据元素的个数。删除表L中第i个位置的元素,并用e返回删除元素的值。所以,设线性表第一个元素的存放位置是LOC(L)在表L中的第i个位置上插入指定元素e。在表L中查找具有给定关键字值的元素。获取表L中第i个位置的元素的值。原创 2024-03-04 18:04:32 · 1166 阅读 · 0 评论 -
【数据结构】一、数据结构的基本概念
**数据结构**是相互之间存在一种或多种特定**关系**的数据元素的集合。数据结构这门课着重关注的是数据元素之间的关系,和对这些数据元素的操作,而不关心具体的数据项内容。原创 2024-03-04 17:56:33 · 982 阅读 · 0 评论