当前位置:文档之家› 实验一 堆栈

实验一 堆栈

实验一 堆栈
实验一 堆栈

实验一堆栈

一、实验目的:深入了解堆栈的基本特征,掌握顺序堆栈类的实现方法,掌握在实际问题背景下灵活运用堆栈类的方法。

二、实验内容:

第一部分:验证部分

第一步:建立一个工作文件夹,自己命名,如命名为data structure,在该文件夹下建立如下三个文件夹,分别命名为C,stack,ch2,下载文件UTILITY.H、UTILITY.CPP,存放在文件夹C中;下载文件STACK.H、STACK.CPP,存放于文件夹stack中。

第二步:下载文件revline.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序对应教材53页的代码,程序读入一个整数n和n个浮点数,然后以相反的顺序输出。程序依赖C++中的标准模板库(STL)提供的一个类来实现堆栈。

第三步:下载文件stackdemo.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序的功能同程序revline.cpp,采用的是自定义的堆栈类,即STACK.H、STACK.CPP两个文件。建议在运行程序,观察实验结果之后,阅读上述两个文件,了解具体的实现细节。

第四步:下载文件brackers.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序对应教材71页的代码,实现括号匹配的检测,该程序使用的是自定义的堆栈类。运行程序,观察实验结果。输入不同形式的括号组合,看运行结果是否正确。在此基础上,对程序做修改,增加如下功能:当括号检测结果为匹配时,输出提示信息。

注:如果下载文件存放的文件夹为自己另外设置的,注意代码中的#include部分要做相应的修改。

第二部分:设计部分

第一题:利用第一部分提供的堆栈类,编写主函数,实现将数制转换的功能,要求将输入的十进制数据,转换成二进制输出。

第二题:后缀表达式求值

为了处理方便,编译程序常把中缀表达式首先转换成等价的后缀表达式,后缀表达式的运算符在运算对象之后。在后缀表达式中,不在引入括号,所有的计算按

运算符出现的顺序,严格从左向右进行,而不用再考虑运算规则和级别。中缀表达式“3*2^(4+2*2-1*3)-5 ”的后缀表达式为:“32422*+13*-^*5-”。

计算一个后缀表达式,算法上比计算一个中缀表达式简单的多。这是因为表达式中即无括号又无优先级的约束。具体做法:只使用一个对象栈,当从左向右扫描表达式时,每遇到一个操作数就送入栈中保存,每遇到一个运算符就从栈中取出两个操作数进行当前的计算,然后把结果再入栈,直到整个表达式结束,这时送入栈顶的值就是结果。为了简化问题,限定运算数的位数仅为一位。

栈中状态变化情况:

图后缀表达式求值过程

根据上述算法,利用第一部分提供的堆栈类,编写主函数,实现后缀表达式的计算功能。

