栈实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京建筑大学
理学院《数据结构与算法》课程实验报告
课程名称《数据结构与算法》实验名称栈的创建以及应用实验地点基C-419日期_2015-4-25
姓名李若万班级信131学号201307010135指导教师毕靖成绩
【实验目的】
1.熟悉并写出栈的逻辑结构表示
2.实现栈的存储表示
3.实现线性表的操作
【实验内容】
DestroyStack(&S)//销毁栈
}
2、数据结构的定义:
typedef struct //定义结构体
{selemtype *base; //定义栈底指针
selemtype *top; //定义栈顶指针
int stacksize; //定义栈的大小
} sqstack; //sqstack为结构体类型
{
s->base=(Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE ;
return OK;
}
status Gettop(sqstack *s,Elemtype e)
1.括号匹配
【实验要求】
1.要求:在实验报告中写出栈的ADT表示;
2.在实验报告中给出数据类型定义和核心算法和程序;
3.在实验报告中罗列实验过程中出现的问题和解决的方法;
4.打包上交调试后的完整程序,提交实验报告;
5.实验之前写出实验报告的大概框架,实验过程中填写完整。
6.实验时携带需要上机调试的程序;
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
typedef struct
{
Elemtype *base;
Elemtype *top;
status stacksize;
}sqstack;
status Init(sqstack *s)
scanf("%c",&enter);
Parenthesis_match(&s,str);
getch();
}
4、运行结果截图:
s->top=s->base;
return OK;
}
status Parenthesis_match(sqstack *s,char *str)
{int i=0,flag=0;
Elemtype e;
while(str[i]!='\0')
{
switch(str[i])
{
case '(':push(s,str[i]);break;
3、设定好的小中括号可以正常按代码运行,若遇到其他的大括号和数字等,也可以运行匹配成功,问题没有得到解决。
【实验结果】
1、ADT表示:
ADT Stack{
InitStack(&S)//构造一个空栈S
GetTop(S,&e)//取栈顶元素
Push(&S,e)//插入新的栈顶元素
Pop(&S,&e)//删除栈顶元素
{ห้องสมุดไป่ตู้
if(s->top==s->base) return ERROR;
e=*(s->top-1);
return OK;
}
status push(sqstack *s,Elemtype e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(Elemtype *)realloc(s->base,(s->stacksize+STACKINCREAMENT)*sizeof(Elemtype));
7.实验评分:实验之前预习占20%,实验报告书写情况占50%,运行情况30%。
【实验步骤】
实验中出现的问题以及解决方法:
1、代码里面用到getch()报错,后来在前面提前声明头文件#include<conio.h>可以运行。
2、不知道怎么实验括号的匹配检验,通过查资料了解到括号匹配检验的实现需要用switch,case,break,default等等语句来实现。
*e=*--s->top;
return OK;
}
status stackempty(sqstack *s)
{if(s->top==s->base)
return OK;
return ERROR;
}
status clearstack(sqstack *s)
{
if(s->top==s->base) return ERROR;
if(!s->base)exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREAMENT;
}
*s->top++=e;
return OK;
}
status pop(sqstack *s,Elemtype *e)
{if(s->top==s->base) return ERROR;
case '[':push(s,str[i]);break;
case ')':{pop(s,&e);if(e!='(') flag=1;}break;
case ']':{pop(s,&e);if(e!='[')flag=1;}break;
default:break;
}
if(flag)break;
i++;
}
if(!flag&&stackempty(s))
printf("匹配成功!\n");
else
printf("匹配失败!\n");
return OK;
}
void main()
{
char str[100],enter;
sqstack s;
Init(&s);
printf("请输入括号组:");
scanf("%s",str);
3、核心算法与代码:
#define STACKINCREAMENT 10
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int status ;
typedef char Elemtype;
理学院《数据结构与算法》课程实验报告
课程名称《数据结构与算法》实验名称栈的创建以及应用实验地点基C-419日期_2015-4-25
姓名李若万班级信131学号201307010135指导教师毕靖成绩
【实验目的】
1.熟悉并写出栈的逻辑结构表示
2.实现栈的存储表示
3.实现线性表的操作
【实验内容】
DestroyStack(&S)//销毁栈
}
2、数据结构的定义:
typedef struct //定义结构体
{selemtype *base; //定义栈底指针
selemtype *top; //定义栈顶指针
int stacksize; //定义栈的大小
} sqstack; //sqstack为结构体类型
{
s->base=(Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
if(!s->base) exit(OVERFLOW);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE ;
return OK;
}
status Gettop(sqstack *s,Elemtype e)
1.括号匹配
【实验要求】
1.要求:在实验报告中写出栈的ADT表示;
2.在实验报告中给出数据类型定义和核心算法和程序;
3.在实验报告中罗列实验过程中出现的问题和解决的方法;
4.打包上交调试后的完整程序,提交实验报告;
5.实验之前写出实验报告的大概框架,实验过程中填写完整。
6.实验时携带需要上机调试的程序;
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
typedef struct
{
Elemtype *base;
Elemtype *top;
status stacksize;
}sqstack;
status Init(sqstack *s)
scanf("%c",&enter);
Parenthesis_match(&s,str);
getch();
}
4、运行结果截图:
s->top=s->base;
return OK;
}
status Parenthesis_match(sqstack *s,char *str)
{int i=0,flag=0;
Elemtype e;
while(str[i]!='\0')
{
switch(str[i])
{
case '(':push(s,str[i]);break;
3、设定好的小中括号可以正常按代码运行,若遇到其他的大括号和数字等,也可以运行匹配成功,问题没有得到解决。
【实验结果】
1、ADT表示:
ADT Stack{
InitStack(&S)//构造一个空栈S
GetTop(S,&e)//取栈顶元素
Push(&S,e)//插入新的栈顶元素
Pop(&S,&e)//删除栈顶元素
{ห้องสมุดไป่ตู้
if(s->top==s->base) return ERROR;
e=*(s->top-1);
return OK;
}
status push(sqstack *s,Elemtype e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(Elemtype *)realloc(s->base,(s->stacksize+STACKINCREAMENT)*sizeof(Elemtype));
7.实验评分:实验之前预习占20%,实验报告书写情况占50%,运行情况30%。
【实验步骤】
实验中出现的问题以及解决方法:
1、代码里面用到getch()报错,后来在前面提前声明头文件#include<conio.h>可以运行。
2、不知道怎么实验括号的匹配检验,通过查资料了解到括号匹配检验的实现需要用switch,case,break,default等等语句来实现。
*e=*--s->top;
return OK;
}
status stackempty(sqstack *s)
{if(s->top==s->base)
return OK;
return ERROR;
}
status clearstack(sqstack *s)
{
if(s->top==s->base) return ERROR;
if(!s->base)exit(OVERFLOW);
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREAMENT;
}
*s->top++=e;
return OK;
}
status pop(sqstack *s,Elemtype *e)
{if(s->top==s->base) return ERROR;
case '[':push(s,str[i]);break;
case ')':{pop(s,&e);if(e!='(') flag=1;}break;
case ']':{pop(s,&e);if(e!='[')flag=1;}break;
default:break;
}
if(flag)break;
i++;
}
if(!flag&&stackempty(s))
printf("匹配成功!\n");
else
printf("匹配失败!\n");
return OK;
}
void main()
{
char str[100],enter;
sqstack s;
Init(&s);
printf("请输入括号组:");
scanf("%s",str);
3、核心算法与代码:
#define STACKINCREAMENT 10
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int status ;
typedef char Elemtype;