栈的操作及应用

实验二 栈的操作及应用

实验学时:2

实验类型:(设计型)

一、实验目的

1. 理解并掌握栈的逻辑结构和链式存储方式;

2. 理解栈的相关基本算法;

3. 编程实现相关算法并进行验证;

4. 学会利用栈解决实际问题;

5. 掌握数制转换的实现算法。

二、实验条件

Visual C++。

三、实验原理及相关知识

1. 顺序栈的存储结构描述

2. 基本操作的算法描述

实验中涉及栈的构建、入栈、出栈、判断栈是否为空、获取栈顶元素、打印栈中所有元素等操作。

3. 数制转换运算的实现方法

假设要将十进制数N 转换为d 进制数,一个简单的转换算法是重复以下两步,直至N 为零:

(1)X = N mod d(mod 为求余运算)

(2)N = N div d (div 为整除运算)

四、实验步骤

1. 实现栈的构建、入栈、出栈、判断栈是否为空、获取栈顶元素、打印栈中所有元素等基本操作的函数。

2. 调用基本操作函数实现以下功能:

(1) 构建一个空栈;

(2) 将1,2,3,4入栈;

(3) 输出栈顶元素;

(4) 输出栈中所有元素;

(5) 按照1,2,3,4的顺序依次入栈;

(6) 输出三种不同的出栈序列;

(7) 将十进制数20转化为8进制数。

五、思考题及其它

1. 在将一个非负十进制数转换成十六进制数时,10-15是转换成字母A-F 输出的,如何解决这个问题?

【参考程序】

#include "stdio.h"

#include "malloc.h"

#define OK 1

#define ERROR 0

#define INIT_SIZE 100

#define INCREMENT 10

typedef int SElemType;

typedef struct {

SElemType *base ;

SElemType *top ;

int stacksize ; // 栈的可用最大容量

}SqStack;

int InitStack(SqStack *S){

// 创建一个空栈S

(*S).base=(SElemType *)malloc(INIT_SIZE*sizeof(SElemType));

if(!(*S).base)

return ERROR;

;

(*S).stacksize=INIT_SIZE;

return OK;

}

int StackEmpty(SqStack *S)

{ //判断栈是否为空,为空则返回1,否则返回0

)

return 1;

else

return 0;

}

int GetTop(SqStack S, SElemType *e)

{ // 取出栈顶元素

if(S.top>S.base)

{

*e =*(S.top-1);

printf("栈顶元素是:%d",*e);

printf("\n");

return OK;

}

else

return ERROR;

}

int Push( SqStack *S, SElemType e )

{ //将数据元素e 入栈

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

(*S).base=(SelemType *)

realloc((*S).base,((*S).stacksize+INCREMENT)*sizeof(SElemType));

if(!(*S).base)

return 0;

(*S).top = (*S).base+(*S).stacksize;

(*S).stacksize+=INCREMENT;

}

return OK;

}

int Pop(SqStack *S, SElemType *e)

{ //如栈不为空,将栈顶元素出栈

if((*S).top ==(*S).base)

return ERROR;

(*S).top--;

return OK;

}

void Print_SqStackTraverse( SqStack S ) //输出栈中元素 { //实现此函数

}

void conversion(int N ,int r) //把十进制数N 转换为r 进制 { //实现此函数

}

main()

{

SqStack S; InitStack(&S);

; ; ; ; ; ; ; ; ; ; }

//将1,2,3,4入栈 //输出栈顶元素 //输出栈中所有元素 //按照1,2,3,4的顺序依次入栈,输出三种不同的出栈序列//将十进制数20转化为8进制数

实验二 栈的操作及应用

实验学时:2

实验类型:(设计型)

一、实验目的

1. 理解并掌握栈的逻辑结构和链式存储方式;

2. 理解栈的相关基本算法;

3. 编程实现相关算法并进行验证;

4. 学会利用栈解决实际问题;

5. 掌握数制转换的实现算法。

二、实验条件

Visual C++。

三、实验原理及相关知识

1. 顺序栈的存储结构描述

2. 基本操作的算法描述

实验中涉及栈的构建、入栈、出栈、判断栈是否为空、获取栈顶元素、打印栈中所有元素等操作。

3. 数制转换运算的实现方法

假设要将十进制数N 转换为d 进制数,一个简单的转换算法是重复以下两步,直至N 为零:

(1)X = N mod d(mod 为求余运算)

(2)N = N div d (div 为整除运算)

四、实验步骤

1. 实现栈的构建、入栈、出栈、判断栈是否为空、获取栈顶元素、打印栈中所有元素等基本操作的函数。

2. 调用基本操作函数实现以下功能:

(1) 构建一个空栈;

(2) 将1,2,3,4入栈;

(3) 输出栈顶元素;

(4) 输出栈中所有元素;

(5) 按照1,2,3,4的顺序依次入栈;

(6) 输出三种不同的出栈序列;

(7) 将十进制数20转化为8进制数。

五、思考题及其它

1. 在将一个非负十进制数转换成十六进制数时,10-15是转换成字母A-F 输出的,如何解决这个问题?

【参考程序】

#include "stdio.h"

#include "malloc.h"

#define OK 1

#define ERROR 0

#define INIT_SIZE 100