数据结构-堆栈和队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法;队列链式存储结构下的基本算法;实验内容: 3-18链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化Stacklnitiate (S), 非空否StackNotEmpty(S),入栈StackiPush(S,x), 出栈StackPop (S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3, 4,5 入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 3-19对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当 前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写一个主函数进行测试。 实验结果: 3-18 typedef struct snode { DataType data; struct snode *n ext; } LSNode; /* 初始化操作:*/

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

堆栈应用

1引言 本课程主要是对栈的一些基本操作以及栈的应用进行设计的,栈是操作受限的线性表,先进后出,可称为限定性的数据结构]1[。栈的基本操作包括栈的初始化,进栈操作、出栈操作、取栈顶元素、判读栈是否为空、判断栈是否满以及对栈的置空,通过这些基本操作的组合来实现进制转换、括号匹配、文本输入。 2问题分析 2.1进制转换 将一个十进制的数转换为另一进制,基于数的组成原理位权与进制,转换时让十进制数除以该进制,得到的便是最低位上的数,用得到的商再除以该进制则得到次低位上的数,依次循环下去直到得到的商为0;进制转换完毕,可以看出我们得到首先的是最低位,而数据的书写形式是从高位到低位,所以选择栈的存储结构先进后出,得到的余数顺序进栈,等到结束再顺序出栈输出,这时就是我们先要的结果。 2.2括号匹配 括号匹配是对于一组括号的判断,当输入一个左括号时,它就会等待与之相应的右括号出现,如果等来的却是另一个左括号,那么这时最迫切等待的是刚输入的那个左括号,它会等待与之相应的右括号出现。如果等来了与之相应的右括号,那么它得到了匹配,现在迫切等待的是它之前的左括号,可以看出先进去的左括号迫切需要的程度没后来进去的左括号强,后来者居上,我们选择栈的存储结构,先来的括号进栈,栈顶元素是需要程度最强的,得到了匹配则退栈。 2.3文本输入 文本输入是对于文章来说的,而输入文本时时常会出错,当输入特定的字符时我们会删除该行最后的文字,当错误太多时我们会整行删除,输入特定字符时换行。可以看出这些操作都是在文本的最后执行,所以我们也选择栈存储结构,输入一个字符进栈,输入特定的字符1让栈顶元素出栈,输入特定字符2,则将栈清空。如果栈满,则将文本输出,并且置空,接受下一行的文本,直到输入结束。 由于三种功能用到栈的类型一样,所以我们定义一个类型栈就可以了,栈的定义,如下: typedef char status; typedef struct { status *base; status *top; int stacksize; }sqstack;

数据仓库的建立实验一

昆明理工大学信息工程与自动化学院学生实验报告 (2014 —2015 学年第 1 学期) 课程名称:数据库仓库与数据挖掘开课实验室:信自楼4442014 年12月28日 一、实验内容和目的 目的: 1.理解数据库与数据仓库之间的区别与联系; 2.掌握典型的关系型数据库及其数据仓库系统的工作原理以及应用方法; 3.掌握数据仓库建立的基本方法及其相关工具的使用。 二、实验原理及基本技术路线图(方框原理图) 数据库(DataBase,DB)是长期存储在计算机内、有组织的、统一管理的相关数据的集合。DB能为各种用户共享,具有较小的冗余度、数据间联系紧密而又有较高的数据独立性等特点。构成的三要素是数据结构、数据操作、约束性条件。 三、所用仪器、材料(设备名称、型号、规格等) PC机和Microsoft SQL Server 2008 四、实验方法、步骤

1、登录SQL Server 登录名:localhost 2、使用SQL语句构建数据库(1)还原数据库

(2)建立数据 --建立数据 USE cd CREATE DATABASE[DW]ON PRIMARY (NAME=N'DW',FILENAME=N'G:\DW.mdf') LOG ON (NAME=N'DW_log',FILENAME=N'G:\DW_log.ldf') GO (3)建立数据库:数据库→新建数据库 (4)建维表 ①SQL语句 USE DW -------------------------------- --1、建维表 /*1.1 订单方式*/ CREATE TABLE DIM_ORDER_METHOD (ONLINEORDERFLAG INT,DSC VARCHAR(20)) /*1.2 销售人员及销售地区*/ CREATE TABLE DIM_SALEPERSON (SALESPERSONID INT, DSC VARCHAR(20), SALETERRITORY_DSC VARCHAR(50))

数据结构课程设计---括号匹配

目录 1 问题描述 (2) 1.1题目 (2) 1.2问题 (2) 1.3要求 (2) 2 设计 (2) 2.1存储结构设计 (2) 2.2主要算法设计 (3) 2.3测试用例及测试结果 (6) 3 调试报告 (9) 4 对设计和编码的讨论和分析 (20) 4.1设计 (20) 4.2对编码的讨论 (21) 5 总结和体会 (22) 附录一 (24) 本科生课程设计成绩评定表................... 错误!未定义书签。

数据结构课程设计 ——判别括号配对 1问题描述 1.1题目: 判别括号配对 1.2问题: 一个算术表达式含圆括号、中括号、花括号,且它们可任意嵌套使用。写一程序,判断任一算术表达式中所含括号是否正确配对。 1.3要求: (1)表达式从键盘输入。 (2)利用栈求解此问题。 (3)测试用例自己设计。 2设计 2.1存储结构设计 题目要求利用栈来求解此问题,因此选择顺序栈作为存储结构,具体表示如下: #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10

char *base; char *top; int stacksize; }SqStack; 2.2主要算法设计 2.2.1算法思想 (1)文字描述 从键盘输入一个表达式; 逐个扫描表达式中的字符; 当遇到左括号时,将左括号入栈; 继续扫描,将此后遇到的第一个右括号与栈顶元素比较,若匹配,则栈顶元素出栈;否则,继续扫描; 当整个表达式扫描完以后,判断栈内是否还有元素,若有,则括号不匹配; 若栈为空,则括号配对成功; 在括号配对不成功的情况下,利用栈顶栈底元素的差值,可以对左右括号数进行比较。(2)流程图表示

实验二 堆栈和队列基本操作的编程实现

