首页>计算机等级考试>模拟试题>正文
第3章:栈和队列习题练习解析

www.zige365.com 2010-7-22 11:04:15 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

  解:
  算法如下
  void ClearStack
  因为要置空的是栈S,如果不用指针来做参数传递,那么函数进行的操作不能对原来的栈产生影响,系统将会在内存中开辟另外的单元来对形参进行函数操作。结果等于什么也没有做。所以想要把函数操作的结果返回给实参的话,就只能用指针来做参数传递了。
  3.8 利用栈的基本操作, 写一个返回S中结点个数的算法 int StackSize,并说明S为何不作为指针参数?
  解:
  算法如下:
  int StackSize
  return n;
  }
  上述算法的目的只要得到S栈的结点个数就可以了。并不能改变栈的结构。所以S不用指针做参数,以避免对原来的栈中元素进行任何改变。系统会把原来的栈按值传递给形参,函数只对形参进行操作,最后返回元素个数。
  3.9 设计算法判断一个算术表达式的圆括号是否正确配对。 ‘就退掉栈顶的‘
  if EmptyStack return 1;// 匹配,返回1
  else return 0;//不匹配,返回0
  }
  3.10 一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。 试为此双向栈设计初始化InitStack 、入栈Push 和出栈Pop等算法, 其中i为0 或1, 用以表示栈号。
  解:
  双向栈其实和单向栈原理相同,只是在一个向量空间内,好比是两个头对头的栈放在一起,中间的空间可以充分利用。双向栈的算法设计如下:
  //双向栈的栈结构类型与以前定义略有不同
  #define StackSize 100 // 假定分配了100个元素的向量空间
  #define char DataType
  typedef structDblStack
  void InitStack
  int EmptyStack
  int FullStack
  void Push
  DataType Pop
  3.11 Ackerman 函数定义如下:请写出递归算法。
  ┌ n+1  当m=0时
  AKM = │ AKM 当m≠0 ,n=0时
  └ AKM) 当m≠0, n ≠ 0时
  解:
  算法如下
  int AKM
  3.12 用第二种方法 ,即少用一个元素空间的方法来区别循环队列的队空和队满,试为其设计置空队,判队空,判队满、出队、入队及取队头元素等六个基本操作的算法。
  解:
  算法设计如下:
  //循环队列的定义
  #define QueueSize 100
  typedef char Datatype ; //设元素的类型为char型
  typedef struct CirQueue;
  置空队
  void InitQueue
  判队空
  int EmptyQueue
  判队满
  int FullQueue
  出队
  DataType DeQueue
  入队
  void EnQueue
  取队头元素
  DataType FrontQueue

本新闻共2页,当前在第2页  1  2  

我要投稿 新闻来源: 编辑: 作者:
相关新闻