#define INCREMENT 10

typedef int SElemType;

typedef struct {

SElemType *base ;

SElemType *top ;

int stacksize ; // 栈的可用最大容量

}SqStack;

int InitStack(SqStack *S){

// 创建一个空栈S

(*S).base=(SElemType *)malloc(INIT_SIZE*sizeof(SElemType));

if(!(*S).base)

return ERROR;

;

(*S).stacksize=INIT_SIZE;

return OK;

}

int StackEmpty(SqStack *S)

{ //判断栈是否为空,为空则返回1,否则返回0

)

return 1;

else

return 0;

}

int GetTop(SqStack S, SElemType *e)

{ // 取出栈顶元素

if(S.top>S.base)

{

*e =*(S.top-1);

printf("栈顶元素是:%d",*e);

printf("\n");

return OK;

}

else

return ERROR;

}

int Push( SqStack *S, SElemType e )

{ //将数据元素e 入栈

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

(*S).base=(SelemType *)

realloc((*S).base,((*S).stacksize+INCREMENT)*sizeof(SElemType));

if(!(*S).base)

return 0;

(*S).top = (*S).base+(*S).stacksize;

(*S).stacksize+=INCREMENT;

}

return OK;

}

int Pop(SqStack *S, SElemType *e)

{ //如栈不为空,将栈顶元素出栈

if((*S).top ==(*S).base)

return ERROR;

(*S).top--;

return OK;

}

void Print_SqStackTraverse( SqStack S ) //输出栈中元素 { //实现此函数

}

void conversion(int N ,int r) //把十进制数N 转换为r 进制 { //实现此函数

}

main()

{

SqStack S; InitStack(&S);

; ; ; ; ; ; ; ; ; ; }

//将1,2,3,4入栈 //输出栈顶元素 //输出栈中所有元素 //按照1,2,3,4的顺序依次入栈,输出三种不同的出栈序列//将十进制数20转化为8进制数


相关文章

  • 2014电算化实务操作流程(1)
  • "系统管理"的三种题型 <一>增加操作员 <二>建立账套 <三>设置操作权限 <一>增加操作员: 系统管理:第 (09.10.14.15.17.18.19)题(共7道题) ...查看


  • 应用系统部署操作手册
  • 应用部署操作手册 (eos6.0.eos6.2) 目录 前言.......................................................................................... ...查看


  • 移动智能终端安全威胁及应对策略
  • Business & Operation业务与运营 移动智能终端安全威胁及应对策略 闵 栋 工业和信息化部电信研究院 北京 100191 摘 要 当前,移动智能终端产业迅猛发展,但也带来恶意代码泛滥.用户隐私窃取.不良内容传播等安全 ...查看


  • 智能手机技术的发展与剖析
  • 智能手机技术的发展与剖析 智能手机,即Smartphone,也可称为多媒体手机.从功能上来说,它与传统手机相比增强了多媒体应用功能,在满足传统语音通信的同时还具有PDA.MP3播放.数码照相和摄像.视频播放器和游戏机等功能.随着支持数据传输 ...查看


  • 刺法灸法学
  • 内容简介 本书的编写在指导思想上坚持"精编"的原则,在充分吸收以往各版教材优点的基础上,按照普通高等教育全日制本科刺法灸法学大纲和执业医师考试大纲的要求,突出"好讲.好学.好用"的三个特点,即教师在教 ...查看


  • 全国高校计算机等级考试一级考什么内容
  • 考试科目:一级MS Office.一级WPS Office和一级B ,一级共三个科目. (都是计算机基础知识.基本办公软件的使用.一级B 是入门级 我想应该是最简单的 它没有PPT 的内容.一级WPS OFFICE 考试和其余二者办公平台不 ...查看


  • 刺法灸法学习题
  • 刺法灸法学习题 第一章 1.什么叫刺法灸法学? 2.刺法灸法学的内容主要有哪些? 3.刺法灸法学的在针灸学术中的地位怎样? 4.针刺起源于什么时代?简述针具的演变? 5.复式手法烧山火等首载于哪一部著作? 6.奠定刺法基础的著作是哪些?标志 ...查看


  • [微课应用]"技能演练型微课"设计与应用_信息化教学创新
  • \点一下 或许我们就会有故事 [微课应用]"技能演练型微课"设计与应用 2016-04-18 23:07阅读:513 近几年,微课成为教育领域的"大事件".怎样超越微课的纯技术开发局限,迈向微课有效教 ...查看


  • 应用型软件专业操作系统课程的教学探索
  • 应用型软件专业操作系统课程的教学探索 摘要:操作系统是应用型软件专业的一门核心课程, 本文从操作系统课程的教学内容.实践教学.教学技巧等方面进行探讨, 提出一些教学方法和策略, 供同行参考. 关键词:操作系统; 应用型软件专业; 教学方法 ...查看


  • 操作系统是计算机硬件的封装利功能的扩充
  • 嵌入式系统:操作系统是计算机硬件的封装利功能的扩充 有 49 人阅读 (关于:IC,电机) 通常,计算机用户是用高级语言来编写应用程序的,但计算机的硬件却是按照机器码指令来执行操作的.于是,就出现了这样一个问题:用户如何才能用高级语言来指示 ...查看


热门内容