实验二堆栈和队列基本操作的编程实现 【实验目的】 堆栈和队列基本操作的编程实现 要求: 堆栈和队列基本操作的编程实现(2学时,验证型),掌握堆栈和队列的建立、进栈、出栈、进队、出队等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验内容】 内容: 把堆栈和队列的顺序存储(环队)和链表存储的数据进队、出队等运算其中一部分进行程序实现。可以实验一的结果自己实现数据输入、数据显示的函数。 利用基本功能实现各类应用,如括号匹配、回文判断、事物排队模拟、数据逆序生成、多进制转换等。 【思考问题】 1.栈的顺序存储和链表存储的差异? 2.还会有数据移动吗?为什么? 3.栈的主要特点是什么?队列呢? 4.栈的主要功能是什么?队列呢? 5.为什么会有环状队列? 【参考代码】 (一)利用顺序栈实现十进制整数转换转换成r进制 1、算法思想 将十进制数N转换为r进制的数,其转换方法利用辗转相除法,以N=3456,r=8为例转换方法如下: N N / 8 (整除)N % 8(求余) 3456 432 0 低 432 54 0 54 6 6 6 0 6 高 所以:(3456)10 =(6600)8 我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。 算法思想如下:当N>0时重复1,2 ①若N≠0,则将N % r 压入栈s中,执行2;若N=0,将栈s的内容依次出栈,算法结束。 ②用N / r 代替N 2、转换子程序

数据仓库与数据挖掘实验指导书王浩畅资料

数据仓库与数据挖掘
实 验 指 导 书
东北石油大学计算机与信息技术系 王浩畅

实验一 Weka 实验环境初探
一、实验名称: Weka 实验环境初探
二、实验目的: 通过一个已有的数据集,在 weka 环境下,测试常用数据挖掘算法,熟悉 Weka
环境。 三、实验要求
1. 熟悉 weka 的应用环境。 2. 了解数据挖掘常用算法。 3. 在 weka 环境下,测试常用数据挖掘算法。 四、实验平台 新西兰怀卡托大学研制的 Weka 系统 五、实验数据 Weka 安装目录下 data 文件夹中的数据集 weather.nominal.arff,weather.arff
六、实验方法和步骤 1、首先,选择数据集 weather.nominal.arff,操作步骤为点击 Explorer,进入主界 面,点击左上角的“Open file...”按钮,选择数据集 weather.nominal.arff 文件, 该文件中存储着表格中的数据,点击区域 2 中的“Edit”可以看到相应的数据:

选择上端的 Associate 选项页,即数据挖掘中的关联规则挖掘选项,此处要 做的是从上述数据集中寻找关联规则。点击后进入如下界面:
2、现在打开 weather.arff,数据集中的类别换成数字。

选择上端的 Associate 选项页,但是在 Associate 选项卡中 Start 按钮为灰色的, 也就是说这个时候无法使用 Apriori 算法进行规则的挖掘,原因在于 Apriori 算法 不能应用于连续型的数值类型。所以现在需要对数值进行离散化,就是类似于将 20-30℃划分为“热”,0-10℃定义为“冷”,这样经过对数值型属性的离散化, 就可以应用 Apriori 算法了。Weka 提供了良好的数据预处理方法。第一步:选 择要预处理的属性 temperrature

数据结构 实验报告三

