栈和队列是两种重要的线性结构。从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操做是线性表操做的子集,它们的操做相对于线性表来讲是受到限制的,所以,能够称其为限定性的数据结构。算法
从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型。数据结构
栈:是限定仅在表尾进行插入或删除操做的线性表,又能够称为后进先出的线性表。 函数
栈顶:栈的表尾端spa
栈底:栈的表头端设计
空栈:不含元素的空表指针
和线性表类似,栈也有两种存储表示方法,即顺序栈和链栈。对象
(1)栈的顺序存储递归
所谓栈的顺序存储,就是采用一组物理上连续的存储单元来存放栈中全部元素,并使用top指针来指示当前栈中处于栈顶的元素。队列
(1.1) 顺序栈的基本操做:数学
-1:初始化栈函数的实现
-2:判断栈是否为空的函数实现
-3:进栈函数的实现
-4:出栈函数的实现
-5:获取栈顶元素函数的实现
-6:遍历栈内元素函数的实现
-7:经过用户输入数据的方式建立一个顺序栈
(2)栈的链式存储
栈的顺序存储一般要求系统分配一组连续的存储单元,在实现时,对于某些语言而言,当栈满后想要增长连续的存储空间时没法实现的。咱们能够经过链式存储来实现须要多少存储空间就申请多少存储空间,这减低空间使用的浪费率。
(2.1)链栈的基本操做
-1:初始换链栈函数的实现
-2:判断链栈是否为空函数的实现
-3:进栈函数的实现
-4:出栈函数的实现
-5:获取栈顶元素函数的实现
-6:经过用户输入的方式创一个链栈
与栈同样,队列也是一种特殊的线性表,不一样的是,队列在进行数据操做是必须遵循“先进先出”的原则,这一特色决定了队列的进本操做须要在其两端进行。
队列的基本操做一般在队列两端被执行,其中执行插入元素操做的一端被称为队尾;执行删除元素操做的一段被称为队头。队列中的元素个数就是队列的长度,若队列中不包含任何元素,则被称为队空,若队列中没有可用空间存储待进队元素,此时咱们称为队满。
队列的顺序存储是指采用一组物理上连续的存储单元来放队列中的全部元素。为了便于计算队列中的元素个数,咱们约定,队头指针指向实际队头元素所在位置的前一位置,对位指针指向实际队尾元素所在的位置。
(1)初始化队列函数的实现
(2)判断队列是否为空函数的实现
(3)元素进队函数的实现
(4)元素出队函数的实现
(5)获取队头元素的实现
(6)经过用户输入数据的方式建立一个顺序队列
(1)元素进队函数的实现
(2)元素出队函数的实现
(3)经过用户输入的方式建立一个循环顺序队列
(1)建立链式队列函数的实现
(2)判断队头指针和队尾指针是否为空函数的实现
(3)进队函数的实现
(4)出对函数的实现
(5)获取队头元素函数的实现
(6)经过用户输入数据的方式建立一个队列
循环链式队列是将链式队列的队尾指针所在的结点指向头结点。因为头结点的下一个结点就是队头元素所在获得位置,而队尾指针所在的结点又指向头结点,因此由队尾指针也能够找到队头元素,所以在循环链式队列中咱们不须要再增设队头指针。
递归是数学中一个十分重要的概念,它也被大量应用在计算技术中,其特征为直接或间接调用自身,咱们一般把一函数调用自身称为递归,不然称为间接递归。在算法设计中,任何间接递归均可以转化为直接递归来实现。