
数据结构
文章平均质量分 75
Jaee
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】C语言实现顺序表(静态顺序表)
静态顺序表的定义:顺序表的概念? --用⼀段地址连续的存储单元依次存储数据元素的线性结构。为什么要实现顺序表? --比较数组...顺序表的特点:访问特定元素的时间复杂度为O(1)增加、删除⼀个元素的时间负责的为O(n)长度固定、存储连续顺序表定义:typedef int DataType;#define MAX 100 typedef struct se原创 2017-06-21 07:50:57 · 815 阅读 · 0 评论 -
判断元素出栈、入栈顺序的合法性
元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 定义一个栈s,入栈序列为dataPush,出栈序列为dataPop及dataPop2,长度分别为len1和len2, len3。在判断的方法中,如果两个序列为空或长度不等,则不合法,出栈序原创 2017-07-22 15:51:43 · 1157 阅读 · 0 评论 -
使用两个队列实现一个栈
两个队列实现一个栈队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中进行元素的转移,比较简单的实现是:1.queue1和queue2在任一时刻至少有一个为空,即如果有元素,所以原创 2017-07-19 10:54:25 · 323 阅读 · 0 评论 -
使用两个栈实现一个队列
2. 两个队列实现一个栈队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中进行元素的转移,比较简单的实现是:1.queue1和queue2在任一时刻至少有一个为空,即如果有元素,所以元素只在同一个队列中。 2.当有元素需要插入时,将插入的元素插入到空的队列中,并将另一非空队列的元素转移到该队列中,原创 2017-07-19 10:42:28 · 323 阅读 · 0 评论 -
【数据结构】二叉树前中后序遍历、层序遍历(递归实现)
这里使用前序遍历方式建立二叉树主要介绍:递归实现二叉树建立,前序、中序、后续、层序遍历 ,求二叉树深度及节点个数 本文使用序列:array[10] = { 1, 2, 3, -1, -1, 4, -1, -1, 5, 6 };前序遍历算法:若二叉树为空,则算法结束,否则:1)先访问根节点 2)前序遍历访问左子树 3)前序遍历访问右子树前序遍历结果:1 2 3原创 2017-07-05 10:48:49 · 946 阅读 · 0 评论 -
【数据结构】顺序栈(顺序表动态实现)
栈的概念栈:一种特殊的线性表,其只允许在在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为后进先出的线性表。栈的特点:后进先出(LIFO)顺序栈:顺序堆栈和顺序表数据成员相同,不同之处,顺序堆栈的入栈和出栈操作只允许对当前栈顶进行顺序堆栈所有操作的时间复杂度均为O(1)。原创 2017-06-26 15:36:07 · 712 阅读 · 0 评论 -
【数据结构】顺序队列(链表实现)
队列介绍队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的一端称为队头,通常称为出队列。队列具有先进先出的特性(FIFO)。队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而异,将其称为链队列。实现代码://队列必须一端进行插入(队头)一端进行删除(队尾)#if原创 2017-06-27 23:56:56 · 444 阅读 · 0 评论 -
链表面试题(三):链表相交,链表带环,链表带环相交
接上一篇链表面试题博客:11. 判断单链表是否带环?若带环,求环的长度?求环的入口点?1)带环判断:定义两个指针,pFast、pSlow,其中两指针速度pFast = 2pSlow ,若带环总会有pFast == pSlow,并返回相遇节点,若不带环 这个指针的最后节点都为空。2)求环的长度,定义计数器、 保存当前相遇节点、从相遇节点开始遍历,计数器计数,当再次与相遇节点相遇时 ,计数原创 2017-06-24 01:35:25 · 564 阅读 · 0 评论 -
链表面试题(二):冒泡排序、合并两个有序链表、查找中间节点、查找倒数K个节点
这里接上一篇博客,7. 单链表排序(冒泡排序&快速排序)//7.单链表排序(冒泡排序)void BubbleSort(pNode* pHead){ assert(NULL != pHead); pNode pCur = *pHead; pNode pPrev = NULL; int index1 = 0; int index2 = 0; while (pCur != p原创 2017-06-23 01:22:52 · 629 阅读 · 0 评论 -
链表面试题(一):逆序打印链表、无头链表删除插入节点、约瑟夫环、逆置单链表
1. 比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?1)顺序表支持随机访问,单链表不支持随机访问。2)顺序表插入/删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入/删除效率更高,时间复杂度为O(1)。3)顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低。2. 从尾到头打印单链表//2.从尾到头打印单链表void ReverseP原创 2017-06-23 01:13:13 · 1007 阅读 · 0 评论 -
【数据结构】C语言实现链表
链表的特点:长度不固定,可以任意增删。存储空间不连续,数据元素之间使⽤指针相连,每个数据元素只能访问周围的⼀个元素(根据单链表还是双链表有所不同)。存储密度小,因为每个数据元素,都需要额外存储⼀个指向下⼀元素的指针(双链表则需要两个指针)。要访问特定元素,只能从链表头开始,遍历到该元素,时间复杂度为 O(n)O(n)。在特定的数据元素之后插⼊或删除元素,不涉及到其他元素的移原创 2017-06-22 01:09:14 · 525 阅读 · 0 评论 -
【数据结构】C语言实现顺序表(动态顺序表)
相比上一篇博客所写的静态顺序表,本篇介绍的动态版本主要通过增加动态扩容以及内存资源回收两个接口实现动态顺序表使得顺序表的使用相较上一个版本比较灵活具体实现代码:SeqList.h#ifndef __SEQLIST_D_H__#define __SEQLIST_D_H__#include#include#include#includetypedef int DataT原创 2017-06-21 09:32:44 · 661 阅读 · 0 评论 -
链表翻转(给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5)
链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,提示:这个题是链表逆置的升级变型。代码:pNode RotateList(pNode* pHead, DataType k){ pNode pPre = Find(*pHead, k); pPre原创 2017-07-25 15:21:11 · 1811 阅读 · 0 评论