实验三的实验报告 学期: 2010 至_2011 第 2 学期 2011年 3月 27日课程名称: 数据结构专业:信息与计算科学 09 级5班实验编号: 03 实验项目:栈和队列实验指导教师 _冯山_姓名:朱群学号: 2009060548 实验成绩: 一实验目的: (1)熟练掌握栈和队列的抽象数据类型及其结构特点; (2)实现基本的栈和队列的基本操作算法程序。 二实验内容:(类C算法的程序实现,任选其一) (1) 设计与实现基本的堆栈和队列结构下的各种操作(如堆栈的PUSH、POP 等操作)(必做); (2)以表达式计算为例,完成一个可以进行算术表达式计算功能的算法设计 与实现(选做); (3)以迷宫问题为例,以堆栈结构完成迷宫问题的求解算法和程序(选做)。三实验准备: 1) 计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分 析与代码设计与分析准备。 四实验步骤: 1.录入程序代码并进行调试和算法分析; 2.编写实验报告。 五实验过程 一设计与实现基本的堆栈结构下的各种操作(如堆栈的PUSH、POP等操作)(1)问题描述 实现堆栈各种基本操作,如Pop,Push,GetTop等操作,即输入数据,通过Push入栈,再通过Pop操作输出出栈的元素,即入栈a,b,c,d,出栈d,c,b,a (2)算法实现及基本思想 堆栈是后进先出的线性表,由Push输入元素,Pop输出元素,堆栈的Push 操作思想,即插入元素e为新的的栈顶元素,先判断栈满与否,追加存储空间,然后将e值赋给栈顶指针Top。输入数据时用for循环 堆栈的Pop操作思想,先判断栈是否为空,若栈不空,则删除栈的栈顶元素,用e返回其值, (3)数据结构 栈的顺序存储结构 Typedef struct {

数据结构实验报告(栈_括号匹配) (1)

数据结构课程设计报告 设计题目:括号匹配 院系计算机学院 年级11 级 学生刘云飞 学号E01114295 指导教师王爱平 起止时间9-7/9-14

课程设计目的 1.熟悉并写出栈的逻辑结构表示 2.实现栈的存储表示 3.实现栈的操作 内容 括号匹配 课程设计要求 1.在实验报告中写出栈的ADT表示; 2.在实验报告中给出数据类型定义和核心算法和程序; 3.在实验报告中罗列实验过程中出现的问题和解决的方法; 4.打包上交调试后的完整程序,提交实验报告; 5.实验之前写出实验报告的大概框架,实验过程中填写完整。 6.实验时携带需要上机调试的程序; 7.实验评分:实验之前预习占20%,实验报告书写情况占50%,运行情况30%。概要设计 1.栈的ADT表示 ADT Stack{ 数据对象:D={ai|ai∈ ElemSet,i=1,2,…,n,n>=0} 数据关系:R1={|ai-1,ai ∈D,i=2,…,n} 约定an为栈顶端,a1为栈底端 基本操作: Status InitStack(&s) 操作结果:构造一个空栈s。 Status Push( &s, e) 初始条件:栈s已经存在。 操作结果:插入元素e为新的栈顶元素。 Status Pop( &s, &e) 初始条件:栈s已经存在,并不为空。 操作结果:删除s的栈顶元素,并用e返回其值。 Status Check( &s, e) 初始条件:栈s已经存在,并不为空。 操作结果:判断括号是否匹配。 Status EnterString( &s) }ADT Stack 2.数据类型定义和核心算法和程序 数据类型定义: typedef int Status;

堆栈应用括号匹配实验

深圳大学实验报告 课程名称:数据结构实验与课程设计 实验项目名称:堆栈应用括号匹配实验 学院:计算机与软件学院 专业:未分 指导教师:杨芳 报告人:姜家祥学号:2013150387 班级:08 实验时间:2013-10-9 实验报告提交时间:2014-10-10 教务处制

一、实验目的 掌握堆栈的基本原理 掌握堆栈的存储结构 掌握堆栈的进栈、弹栈、判断栈空的实现方法 掌握应用堆栈实现括号匹配的原理和实现方法 二、实验要求 熟悉C++语言编程 熟练使用C++语言实现堆栈的进栈Push、插入Pop、判断栈空等操作 熟练使用堆栈实现括号匹配算法 三、实验内容 本次实验有两项内容: (一)堆栈应用括号匹配 1、问题描述 一个算术表达式中包括圆括号、方括号和花括号三种形式的括号 编程实现判别表达式中括号是否正确匹配的算法 2、算法 顺序扫描算术表达式 若算术表达式扫描完成,此时如果栈空,则正确返回(0);如果栈未空,说明左括号多于右括号,返回(-3) 从算术表达式中取出一个字符,如果是左括号(‘(‘或‘[‘或‘{‘),则让该括号进栈(PUSH) 如果是右括号(‘)‘或‘]‘或‘}‘): ⑵ 、如果栈为空,则说明右括号多于左括号,返回(-2) ⑵、如果栈不为空,则从栈顶弹出(POP)一个括号:若括号匹配,则转1继续进行判断;否则,说明左右括号配对次序不正确,返回(-1) 3、输入 第一行:样本个数,假设为n。 第二到n+1行,每一行是一个样本(算术表达式串),共n个测试样本。 4、输入样本 4 {[(1+2)*3]-1} {[(1+2]*3)-1} (1+2)*3)-1} {[(1+2)*3-1] 5、输出 共有n行,每一行是一个测试结果,有四种结果: 0:左右括号匹配正确{[(1+2)*3]-1}

数据挖掘实验报告资料

大数据理论与技术读书报告 -----K最近邻分类算法 指导老师: 陈莉 学生姓名: 李阳帆 学号: 201531467 专业: 计算机技术 日期 :2016年8月31日

摘要 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地提取出有价值的知识模式,以满足人们不同应用的需要。K 近邻算法(KNN)是基于统计的分类方法,是大数据理论与分析的分类算法中比较常用的一种方法。该算法具有直观、无需先验统计知识、无师学习等特点,目前已经成为数据挖掘技术的理论和应用研究方法之一。本文主要研究了K 近邻分类算法,首先简要地介绍了数据挖掘中的各种分类算法,详细地阐述了K 近邻算法的基本原理和应用领域,最后在matlab环境里仿真实现,并对实验结果进行分析,提出了改进的方法。 关键词:K 近邻,聚类算法,权重,复杂度,准确度

1.引言 (1) 2.研究目的与意义 (1) 3.算法思想 (2) 4.算法实现 (2) 4.1 参数设置 (2) 4.2数据集 (2) 4.3实验步骤 (3) 4.4实验结果与分析 (3) 5.总结与反思 (4) 附件1 (6)

1.引言 随着数据库技术的飞速发展,人工智能领域的一个分支—— 机器学习的研究自 20 世纪 50 年代开始以来也取得了很大进展。用数据库管理系统来存储数据,用机器学习的方法来分析数据,挖掘大量数据背后的知识,这两者的结合促成了数据库中的知识发现(Knowledge Discovery in Databases,简记 KDD)的产生,也称作数据挖掘(Data Ming,简记 DM)。 数据挖掘是信息技术自然演化的结果。信息技术的发展大致可以描述为如下的过程:初期的是简单的数据收集和数据库的构造;后来发展到对数据的管理,包括:数据存储、检索以及数据库事务处理;再后来发展到对数据的分析和理解, 这时候出现了数据仓库技术和数据挖掘技术。数据挖掘是涉及数据库和人工智能等学科的一门当前相当活跃的研究领域。 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地抽取出有价值的知识模式,以满足人们不同应用的需要[1]。目前,数据挖掘已经成为一个具有迫切实现需要的很有前途的热点研究课题。 2.研究目的与意义 近邻方法是在一组历史数据记录中寻找一个或者若干个与当前记录最相似的历史纪录的已知特征值来预测当前记录的未知或遗失特征值[14]。近邻方法是数据挖掘分类算法中比较常用的一种方法。K 近邻算法(简称 KNN)是基于统计的分类方法[15]。KNN 分类算法根据待识样本在特征空间中 K 个最近邻样本中的多数样本的类别来进行分类,因此具有直观、无需先验统计知识、无师学习等特点,从而成为非参数分类的一种重要方法。 大多数分类方法是基于向量空间模型的。当前在分类方法中,对任意两个向量: x= ) ,..., , ( 2 1x x x n和) ,..., , (' ' 2 ' 1 'x x x x n 存在 3 种最通用的距离度量:欧氏距离、余弦距 离[16]和内积[17]。有两种常用的分类策略:一种是计算待分类向量到所有训练集中的向量间的距离:如 K 近邻选择K个距离最小的向量然后进行综合,以决定其类别。另一种是用训练集中的向量构成类别向量,仅计算待分类向量到所有类别向量的距离,选择一个距离最小的类别向量决定类别的归属。很明显,距离计算在分类中起关键作用。由于以上 3 种距离度量不涉及向量的特征之间的关系,这使得距离的计算不精确,从而影响分类的效果。

数据结构实验六 堆栈实验

一,实验题目 实验六堆栈实验 设计算法,把一个十进制整数转化为二进制数输出。 二,问题分析 本程序要求将一个十进制整数转化为二进制数输出。完成此功能所要解决的问题是熟练掌握和运用入栈和出栈操作,实现十进制整数转化为二进制数。 (1)数据的输入形式和输入值得范围:输入的是一个十进制整数,且其为正整数。 (2)结果的输出形式:输出的是一个二进制整数 (3)测试数据:1)9 2)4500 三,概要设计 1.为了实现上述程序功能,需要: 构造一个空的顺序栈s 将十进制整数除以2的余数入栈 将余数按顺序出栈 2.本程序包含7个函数: 1)主函数main(); 2)顺序栈判栈空函数stackempty(seqstack *s) 3)顺序栈置空栈函数seqstack *initstack(seqstack *s) 4)顺序栈入栈函数push(seqstack *s,int x) 5)顺序栈出栈函数pop(seqstack *s) 6)顺序栈取栈顶元素函数gettop(seqstack *s) 7)将十进制数转换为二进制数函数setnum(int num) 各函数间关系如下:

