数据结构复习题(栈)

一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳ )
( )(1)栈是运算受限制的线性表。
( )(2)在栈空的情况下,不能作出栈操作,否则产生下溢出。
( )(3)栈一定是顺序存储的线性结构。
( )(4)栈的特点是“后进先出”。
( )(5)空栈就是所有元素都为0的栈。
( )(6)在C或C++语言中设顺序栈的长度为MAXLEN,则top=MAXLEN时表示队满。
( )(7)链栈与顺序栈相比,其特点之一是通常不会出现栈满的情况。
( )(8)一个栈的输入序列为:A,B,C,D,可以得到输出序列:C,A,B,D。
( )(9)递归定义就是循环定义。
( )(10)将十进制数转换为二进制数是栈的典型应用之一。

二.填空题
(1)在栈结构中,允许插入、删除的一端称为 。
(2)在顺序栈中,当栈顶指针top=-1时,表示 。
(3)在有n个元素的栈中,进栈操作的时间复杂度为 。
(4)在栈中,出栈操作的时间复杂度为: 。
(5)已知表达式,求它的后缀表达式是 的典型应用。
(6)在一个链栈中,若栈顶指针等于NULL,则表示 。
(7)向一个栈顶指针为top的链栈插入一个新结点p时,应执行 和top=p; 操作。
(8)顺序栈S存储在数组 S->data[0…MAXLEN-1]中,进栈操作时要执行的语句有:
S->top 。
(9)链栈LS,指向栈顶元素的指针是 。
(10)从一个栈删除元素时,首先取出 ,然后再移动栈顶指针。
(11)由于链栈的操作只在链表的头部进行,所以没有必要设置 结点。
(12)已知顺序栈S,在对S进行进栈操作之前首先要判断 。
(13)已知顺序栈S,在对S进行出栈操作之前首先要判断 。
(14)若内存空间充足, 栈可以不定义栈满运算。
(15)链栈LS是空的条件是 。
(16)链栈LS的栈顶元素是链表的 元素。
(17)同一栈的各元素的类型 。
(18)若进栈的次序是A、B、C、D、E,执行三次出栈操作以后,栈顶元素为 。
(19)A+B/C-D
E的后缀表达式是: 。
(20)四个元素按A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,x的值是 。

三.选择题
(1)插入和删除只能在一端进行的线性表,称为( )。
A.队列 B.循环队列 C.栈 D.循环栈
(2)设有编号为1,2,3,4的四辆列车,顺序进入一个栈结构的站台,下列不可能的出站顺序为¬ ( )
A.1234 B.1243 C.1324 D.1423
(3)如果以链表作为栈的存储结构,则出栈操作时( )
A.必须判别栈是否满 B.必须判别栈是否空
C.必须判别栈元素类型 D.队栈可不做任何判别
(4)元素A,B,C,D依次进栈以后,栈顶元素是( )
A.A B.B C.C D.D
(5)顺序栈存储空间的实现使用( )存储栈元素。
A.链表 B.数组 C.循环链表 D.变量
(6)在C或C++语言中,一个顺序栈一旦被声明,其占用空间的大小( )。
A.已固定 B.不固定 C.可以改变 D.动态变化
(7)带头结点的链栈LS的示意图如下,栈顶元素是( )
LS

H
A B C D Λ

