HDU数据结构期末复习-3.栈和队列

本文是关于数据结构中栈和队列的复习笔记,详细介绍了栈的定义、基本操作、顺序栈和链栈,以及队列的定义、基本运算、顺序队列、循环队列和链队列,探讨了栈的上溢和下溢以及队列的假上溢现象。
摘要由CSDN通过智能技术生成

《数据结构》复习笔记

HDU-STEA_banjiu修改于2021年1月9日

参考书目:严蔚敏《数据结构(第二版)》、王导论坛《数据结构考研复习指导》、HDU-STEA_YY《<数据结构>复习笔记》

第三章 栈和队列

1.栈的定义(stack)

栈是只允许在一端进行插入或删除操作的线性表,又称为后进先出表,LIFO表(Last in First Out)。插入、删除端称为栈顶,另一端称栈底。表中无元素称空栈。

2.栈的基本操作

  1. InitStack(&s)
    

    初始化一个空栈;

  2. DestroyStack(&s)
    

    销毁一个栈,并释放栈s占用的存储空间(”&“表示引用调用);

  3. StackEmpty(s)
    

    判栈空,若栈空则返回true,否则返回false;

  4. StackFull(s)
    

    判栈满;

  5. Push(&s,x)
    

    进栈,若栈S未满,则将x加入使之成为新栈顶;

  6. Pop (&s,&x)
    

    出栈,若栈S非空,则用x返回栈顶元素;

  7. GetTop(s,&x)
    

    取栈顶元素,若栈非空,则用x返回栈顶元素。

3.顺序栈

栈的顺序存储结构称顺序栈。它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置。

#define MaxSize 50
typedef struct
{
   
    ElemType data[MaxSize]; //栈底指针 存放数据
    int top; 				//栈顶指针
} SqStack;
  • 栈顶指针:S.top,初始时设置S.top=-1;栈顶元素:S.data[S.top]。
  • 进栈操作:栈不满时,先栈顶指针加1,再送值到栈顶元素。
  • 出栈操作:栈非空时,先取栈顶元素值,再将栈顶指针减1。
  • 栈空条件:S.top==-1;栈满条件:S.top==MaxSize-1;栈长:S.top+1。

栈和队列的判空、判满条件,会因实际条件的不同而不同,所以,上面提到的方法以及下面的代码实现只是在栈顶指针设定的条件下的相应方法。

4.栈的上溢和下溢

当栈满时,做进栈运算必定产生空间溢出,称“上溢”。 当栈空时,做退栈运算必定产生空间溢出,称“下溢”。上溢是一种错误应设法避免,下溢常用作程序控制转移的条件。

5.在顺序栈上的基本运算

1)置空栈
Void InitStack(SqStack &s)
{
   
    s.top = -1;				//初始化栈顶指针
}
2)判栈空
bool StackEmpty(SqStack s)
{
   
    if(s.top == -1)
        return true;		//栈空
    else
        return false;		//栈非空
}
3)判栈满
int StackFull(SqStack s)
{
   
    if(s.top == stacksize - 1)
        return true;		//栈满
    else
        return false;		//栈非满
}
4)进栈
bool Push(SqStack &s, ElemType x)
{
   
    if (StackFull(s))
        return false;		//栈满,报错
    s.data[++s.top] = x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于的叙述正确的是(D) A.是非线性结构B.是一种树状结构C.具有先进先出的特征D.有后进先出的特征 6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素 C.插入删除不需要移动元素 D.所需空间与线性表长度成正比 7.用链表表示线性表的优点是(便于插入和删除操作) 8.在单链表中,增加头结点的目的是(方便运算的实现) 9.循环链表的主要优点是(从表中任一结点出发都能访问到整个链表) 10.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D) A.每个元素都有一个直接前件和直接后件 B.线性表中至少要有一个元素 C.表中诸元素的排列顺序必须是由小到大或由大到小 D.除第一个和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 11.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D) A.必须是连续的 B.部分地址必须是连续的C.一定是不连续的 D.连续不连续都可以 12.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构) 13.树是结点的集合,它的根结点数目是(有且只有1) 14.在深度为5的满二叉树中,叶子结点的个数为(31) 15.具有3个结点的二叉树有(5种形态) 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13) 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba) 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA) 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca) 20.数据库保护分为:安全性控制、 完整性控制 、并发性控制和数据的恢复。 1. 在计算机中,算法是指(解题方案的准确而完整的描述) 2.在下列选项中,哪个不是一个算法一般应该具有的基本特征(无穷性) 说明:算法的四个基本特征是:可行性、确定性、有穷性和拥有足够的情报。 3. 算法一般都可以用哪几种控制结构组合而成(顺序、选择、循环) 4.算法的时间复杂度是指(算法执行过程中所需要的基本运算次数) 5. 算法的空间复杂度是指(执行过程中所需要的存储空间) 6. 算法分析的目的是(分析算法的效率以求改进) ............ .................
1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。 ① A.操作对象   B.计算方法  C.逻辑结构  D.数据映象 ② A.存储结构 B.关系 C.运算 D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是① 的有限集合,R是D上的② 有限集合。 ① A.算法 B.数据元素 C.数据操作 D.数据对象 ② A.操作 B.映象 C.存储 D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成 。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4. 算法分析的目的是① ,算法分析的两个主要方面是② 。 ① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是① ,它必具备输入、输出和② 等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括 、 、 和 四种类型,树形结构和图形结构合称为 。 2. 在线性结构中,第一个结点 前驱结点,其余每个结点有且只有 个前驱结点;最后一个结点 后续结点,其余每个结点有且只有 个后续结点。 3. 在树形结构中,树根结点没有 结点,其余每个结点有且只有 个直接前驱结点,叶子结点没有 结点,其余每个结点的直接后续结点可以 。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以 。 5. 线性结构中元素之间存在 关系,树形结构中元素之间存在 关系,图形结构中元素之间存在 关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 for (i=0;i<n;i++) for (j=0;j<n; j++) A[i][j]=0; 8. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 for (i=0;i<n;i++) for (j=0; j<i; j++) A[i][j]=0; 9. 分析下面算法(程序段),给出最大语句频度 ,该算法的时间复杂度是__ __。 s=0; for (i=0;i<n;i++) for (j=0;j<n;j++) for (k=0;k<n;k++) s=s+B[i][j][k]; sum=s; 10. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。 int i=0,s=0; while (s<n) { i++; s+=i; //s=s+i } 11. 分析下面算法(程序段)给出最大语句频度 ,该算法的时间复杂度是__ __。 i=1; while (i<=n) i=i*2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值