四,详细设计 1,顺序表的结构类型定义: typedef struct{ int data[maxlen]; int top; }seqstack; 2,顺序栈入栈函数的伪代码: void push(seqstack *s,int x){ if(s->top<=maxlen-1&&s->top>=-1){ s->top++; s->data[s->top]=x;} else printf("error");} 3,顺序栈出栈函数的伪代码: void pop(seqstack *s){ if(s->top>=0) s->top--; else printf("error"); } 4,将十进制数转换为二进制数函数伪代码: void setnum(int num){ seqstack s; initstack(&s); while(num){ int k=num%2; push(&s,k); num=num/2;} while(!stackempty(&s)){ int x=gettop(&s); printf("%d",x); pop(&s); } } 五,源代码 #include "stdio.h" #define maxlen 100 typedef struct{ //定义顺序栈的结构类型 int data[maxlen]; int top; }seqstack; int stackempty(seqstack *s){ //顺序栈判栈空算法if(s->top>=0) return 0; else return 1; } seqstack *initstack(seqstack *s){ //顺序栈置空栈算法s->top=-1; return s; }

括号匹配检验

括号匹配检验,是假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即( [ ] ( ) )或[ ( [ ] )]等为正确的格式,[ ( ] )或( [ ( ))或( ( ) ] )均为不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”概念来描述。整个处理过程与栈的特点相吻合。因此此程序利用链表的头插法特点来完成。 #include "stdlib.h" #include "stdio.h" typedef struct Stack { char ch; struct Stack *next; }Stack,*StackList; char checkinput() /*检查输入数据的合理性*/ { char c; while(1) { printf("input the bracket:"); scanf("%c",&c); getchar(); if(c=='('||c==')'||c=='['||c==']') /*程序的有效性检测*/ break; else { printf("you input wrong! please input again!\n"); continue; } } return c; } int InitStack() /*创建栈的实例*/ { StackList L,s,t; char c; int i=0,n=0; L=(Stack*)malloc(sizeof(Stack));/*创建链表*/ L->next=NULL; while(1)

