栈
栈(堆栈)的定义
堆栈又名栈(stack),它是一种线性表。限定仅在表尾进行插入和删除操作的线性表。是一种后进先出的线性表.
空栈:不含任何元素的空表。
栈顶和栈底
进行插入和删除的这一端(表尾)被称为栈顶,相对地,把另一端称为栈底。
入栈和出栈
进栈(入栈或压栈):向一个栈插入新元素,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素.
出栈(退栈)从一个栈删除元素又称作,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
特点:
1.栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊的线性表。
2.按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始读出数据(最后一个数据被第一个读出来)
顺序栈
采用顺序存储的栈叫做顺序栈,利用一组地址连续的存储单元存放从栈底到栈顶的数据元素,设置一个top指针指示当前栈顶元素的位置
栈顶位置必须小于栈的长度(StackSize)。由于栈的第一个元素的位置为0,因此把top=-1作为判断栈为空栈的条件。
共享栈
利用栈底的位置相对不变的特征,让俩个顺序栈共享一个一维数组空间,让栈从俩端往中间延伸
队列
队列的定义
队列是一种线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头.
队列的数据元素又称为队列元素
入队和出队
在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。
因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列为先进先出
顺序队列和循环队列
顺序队列
建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置
循环队列
在进行出队和入队操作时,front和rear的指针在进行不断的移动
造成存储空间不能完全利用的问题
在实际使用队列时,为了使队列空间能重复使用,往往对队列的使用方法稍加改进:无论插入或删除,一旦rear指针增1或front指针增1 时超出了所分配的队列空间,就让它指向这片连续空间的起始位置。这实际上是把队列空间由原本的形状重新想象成一个环形空间,环形空间中的存储单元循环使用,用这种方法管理的队列也就称为循环队列。除了一些简单应用之外,真正实用的队列是循环队列。
在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件时front=rear.