当前位置:文档之家› 堆栈应用括号匹配实验

堆栈应用括号匹配实验

堆栈应用括号匹配实验
堆栈应用括号匹配实验

深圳大学实验报告

课程名称:数据结构实验与课程设计

实验项目名称:堆栈应用括号匹配实验

学院:计算机与软件学院

专业:未分

指导教师:杨芳

报告人:姜家祥学号: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}

-1:左右括号配对次序不正确{[(1+2]*3)-1}

-2:右括号多于左括号(1+2)*3)-1}

-3:左括号多于右括号{[(1+2)*3-1]

6、输出样本

-1

-2

-3

(二)数制转换

1、问题描述

对于任意十进制数转换为k进制,包括整数部分和小数部分转换。整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换

整数部分19,小数部分0.125

19 / 2 = 9 ... 10.125 * 2 = 0.25 0

9 / 2 = 4 ... 10.25 * 2 = 0.5 0

4 / 2 = 2 ... 0 0.5 * 2 = 1 (1)

2 / 2 = 1 0

1 / 2 = 0 (1)

所以整数部分转为 10011,小数部分转为0.001,合起来为10011.001

提示整数部分可用堆栈,小数部分可用队列实现

注意:必须按照上述方法来实现数制转换,其他方法0分

2、输入

第一行输入一个t,表示下面将有t组测试数据。

接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;k表示要转换的数制,1

3、输出

对于每一组测试数据,每行输出转换后的结果,结果精度到小数点后3位

4、输入样本

2

19.125 2

15.125 16

5、输出样本

10011.001

F.200

四、程序清单

#include

using namespace std;

#include

#define Max_Size 100

typedef struct Stack{ //定义栈char base[Max_Size];

int top;

}Stack;

void InitStack(Stack &S){ //构造空栈S.top=0;

}

int Push(Stack &S,char ch){ //元素进栈S.top++;

S.base[S.top]=ch;

return 1;

}

int Pop(Stack &S,char ch){ //元素出栈S.top--;

ch=S.base[S.top];

return 1;

}

int Empty(Stack &s,int n){

if(s.top==0){

return 1;}

else{

return 0;}}

int Pipei(Stack &S,string S1){ //匹配

int i,m=0,n=0,num=0,num1=0; char c,ch,ch1,ch2[100];

InitStack(S);

for(i=0;i

c=S1[i];

if(c=='('||c==')'||c=='{'||c=='}'||c=='['||c==']')

ch2[m++]=c;

}

//把字符组S1的括号复制到ch2中

for(i=0;i<=m-1;i++){

ch=ch2[i];

if(ch=='('||ch=='{'||ch=='[')

Push(S,ch);//左括号,进栈

if(ch==')'||ch=='}'||ch==']'){

num1++;

if((ch==')'&&S.base[S.top]=='(')||(ch=='}'&&S.base[S.top]=='{')||(ch==']'&&S.base[S.top]== '['))

Pop(S,ch1);//右括号匹配栈顶左括号,左括号出栈

else{

i=m-1;

return -1;

}//左右括号不匹配

if(Empty(S,n)&&i

return -2;//右括号多于左括号

}

}

if(!Empty(S,n))//左括号多于右括号

return -3;

if(Empty(S,n))//左右括号匹配

return 0;

}

int main(){

Stack S;

string P;

int t,x;

//freopen("cin.txt","r",stdin);

cin>>t;

while(t--)

{

cin>>P;

x=Pipei(S,P);

cout<

}

return 0;

}

******************************************************************************* #include

using namespace std;

#define Max_Value 100

typedef struct Num{

int base[Max_V alue];

int top;

}Num;

void InitNum(Num &S){

S.top=0;

}

int Push(Num &S,int a ){

if(S.top>=Max_Value)

return -1;

S.top++;

S.base[S.top]=a;

return 1;

}

int Pop(Num &S,int &a){

if(S.top<=0)

return -1;

a=S.base[S.top];

S.top--;

return 1;

}

int Empty(Num &S){

if(S.top==0)

return 1;

else

return 0;

}

void Num_1(Num &S,int a,int k){

InitNum(S);

int e;

while(a){

Push(S,a%k);

a=a/k;}

while(!Empty(S)){

Pop(S,e);

if(e>=10)

cout<

else

cout<

}

void Num_2(Num &S,double a,int k){

InitNum(S);

int b,i,e,j=0;

for(i=0;i<3;i++){

Push(S,a*k);

b=a*k;

a=a*k-b;

}

for(j=1;j<=3;j++){

if(S.base[j]>=10)

cout<

else

cout<

}

}

int main(){

int t,k,m;

double a,n;

Num S;

//freopen("cin1.txt","r",stdin);

cin>>t;

while(t--){

cin>>a>>k;

m=a;

n=a-m;

Num_1(S,m,k);

cout<<".";

Num_2(S,n,k);

cout<

}

return 0;}

五、程序运行时截图

六、实验心得与体会(实验中遇到的问题及解决方案,或写点感想)

对于第一题,感觉还好,就是有时候感觉有点混,第二题较麻烦,问题大大小小不断,慢慢调试,查看,百度

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 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

数据结构实验报告(栈_括号匹配) (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 种距离度量不涉及向量的特征之间的关系,这使得距离的计算不精确,从而影响分类的效果。

括号匹配检验

括号匹配检验,是假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即( [ ] ( ) )或[ ( [ ] )]等为正确的格式,[ ( ] )或( [ ( ))或( ( ) ] )均为不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”概念来描述。整个处理过程与栈的特点相吻合。因此此程序利用链表的头插法特点来完成。 #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; }

C++栈实现括号匹配

//本程序以经亲测,在VS2008中复制即可实现。 // Stack_made_by_zrz.cpp : 定义控制台应用程序的入口点。 //括号匹配问题。利用栈来解决一个字符串之中使用的括号是否匹配的问题。 /* 在表达式中,相同类型的括号(包括:()、[ ]、{})是成对出现的,并且当括号在表达式中嵌套时,不允许出现交叉现象。 检验括号匹配的方法,就是对给定的字符串依次检验:若是左括号,入栈;若是右括号,出栈一个左括号判断是否与之匹配; 是其他字符,不检验。检验到字符串尾,还要检查栈是否为空。只有栈空,整个字符串才是括号匹配的。 */ #include"stdafx.h" #include #include #include using namespace std; #define stacksize 100 //定义栈的空间大小 struct stack{ //定义栈的结构体 char strstack[stacksize];//定义栈的存储格式为字符型 int top; //定义栈的栈顶变量 }; void InitStack(stack &s){ //定义一个新栈s,初始化栈顶为-1 s.top = -1; } char Push(stack &s, char a){ //入栈操作,将字符a入栈s if (s.top == stacksize - 1) //当栈顶为栈的空间大小-1,栈满 return 0; s.top ++;//入栈操作一次,栈顶+1 s.strstack[s.top] = a;//此时,栈顶元素为字符a return a; } char Pop(stack &s ){ //出栈操作 if (s.top == -1) //当栈顶为-1时,栈空 return 0; char a = s.strstack[s.top];//将栈顶元素赋予字符a,并返回字符a,完成出栈操作 s.top--; return a; } int Empty(stack &s,int re){ //定义判断栈是否为空的函数 if(s.top==-1) return 1;//栈为空时返回值为 else return 0;//栈不为空时返回值为 } int Check(char* str){ //检验括号是否匹配的函数 stack s;

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

数据仓库与数据挖掘 实验报告 姓名:岩羊先生 班级:数技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并且做出

括号匹配问题源代码(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("括号匹配成功");

实验二 栈与队列操作实验题目

实验二栈与队列操作 实验目的: (1)理解栈与队列的结构特征和运算特征,以便在实际问题背景下灵活运用。 (2)了解复杂问题的递归算法设计。 本次实验中,下列实验项目选做一。 1、顺序栈的基本操作 [问题描述] 设计算法,实现顺序栈的各种基本操作 [基本要求] (1)初始化栈s。 (2)从键盘输入10个字符以$结束,建立顺序栈。 (3)从键盘输入1个元素,执行入栈操作。 (4)将栈顶元素出栈。 (5)判断栈是否为空。 (6)输出从栈顶到栈底元素。 要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。 2、链栈的基本操作 [问题描述] 设计算法,实现链栈的各种基本操作 [基本要求] (1)初始化栈s。 (2)从键盘输入10个字符以$结束,建立带头结点的链栈。 (3)从键盘输入1个元素,执行入栈操作。 (4)完成出栈操作。 (5)判断栈是否为空。 (6)输出从栈顶到栈底元素。 (7)输出链栈的长度。 要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。 3、循环队列的基本操作 [问题描述] 设计算法,实现循环顺序队列的建立、入队、出队等操作。 [基本要求] (1)从键盘输入10个字符以$结束,建立循环队列,并显示结果。 (2)从键盘输入1个元素,执行入队操作,并显示结果。 (3)将队头元素出队,并显示结果。 (4)要求程序通过一个主菜单进行控制,在主菜单界面通过选择菜单项的序号来调用各功能函数。

4、只用尾指针表示的循环链表队列的综合操作 [问题描述] 假设以带头结点的的循环链表表示队列,并且只设一个指针指向队尾元素的结点(注意不设头指针),试编写队列初始化、入队、出队函数。 [基本要求及提示] (1)首先定义链表结点类型。 (2)编写带头结点的循环链表的初始化函数,只用尾指针表示。 (3)编写入队函数、出队函数。 (4)在主函数中编写菜单(1.初始化;2.入队;3.出队;4.退出),调用上述功能函数。 5、用标志域表示队空队满状态的循环队列的综合操作 [问题描述] 要求循环队列不损失一个空间全部都得到利用,设置一个标志域tag,以0和1来区分当队头与队尾指针相同时队列状态的空和满,试编写与此结构相对应的入队和出队操作。 [基本要求及提示] (1)教材中为区分当队头与队尾指针相同时队列状态的空和满,以牺牲一个空间的代价来实现的,空:Q->front==Q->rear,满:(Q->rear+1)%MAXSIZE==Q->front。 (2)本题不损失一个空间全部都得到利用,为此如下定义循环队列类型: Typedef struct { QueueElementType element[MAXSIZE]; int front; int rear; int tag; }SeqQueue; 此时,循环队列空和满的条件分别为: Q->front==Q->rear&&tag==0 和 Q->front==Q->rear&&tag==1 (3)编写入队函数、出队函数。 (4)在主函数中编写菜单(1.入队;2.出队;3.退出),调用上述功能函数。 6、利用辅助数组进行栈的逆置 [问题描述] 利用辅助栈将栈中的元素逆置。 [基本要求及提示] 在主函数中编写菜单(1.入栈;2.出栈;3.逆置;4.退出)调试运行程序。 7、利用辅助栈进行队列的逆置 [问题描述] 利用辅助栈进行队列元素逆置。 [基本要求及提示] 在主函数中编写菜单(1.入队;2.出队;3.逆置;4.退出)调试运行程序。 8、Hanoi塔问题

数据仓库实验报告

数据仓库与数据挖掘上机实验报告 实验目的:学习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) {

用栈实现括号匹配的检验 修改

用栈实现括号匹配的检验修改(2008-11-14 19:06:31) 标签:c语言编程turbo c2.0环境实现栈括号匹配it 分类:C语言编程例子数据结构C 语言版 括号匹配问题是编译程序时经常遇到的问题,用以检测语法是否有错。 本文前些天写的用栈实现括号匹配的检验的代码中,其中用了更少变量的代码二有些错误,使得结果总是match,经过修改,现将正确的代码写出,如下 #include #include #define OVERFLOW -1 #define OK 1 #define ERROR 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define NULL 0 typedef char SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(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 DestroyStack(SqStack *S) { free((*S).base); (*S).base=NULL; (*S).top=NULL;

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