c=checkinput(); switch(c) { case '(': case '[': s=(Stack*)malloc(sizeof(Stack)); s->ch=c; s->next=L->next; /*头插法实现“栈”的功能*/ L->next=s; i=++n; /*n用来记录压入栈里的凡是左括号的数目*/ break; case ')': case ']': if(i==0) return 0; /*i用来判断第一次输入的括号是否为右括号,是则退出程序*/ t=L->next; if(t->ch+1==c) /*检查是否为'('和')',用他们的ACSII码值来检测*/ { L->next=t->next; /*匹配则删除栈顶元素*/ n--; printf("此项%c括号匹配!\n",t->ch); free(t); } else if(t->ch+2==c) /*检查是否为'['和']'*/ { L->next=t->next; /*匹配则删除栈顶元素*/ n--; printf("此项%c括号匹配!\n",t->ch); free(t); } else return 0; /*此语句判断输入两个括号后不匹配的结果,如'['和')'*/ break; } if(n==0) return 1; }

数据仓库与数据挖掘实验报告

数据仓库与数据挖掘 实验报告 姓名:岩羊先生 班级:数技2011 学号:XXXXXX 实验日期:2013年11月14日

目录 实验 ........................................................................................................................ 错误!未定义书签。 【实验目的】....................................................................................... 错误!未定义书签。 1、熟悉SQLservermanager studio和VisualStudio2008软件功能和操作特点; ................................................................................................................ 错误!未定义书签。 2、了解SQLservermanager studio和VisualStudio2008软件的各选项面板和 操作方法; .............................................................................................. 错误!未定义书签。 3、熟练掌握SQLserver manager studio和VisualStudio2008工作流程。错误! 未定义书签。 【实验内容】....................................................................................... 错误!未定义书签。 1.打开SQLserver manager studio软件,逐一操作各选项,熟悉软件功能; (4) 2.根据给出的数据库模型“出版社销售图书Pubs”优化结构,新建立数据库并导 出; (4) 3.打开VisualStudio2008,导入已有数据库、或新建数据文件,设计一个“图书 销售分析”的多维数据集模型。并使用各种输出节点,熟悉数据输入输出。 (4) 【实验环境】....................................................................................... 错误!未定义书签。 【实验步骤】....................................................................................... 错误!未定义书签。 1.打开SQL Server manager studio; (5) 2.附加备份的数据库文件pubs_DW_Data.MDF和pubs_DW_Log.LDF并且做出