A.A B.B C.C D.D
(8)链栈与顺序栈相比,有一个比较明显的优点是( )。
A.插入操作更加方便 B.通常不会出现栈满的情况。
C.不会出现栈空的情况 D.删除操作根加方便
(9)从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删除的结点,应执行下列¬ ( )命令。
A.x=top;top=top->next; B.top=top->next;x=top->data;
C.x=top->data; D.x=top->data;top=top->next;
(10)在一个栈顶指针为HS的链栈中,将一个S指针所指的结点入栈,应执行下列¬ ( )命令。
A.HS->next=S; B.S->next=HS->next;HS->next=S;
C.S->next=HS->next;HS=S; D.S->next=HS;HS=HS->next;
(11)四个元素按A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,栈顶元素的值是( )。
A.A B.B C.C D.D
(12)元素A,B,C,D依次进栈以后,栈底元素是( )。
A.A B.B C.C D.D
(13)经过下列栈的运算后,再执行ReadTop(s)的值是( )。
InitStack(s) (初始化栈);Push(s,a);Push(s,b); Pop(s)
A.a B.b C.1 D.0
(14)经过下列栈的运算后,x的值是( )。
InitStack(s) (初始化栈);Push(s,a);Push(s,b); ReadTop(s);Pop(s,x);
A.a B.b C.1 D.0
(15)经过下列栈的运算后,x的值是( )。
InitStack(s) (初始化栈);Push(s,a);Pop(s,x);Push(s,b);Pop(s,x);
A.a B.b C.1 D.0
(16)经过下列栈的运算后,SEmpty(s)的值是( )。
InitStack(s) (初始化栈); Push(s,a); Push(s,b);Pop(s,x); Pop(s,x);
A.a B.b C.1 D.0
(17)向顺序栈中压入元素时,( )。
A. 先存入元素,后移动栈顶指针 B.先移动栈顶指针,后存入元素
C.谁先谁后无关紧要 D.同时进行
(18)初始化一个空间大小为5的顺序栈S后,S->top的值是( )。
A.0 B.-1 C.不再改变 D.动态变化
(19)一个栈的入栈次序ABCDE,则栈的不可能的输出序列是 ( )。
A.EDCBA B.DECBA C.DCEAB D.ABCDE
(20)设有一个顺序栈S,元素A,B,C,D,E,F,依次进栈,如果六个元素出栈的顺序是B,D,C,F,E,A,则栈的容量至少应是¬ ( )。
A.3 B.4 C.5 D. 6

四.设有一个栈,元素进栈的次序为:A,B,C,D,E,用I表示进栈操作,O表示出栈操作,写出下列出栈的操作序列。
(1)C,B,A,D,E
(2)A,C,B,E,D
解:

五.求后缀表达式
(1) ABC/D
(2) -A+BC+D/E
(3) A
(B+C)*D-E
(4) (A+B)*C-E/(F+G/H)-D
(5) 8/(5+2)-6
解:

六.算法设计题
1.设用一维数组stack[n]表示一个堆栈,若堆栈中每个元素需占用M个数组单元(M>1),(1)试写出其入栈操作的算法。
(2)试写出其出栈操作的算法。

2.设计一个算法,要求判别一个算术表达式中的圆括号配对是否正确。

模拟考题
求后缀表达式
1. 求下列表达式:A/B∧C+DE-AC 的后缀表达式。
2. 求下列表达式:A/B-C+D*E-F 的后缀表达式。

写出运行下列程序段的输出结果
void main()
{ Stack S;
char x,y;
InitStack(S); // 初始化栈
x= "c ";
y= "k ";
Push(S,x); Push(S, "a ");
Push(S,y); Pop(S,x);
Push(S, "t "); Push(S,x);
Pop(S,x); Push(S, "s ");
While (!SEmpty(S))
{ Pop(S,y);cout<<y; };
cout<<x;
}

程序填空

  1. 下列程序是判别一个算术表达式(存在字符数组a[ ]中)的圆括号配对是否正确?试填空完成下列程序。
    int correct(char a[ ])
    { stack s ;
    InitStack(s); // 初始化栈
    for (i=0; i<strlen(a); i++)
    if (a[i]= =’(’)
    Push ( );
    else if (a[i]= = )
    {
    if
    return 0; // 若栈为空返回0;否则出栈
    else
    Pop(s);
    }
    if (SEmpty(s))
    cout<< " 配对正确!"; // printf (" 配对正确!");
    else
    cout<< " 配对错误!"; // printf (" 配对错误!");
    }

2.链栈的存储结构和栈顶指针定义如下,试写出把十进数转换为二进制数的程序。
#define MAXLEN 100
typedef struct stacknode // 定义栈的存储结构
{ int data;
struct stacknode *next;
}stacknode;
typedef struct
{ stacknode *top; // 定义栈顶的指针
}linkstack;
解:
void Conversion(int n) // 栈的应用:二—十进制转换
{ linkstack s;
int x;
s.top=NULL; // 置栈空
do
{ x=n%2; // 取余数
n= ; // 取新的商
stacknode *p=new ; // 申请新结点
p->next=s.top ; // 修改栈顶指针
s.top=p;
s.top->data= ; // 余数入栈
}
while (n);
cout<< " 转换后的二进制数值为:"; // printf(" 转换后的二进制数值为:");
while (s.top) // 出栈处理
{ cout<< ;
stacknode *p=s.top;
s.top= ;
delete p ; // 出栈一个余数,收回一个结
}
}

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值