数据结构
文章平均质量分 57
_w_z_j_
在校大学生一个~ 生活不止篮球还有代码~
展开
-
数据结构--二叉树
1. 树的概念及其结构1.1 树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根节点,根节点没有前驱节点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继结点。 树形结.原创 2022-04-18 22:11:54 · 1319 阅读 · 21 评论 -
数据结构--栈和队列
1.栈1.1栈的概念栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈内元素遵从先进后出的规则。压栈就是插入数据的操作,出栈就是删除数据的操作,都在栈顶实现。1.2栈的实现栈的实现可以由链表和数组分别实现,不过考虑到栈的特性,还是选择用数组来实现栈,因为数组在删除和添加尾部数据时消耗较少。//栈的实现类似顺序表的实现typedef int STDataType;typedef struct Stack{原创 2022-03-29 20:32:16 · 2221 阅读 · 25 评论 -
数据结构--双向循环链表的实现
前言之前学习了单链表的实现,单链表在实现的过程中,尾删,尾插是比较麻烦的,时间复杂度为O(N),而双向循环链表就不会有这样的顾虑,双向循环链表的结构是很有优势的。具体优势在实现的时候会显现出来。双向循环链表的实现在实现双向循环链表时,我们选择了插入头指针。//头文件包#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int Data;typedef stru.原创 2022-03-26 16:18:23 · 1535 阅读 · 4 评论 -
判断环形链表
题目要求, 判断一个链表内部是否存在环形链表,如果存在,返回开始环形链表结构的第一个结点的位置;如果不存在,则返回空指针。分析:使用快慢指针的方法,快指针一步走两个结点,慢指针一步走一个结点,同时开始走,如果存在环形链表,那么快慢指针是迟早会在环形链表中相遇的。如果快指针为空,或者快指针的下一个结点为空(因链表中结点个数不同而异,奇偶分明!),那么就不存在环形链表; 如果存在环形链表,看下图分析:代码实现:struct ListNode *detectCycle(s.原创 2022-03-23 20:55:22 · 1264 阅读 · 17 评论 -
快慢指针判断链表是否相交
思路:先分别把这两个链表遍历一遍(同时用两个个计数器记录下来两个链表的长度m,n);如果他们的最后一个结点相同,就说明相交,如果不相同直接返回空; 如果最后一个结点相同:让长度较长的链表从头开始,先走|m-n|次,然后两个一起走,同时比较两个结点是否相同,如果相同,说明找到了相交点,直接返回即可。代码实现:/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2022-03-23 16:32:56 · 1709 阅读 · 2 评论 -
利用“归并思想”和“哨兵结点”合并两个有序链表
1.合并两个有序链表2.链表分割原创 2022-03-20 21:32:42 · 1522 阅读 · 10 评论 -
快慢指针寻找链表中间结点
1.寻找链表中间结点ps.此题出于LeetCode网。用普通的方法不过就是开辟一个数组,将节点中的数据全部放到数组中,然后通过控制数组的下标找到处于数组中间的数据,进而找到存储相对应的数据的结点,返回结点的地址:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode*..原创 2022-03-18 21:33:05 · 1654 阅读 · 12 评论