数据结构实验报告栈进制转换

数据结构试验报告栈的应用——进制转换程序

if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) ); if(!s->base) { exit(OVERFLOW); } s->top=s->base + STACKINCREMENT; } * s->top ++ = *e; return OK; } 3.出栈程序 int Pop(Stack *s , int *e) { if(s->top == s->base) { return ERROR; } *e = * -- s->top; return OK;

} 4.主函数与进制转化 void main() { int N; int a; int e; Stack s; InitStack(&s); Pop(&s , &e); Push(&s ,&e); InitStack(&s); printf("请输入十进制数:"); scanf("%d",&N); printf("要将N转化为几进制"); scanf("%d",&a); while(N) { e=N%a; Push( &s , &e ); N = N / a ; }

int *base; int *top; int stacksize; }Stack; int InitStack(Stack *s) { s->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!s->base) { exit(OVERFLOW); } s->top=s->base; s->stacksize=STACK_INIT_SIZE; return OK; } int Push(Stack *s , int *e) { if(s->top - s->base >= STACK_INIT_SIZE) { s->base=(int *)realloc(s->base , (s->stacksize + STACKINCREMENT) * sizeof(int) );

括号匹配问题源代码(C语言)

括号匹配问题就是给定任意判别式,然后检验括号的配对出现的情况。 可见输入的表达式有四种可能性:右括号配对次序不正确、右括号多于左括号、左括号多于右括号、左右括号匹配正确。可以先检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。程序流程图如下:

程序代码如下: #include #include #include #include #define MaxSize 50 using namespace std; /*------------主要的数据结构类型 --------------*/ struct Text { int top; char Szstack[MaxSize]; }; /*-------------程序功能模块函数-------------*/ //检验栈是否为空 bool IsEmpty(Text G) { if(G.top==-1) return true; else return false; } //检验栈是否为满 bool IsFull(Text G) { if(G.top==MaxSize-1) return true; else return false; } //弹出栈顶元素 char Pop(Text G) { char n=G.Szstack[G.top]; return n; } //检验括号是否配对 int Check(char *A) { int i; Text G; G.top=-1; int L=strlen(A);

利用顺序栈实现括号匹配 c语言

#include #include //malloc,realloc #include //含有overflow #include //exit() #define S_SIZE 100 //栈的空间大小 #define STACKINCREAMENT 10//增加空间 struct SqStack{ int *base; //栈底 int *top; //栈顶 int stacksize; //栈当前的存储空间 }; void main() {//子函数声明 void InitStack(SqStack &S);//初始化空栈 int StackEmpty(SqStack S);//判空 void push(SqStack &S,int e);//进栈 void pop(SqStack &S,int &e);//出栈 //主函数开始 SqStack s;//初始化空栈 InitStack(s); char ch[100],*p;int e; p=ch; printf("输一个含义有()[]{}的括号表达式:\n"); gets(ch); while(*p) { switch (*p) { case '{': case '[': case '(': push(s,*p++);break;//只要是左括号就入栈 case '}': case ']': case ')':pop(s,e); if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')')) p++; else {printf("括号不匹配!");exit(OVERFLOW);} break; default :p++;//其他字符就后移 } } if (StackEmpty(s)) printf("括号匹配成功");

数据仓库实验报告

数据仓库与数据挖掘上机实验报告 实验目的:学习Analysis Services的操作 实验内容: 浏览SQL Server 2000 Analysis Services 随机教程;规划需求分析;仓库设计;建立分析数据库,设置数据源;建立多维数据库(Cube);设置多维数据库的数据存储方式及访问权限实验分析: 下面进行实验,建立多维数据库(使用Northwind数据库),先用数据清洗转换,将需要的表从源库转换到新数据库,为数据仓库提供需要的数据,要形成的维表有Products,Category,Employees,Dates,Facts(事实表),在实验二中Products和Category将组成雪花架构的维表。 实验过程:建立多维数据库 内容:建立多维数据库(cube),要建立事实表Facts和维表Products,Categories,Employees,Dates,设置多维数据库的数据存储方式 目的:学会建立事实表,度量,时间维度,雪花表,使用数据存储方式 步骤: 1) 设置数据源,建立myNorthwind数据库。 2) 建立多维数据集的事实表,使用Analysis Server的向导。此时显示刚才选中的myNorthwind数据集,还有一个系统自带的FoodMart数据集。向导提示选择事实数据表,在这里我们选好了Facts表作为事实表。

