线性表的分类
栈有两种基本的存储结构:顺序栈(顺序存储结构)、链栈(链式存储结构)。
1. 栈的基本概念
栈是一个后进先出(或先进后出)的线性表,只能在线性表的一端进行删除和插入操作。允许插入与删除的一端称为栈顶(top),与之对应的另一端称为栈底(bottom);插入操作称为入栈,删除操作称为出栈。图像说明:
栈
用一个形象的例子解释栈:堆叠起来的硬币和书,最先放置的在最底部,但最先拿到的在最顶部。
2. 栈的特点
栈顶元素是最后被插入和最早被删除的元素。栈底元素是最早被插人和最后被删除的元素。在顺序存储结构下,栈的插入和删除运算不需移动表中其他数据元素。栈顶指针top动态反映了栈中元素的变化情况。3. 栈的计算(重点在于理解,而不是背公式)★
一般设栈的存储空间为S(n,m),其中m>n=1,m就是该栈能存储数据量的最大值。栈的初始状态没有元素,因此告诉top指针的值后就能确定栈底和栈顶,分两种情况:
top=0,此时栈底为1,栈顶为m;top=m+1,此时栈底为m,栈顶为1。一定不要混淆!
除空栈时top指向初始定义的值(该值为0或m+1),其他时候栈中都有元素,则top的值始终处于1和m之间,其他情况都会不存在。
例:设栈的存储空间为S(1:7),表格图像说明:
①计算出入栈的元素个数:
一般只进行出栈和入栈操作,此时出入栈的元素个数为出入栈前后两次top值之差取绝对值。
②计算栈中的元素个数:
经过一系列操作后,此时栈中的元素个数为初始top和结果top之差取绝对值。
例:设栈的存储空间为S(1:50),初始状态为top=0,第一次进行入栈操作后top=30,第二次进行出栈操作后top=20。
第一次入栈操作:
入栈元素个数=入栈前top值-入栈后top值=0-30=-30,再取绝对值为30个
栈中元素个数=初始top值-结果top值=0-30=-30,再取绝对值为30个
第二次出栈操作:
出栈元素个数=出栈前top值-出栈后top值=30-20=10,再取绝对值为10个
栈中元素个数=初始top值-结果top值=0-20=-20,再取绝对值为20个
谁减谁的先后顺序无所谓,最后结果取正的就行
练习题
1. 设栈的存储空间为S(1:50),初始状态为top=51。现经过一系列正常的入栈与退栈操作后,top=1,则栈中的元素个数为( )
A. 50 B. 49 C. 0 D. 1
——————
2. 设栈的存储空间为S(1:60),初始状态为top=0。现经过一系列正常的入栈与退栈操作后,top=60,则栈中的元素个数为( )
A. 60 B. 59 C. 0 D. 1
——————
3. 设栈的顺序存储空间为S(1:m),初始状态为top=0。现经过一系列正常的入栈与退栈操作后,top=m+1,则栈中的元素个数为( )
A. 不可能 B. m+1 C. 0 D. m
——————
4. 设栈的顺序存储空间为S(1:m),初始状态为top=m+1。现经过一系列正常的入栈与退栈操作后,top=1,则栈中的元素个数为( )
A. 不可能 B. m+1 C. 0 D. m
——————
答案与解析见下期哦~
上期解答
1. 下列叙述中正确的是( D )
A. 在链表中,如果每个结点有两个指针域,则该链表一定是线性结构
B. 在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是线性结构
C. 在链表中,如果每个结点有两个指针域,则该链表一定是非线性结构
D. 在链表中,如果有两个结点的同一个指针域的值相等,则该链表定是非线性结构
【本题选项:D】
【题目解析】在链表中,每个结点只有一个数据域和一个指针域,故A、C错。如果有两个结点的同一个指针域的值相等,即指向同一个结点,则指向的这个结点有两个直接前驱,是非线性结构,故B错,D正确。
——————
2. 下列叙述中正确的是( B )
A. 链表只能是非线性结构
B. 链表可以是线性结构也可以是非线性结构
C. 对分查找也适用于有序链表
D. 快速排序也适用于线性链表
【本题选项:B】
【题目解析】根据定义,线性链表(线性表链式存储结构中的单链表),可以组成线性结构,链表中包含线性结构和非线性结构,故A错,B正确。C、D项还没学到,不用管。
文章中如有错误,欢迎批评指出
更多文档资料,请关注百度文库
举报/反馈