#数据结构笔记----栈、队列、

栈: 先进后出的结构

队列
队列: 先进先出的结构

循环队列和链式队列

struct que{
int *arr; //指向堆空间的内存(数组)
int size; //堆空间大小

int *front;//始终指向第一个存入的数据
int *last; //时钟指向最下一个要被存入数据的内存

}

循环队列:
申请了一段连续的内存(数组),front始终指向第一个存入的数据,
last始终指向下一个要存入数据的内存。
当 front == last的时候,队列为空
当 (last+1)%size == front, 队列已满
当last+1size且队列未满时,last从连续内存的下标0开始重新
存入数据。
当循环队列的内存是size个元素时,实际上最多存放size-1个元素。
因为要把 front
last这个情况(队列为空)排除出去

案例: 输入正数入队,输入负数出队

链式队列:
链式队列与链表非常相似,在单链表的情况下进行尾插和头删方法。
只允许对链表的两端进行操作,不允许中间操作。

struct que{
//int *head; 指向第一个元素的位置,可以省略
int size; //当前队列中元素的个数

int *front;//始终指向第一个存入的数据
int *last; //始终指向最后一个元素

}

队列是先进先出的线性表
栈是先进后出的线性表
单链表,双链表和内核链表都是属于线性表


非线性表: 树
树:某一个节点有多个后驱节点,但只有一个前驱节点

二叉树是一种特殊的树状结构,它的任意一个节点最多有2个子节点。

并且子节点的数值与根节点的数值有明显的比较关系。
左子节点 < 根节点 < 右子节点

二叉树是一种有序的树

如果一个二叉树除了最后一层以外,其他每一层都有2个子节点,那么

称这个二叉树是满二叉树。
满二叉树中,第x层的节点个数是 2^(x-1);

如果一个二叉树,它的第1层到第n-2层,每次都是有2个子节点,并且

最后一层子节点从左往右连续,那么称为完全二叉树
完全二叉树是满二叉树的最后一层从右往左连续删除节点造成的。
完全二叉树中,除最后一层以外,第x层的节点个数 2^(x-1),最后一层
节点从左往右连续。(个数不定)

在二叉树中,任意根节点的左子树上的所有数据,一定比根节点的数值要

小;右子树上的所有数据,一定比根节点的数值大

二叉树的输出方式:
(1)前序遍历
根-左-右
100–[95–90–89–92–97–96–98]–[103–101–105]

(2)中序遍历(用途最多)
	左-根-右
	【89--90--92--95--96--97--98】--100--【101--103--105】
	二叉树的中序遍历,是一个从小到大的排序
	
(3)后序遍历
	左-右-根
	
(4)按层遍历
	按照层次,每一层从左往右依次打印
	100-【95--103】--【90--97--101--105】--【89--92--96--98】

	编程时,二叉树的按层遍历,是用队列实现的。
	
	根节点入队
	while(队列不为空)
	{
		出队一个节点
		把出队节点的左右子节点加入队列
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值