*在下一步用了定义度量值的数据中选择TotalPrice,UnitPrice,Quantity,Discount作为度量,度量值的选择与决策者关心的项目有关。在这里假设决策者关心的是价格对销量产生的影响,从这些数据中可以得出进一步的经营方针。 3)定义好事实表后,我们要建立cube的维度表 ①选择维度的创建方式,维度表的结构有星型架构,雪花架构等等,在本实验中,只用到前两个架构,因为本实验中根本没必要用到其他的结构。而雪花架构的运用也只是用于学习和研究,在实际中,如此简单的数据仓库结构也不需要雪花架构,因为它会降低系统的性能。

括号匹配的检查 课程设计

衡阳师范学院 《C语言数据结构》 课 程 设 计 报 告 题目:括号匹配的检验 班级: 1 1 0 1 学号: 作者姓名: 指导教师: 2012年11月

目录 1设计题目与要求 (3) 1.1实验目的 (3) 1.2问题描述 (3) 1.3设计要求 (3) 2总体设计思想及相关知识 (3) 2.1总体设计思想 (3) 2.2开发环境与工具 (4) 3功能设计 (4) 3.1 抽象数据类型的定义 (4) 3.2 栈的基本运算 (4) 3.3栈的基本操作的实现 (4) 3.4模块流程图 (6) 4源程序代码 (6) 5测试及结果 (9) 6总结 (11) 7小组成员任务分配 (11) 参考文献 (12)

1.设计题目与要求 1.1实验目的 通过对括号匹配的检验的程序设计编写,深入了解和掌握栈的使用,了解栈先进后出的特点,掌握栈的表示和实现。 1.2问题描述 假设表达式中允许包括两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(])或(()])均为不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。例如考虑下列括号序列:[ ( [ ] [ ] ) ] 1 2 3 4 5 6 7 8 当计算机接受了第一个括号后,它期待着与其匹配的第八个括号的出现,然而等来的却是第二个括号,此时第一个括号只能暂时靠边,而迫切等待与第二个括号相匹配的,第七个括号的出现,类似的,因等来的第三个括号,其期待的匹配程度较第二个括号更急迫,则第二个括号也只能靠边,让位于第三个括号,显然第二个括号的期待急迫性高于第一个括号;在接受了第四个括号后,第三个括号的期待得到满足,消解之后,第二个括号的期待匹配成了当前最急迫的任务了,······,依次类推。可见,这个处理过程恰与栈的特点相吻合。 1.3设计要求 读入圆括号和方括号的任意序列,输出“匹配”或“此串括号匹配不合法”。2.总体设计思想及相关知识 2.1总体设计思想 最内层(最迟出现)的左括号必须与最内层(最早出现)的同类右括号匹配,它最期待着急迫的配对。配对之后,期待得以消除。因此为左括号设置一个栈,置于栈顶的左括号期待配对的急切程度最高。另外,在算法的开始和结束时,栈都应该是空的。例如:[()[]]、 ([{}]) 、{([]]}

括号匹配问题

实验报士 括 号匹配问 题

一、实验目的: 1、熟练掌握数据结构基本知识; 2、通过括号匹配的实验,了解栈的表示和栈的基本操作,掌握栈“后进先出”的特性并能够应用这一特性。 二、实验工具:C-Free 三、实验内容: 设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如 ([( }]) 或({([][ ( ) ] ) } )等均为正确格式,而({[] )、{[()] 或([]} 等均 不正确。在算法中可设置一个栈,每读入一个括号,若是左括号,则直接入栈,等待相匹配的同类右括号;若读入的是右括号,且与当前栈顶的左括号同类型,则二者匹配将栈顶的左括号出栈,否则属于不合法情况。另外,如果输入序列已读完,而栈中仍有等待匹配的左括号,或者读入了一个右括号,而栈中已无等待匹配的同类型的左括号,均属不合法情况。当输入序列和栈同时为空时,说明所有括号完全匹配。 四、实验过程: #include #include #define STACKINCREAMENT 10 #define STACK_INIT_SIZE 100 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef int status; typedef char SElemtype; typedef struct { SElemtype *base; SElemtype *top; status stacksize; }sqstack; status Init(sqstack *s) { s->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype)); if(!s->base) exit(OVERFLOW); s->top = s->base; s->stacksize = STACK_INIT_SIZE ; return OK; } status push(sqstack *s, SElemtype e) {

相关主题
文本预览
相关文档 最新文档