那个网站详情页做的好,高端网站设计公司上海,展示型网站解决方案,商城网站建设价格最优链式栈
链式存储的栈
实现方式#xff1a;可以使用单向链表完成
对单向链表进行头插#xff08;入栈#xff09;、头删#xff08;出栈#xff09;#xff0c;此时链表的头部就是链栈的栈顶#xff0c;链表的尾部#xff0c;就是链栈的栈底
队列
概念
队列#…链式栈
链式存储的栈
实现方式可以使用单向链表完成
对单向链表进行头插入栈、头删出栈此时链表的头部就是链栈的栈顶链表的尾部就是链栈的栈底
队列
概念
队列操作受限的线性表插入和删除只能在异端操作
队列的特点先进先出FIFO后进后出LILO
队头可以进行删除的一段
队尾可以进行插入的一段
队列的种类顺序队列链式队列
顺序队列
顺序存储的队列保证存储的数据逻辑上相邻物理内存上也相连还要保证符合队列的特点
顺序队列的组成
需要一片连续的空间存放数据数组堆区的一片连续的空间
需要一个变量记录队头的位置
需要一个变量记录队尾的位置最后一个元素的下一个元素的位置
假溢满现象
还有位置存放数据但是队尾已经到了顺序队列的最大容量的位置
所以一般采用循环队列来完成顺序队列的存储 循环顺序队列
循环顺序队列的组成
需要一片连续的空间存放数据数组堆区的一片连续的空间
需要一个变量记录队头的位置
需要一个变量记录队尾的位置最后一个元素的下一个元素的位置 循环顺序队列的结构体原型
//宏定义 循环顺序队列的最大容量
#define MAX 30//类型重定义表示要存储数据的类型
typedef int DataType;//定义循环顺序队列的结构体类型
typedef struct sequence
{DataType data[MAX]; //用数组存放数据实现逻辑相连物理内存也相连int front; //记录队头所在的位置int tail; //记录队尾所在的位置
}queue,*queuePtr;
循环顺序队列的相关操作功能函数的封装
创建
函数返回值顺序栈的指针
参数列表无
判断申请空间是否合法
判空
参数列表顺序队列
判断申请空间是否合法
判满
参数列表顺序队列
判断申请空间是否合法 入队
参数列表顺序队列入队的值
判断申请空间是否合法
需要判满
遍历
参数列表顺序队列
判断申请空间是否合法
需要判空 出队
参数列表顺序队列
判断申请空间是否合法
需要判空
顺序队列的大小
参数列表顺序队列
判断申请空间是否合法
销毁
参数列表顺序队列
判断申请空间是否合法 链式队列
链式存储的队列保证存储的数据逻辑上相连物理内存上随机存储保证满足队列的特点
链式队列的组成
需要一片连续的空间存放数据数组堆区的一片连续的空间
需要一个变量记录队头的位置
需要一个变量记录队尾的位置最后一个元素的下一个元素的位置
链式队列的节点的结构体原型
//重命名
typedef int DataType
typedef struct node
{union{int lenDataType data}struct node *next
}Nodetypedef struct queue
{Node *front //记录队头Node *tail //记录队尾}queueLink*queueLinkPtr
链式队列的相关操作功能函数的封装
创建
参数列表无
判断申请空间是否合法
判空
参数列表顺序队列
判断申请空间是否合法 入队尾插
参数列表顺序队列入队的数据
判断申请空间是否合法
遍历
参数列表顺序队列
判断申请空间是否合法
需要判空 出队头删
参数列表顺序队列
判断申请空间是否合法
需要判空
队列的大小
参数列表顺序队列
判断申请空间是否合法
需要判空 销毁
参数列表顺序队列
判断申请空间是否合法
需要判空 树形结构数据元素存在一对多的关系
二叉树
每个节点最多拥有两个子节点并且有严格的左右子树区分的树形结构
二叉树的相关概念
左子树以当前节点的左孩子节点为根节点的子树称为左子树。
右子树以当前节点的右孩子节点为根节点的子树称为右子树。
左斜树每个节点只有左孩子节点没有右孩子节点的树称为左斜树。
右斜树每个节点只有右孩子节点没有左孩子节点的树称为右斜树。
满二叉树在不增加层次的基础上不能在往树上增加节点。
完全二叉树在满二叉树的基础上从左往右依次增加节点的树称为完全二叉树。
二叉树的相关概念
1、在第i层上最多有2^(i-1)个节点
2、在第K层上最多总共拥有 2^K-1 节点
3、在一个树上度为0的节点叶子节点总比度为2的节点个数多一个。总节点个数 总度数 1
// n0 度0 n1 度1 n2 度2n0n1n2 1*n1 2*n2 1
n0 n1 n2 n1 2n2 1
n0 n2 1
二叉树的存储
满二叉树或者完全二叉树可以采用顺序存储普通二叉树一般采用链式存储