数据结构C语言版,栈与队列习题与答案

第三章:

  1. 相比较普通线性表,栈的区别是什么?栈的元素的进出原则是什么?请简单解释下列术语:栈顶、栈顶元素、栈底、进栈、出栈。 

栈是限定仅可在表尾进行插入与删除操作的操作受限的线性表

进出原则:先进后出,后进先出

栈顶:表尾端

栈底:表头端

栈顶元素:表尾端元素

进栈:表尾端插入元素

出栈:表尾端删除元素,删除栈顶元素

2、 顺序栈的定义: typedet struct {  

ElemType *base; //动态分配方案,指针 base 指向栈元素空间的及地址;  

int top; //栈顶指针,实际是记录栈顶元素下一单元的下标,简称为栈顶指针; int stacksize; //栈空间的最大长度  

}SqStack; SqStack s; //s 为顺序栈的变量  

请根据上述定义,给出元素 e 进栈(注意判断栈是否已满)程序段,给出出栈的程序段

注意判断是否为空栈 

//将元素e入栈

Status Push(SqStack& S, SElemType e)//传入栈的地址和元素e

{

if (S.top - S.base >= S.stacksize)

{

//S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));//如果栈满,追加存储空间

}

if (!S.base)

{

exit(OVERFLOW);//存储分配失败返回错误值

}

*S.top = e;//e赋值给当前栈顶

S.top++;//栈顶指针+1

return 0;

3、 链栈的定义如下: 

 struct node {  

ElemType data; //栈元素  

Struct node *next; //指下一个结点

 } *top=NULL; //链栈没有头结点,用指针 top 指向栈顶结点,top 为空时为空栈初始化链栈为空栈  

根据上述定义,请给出元素 e 进栈的程序段,给出出栈的程序段(注意判断栈空) 

//将元素e入栈

Status Push(LinkStack& S, SElemType e)

{

SNode* P;//生成一个SNode形的指针

P = (LinkStack)malloc( sizeof(SNode));//这个指针指向一个新的SNode类新的结点

P->data = e;//这个结点的数据域上的指针指向传进来的元素e

P->next = S;//新结点插向栈顶,这里新节点的P指针的地址域指向了栈顶S指针

S = P;//S这个头指针重新指向栈顶

//注意,链栈的指针是一直指向栈顶的,通过从栈顶指向下一个来实现栈的先进后出!!!

return OK;

}

  1. 给出求下述表达式值的过程:#8+5-3*6+(7-1)/2#

操入左,运入右
栈空直接入,不空看优先
大于则出栈,否则都入栈
左括直接入,遇右吐出来

  1. 相比较普通线性表,队列的区别是什么?队列的元素的进出原则是什么?请简单解释下列术语:队首元素、队尾元素、入队、出队。 

区别:队列是仅限一端插入另一端删除得操作受限得线性表

原则,先进先出,后进后出

队首元素:表头元素

队尾元素:表尾元素

入队:从表尾插入新的元素

出队:删除表头元素

  1. 在链式存储的队列中插入一个新元素,描述算法思路 

新建一个结点,插入尾指针指针域,尾指针移动到新的结点得指针域

  1. 在链式存储的队列中删除一个元素,描述算法思路 

新建一个P指针指向队头指针指针域,队头指针后移一位,释放P指针

  1. 如何解决队列顺序存储结构出现的假溢出问题,给出具体解决方案。 

臆设一个环状空间

  1. 在循环队列中,当用 front 记录队首元素,rear 记录队尾元素下一个空间,当front=rear 时,循环队列可能为空,也可能是已满,怎么进行区分,给出解决方案,并给出不同解决方案中,判断队空和队满的条件。

方案1:设置一个标志区分 满为rear==标志;空为front==rear

方案2:少用一个元素空间,队满:(rear+1)%MAXQSIZE==front;队空:front==rear

  1. 给出循环队列元素入队的算法思路 
  1. 判断队列是否满
  2. 新元素入队尾
  3. 队尾指针+1
  1. 给出循环队列元素出队的算法思路。 
  1. 判空
  2. 对头元素删除
  3. 头指针-1
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,数据结构是计算机科学中一种非常重要的学科,在程序设计中占有重要地位。其目的是为了设计、实现和应用数据结构和算法。 在学习数据结构时,C语言是一种非常重要的编程语言数据结构的C语言专升本习题,涵盖了数据结构中基本的数据类型、简单的数据结构和算法基础等内容。 学习数据结构的C语言专升本习题,需要掌握C语言中的基础知识,如数组、指针、结构体等。这些知识对于理解数据结构和算法的原理和实现方式非常重要。 此外,在学习数据结构的C语言专升本习题时,还需要注意掌握常见的数据结构,如队列、链表和树等。同时还需要学习和掌握算法分析的基本方法和技巧。 最后,在学习数据结构的C语言专升本习题时,需要多动手实践,通过编写程序来加深对数据结构和算法的理解和掌握。只有通过不断地实践和练习,才能真正学好数据结构和算法,并提高自己的编程能力。 ### 回答2: 数据结构是计算机科学的基础课程之一。它主要研究不同数据的组织、存储和管理方法,以及对这些数据进行操作的算法和技术。 C语言是一种通用的、高级的编程语言,与数据结构紧密相关。在数据结构c语言专升本习题中,学习者需要掌握基本的数据结构和算法,并利用C语言来实现和优化它们。 习题通常包括对不同的数据结构(如数组、链表、树等)进行操作的编程题目,以及针对常见算法(如排序算法、查找算法等)的实现练习。通过做这些习题,学习者可以加深对数据结构和算法的理解,并提高编程技能。 在解决习题时,学习者需要注意算法的效率和空间复杂度,避免出现时间和空间浪费的情况。同时,要注意代码的风格和规范,编写高质量、易读、易维护的代码。 总之,数据结构c语言专升本习题对于提高计算机科学专业的技能和能力非常重要。学习者应该认真掌握这些习题,并理解其中的原理和思想,以便在以后的实际工作中得心应手。 ### 回答3: 数据结构是计算机科学中一个非常重要的领域,它主要研究数据组织、存储和管理的方法,是计算机软件设计必不可少的基础。 C语言是一种广泛使用的高级编程语言,出色的性能和灵活的特性使它成为许多软件开发人员和系统程序员的首选语言。 对于专升本考试来说,掌握数据结构和C语言是非常必要的。数据结构c语言习题可以帮助我们深入理解数据结构和C语言的使用。 在数据结构c语言习题中,我们可以学习到常见的数据结构,例如线性结构、树结构和图结构等等。同时,还可以学习到如何用C语言实现这些数据结构的操作和算法。 通过解决数据结构c语言习题,我们可以提高自己的编程能力,为日后的软件开发和系统设计积累宝贵经验。同时,还可以为我们的专升本考试打下坚实的基础,提高自己的考试成绩。 总之,数据结构c语言习题对于我们的学习和职业发展都非常重要,希望大家能够认真对待这一领域,不断提升自己的编程技巧和算法思维。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值