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

时间:2024.3.31

北京建筑工程学院

理学院《数据结构与算法》课程      实验报告

课程名称《数据结构与算法》   实验名称 栈的创建以及应用实验地点机房203   日期_2012/4/3

姓名         班级         学号           指导教师          成绩_______

l  熟悉并写出栈的逻辑结构表示

l  实现栈的存储表示

l  实现栈的操作

【实验内容】

l  括号匹配

【实验要求】

l  在实验报告中写出栈的ADT表示;

l  在实验报告中给出数据类型定义和核心算法和程序;

l  在实验报告中罗列实验过程中出现的问题和解决的方法;

l  打包上交调试后的完整程序,提交实验报告;

l  实验之前写出实验报告的大概框架,实验过程中填写完整。

l  实验时携带需要上机调试的程序;

l  实验评分:实验之前预习占20%,实验报告书写情况占50%,运行情况30%。

【实验步骤】

1. 栈的ADT表示

ADT Stack{

数据对象:D={ai|ai∈ ElemSet,i=1,2,…,n,n>=0}

数据关系:R1={<ai-1,ai>|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;

typedef char SElemType;

typedef struct {//栈的顺序存储表示

   SElemType* base;

   SElemType* top;

   int stacksize;

}SqStack;

int x=0;

SElemType a;

SElemType e;

²  核心算法:

²  程序:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define TURE 1

#define FALSE 0

#define ERROR 0

#define OK 1

#define INFEASIBLE -1

#define OVERFLOW -2

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef int Status;

typedef char SElemType;

typedef struct {//栈的顺序存储表示

   SElemType* base;

   SElemType* top;

   int stacksize;

}SqStack;

int x=0;

Status InitStack(SqStack &s){//构造一个空栈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){

   //插入元素e为新的栈顶元素

   if(s.top-s.base>=s.stacksize){

      //栈满追加存储空间。

      s.base = (SElemType*)realloc(s.base,(s.stacksize+

STACKINCREMENT)*sizeof(SElemType));

      if(!s.base) exit(OVERFLOW);//内存分配失败

      s.top = s.base+s.stacksize;

      s.stacksize += STACKINCREMENT;

   }

   *s.top++ =e;

   return OK;

}

Status Pop(SqStack &s,SElemType &e){

//若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok;否则返回error。

   if(s.top == s.base) return ERROR;

   e = * --s.top;

   return OK;

}

////////////////////////////////////////////////////////////////////

Status Check(SqStack &s,SElemType e){

   SElemType a;

   Pop(s,a);

   if( a=='(' && e==')' ||

      a=='['&& e==']' ||

      a=='{'&& e=='}'  )

      return TURE;

   return ERROR;

}

Status EnterString(SqStack &s){

   SElemType e;

   while (1){

      scanf("%c",&e);

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

         Push(s,e);

      else if(e==')'||e==']'||e=='}'){

            if(!Check(s,e)){

               return FALSE;

               break;}

      }

      else if(e!='\n'){

         x=1;

         return FALSE;

         break;

      }

      else

         break;

   }

}

void main()

{

   SqStack s;

   InitStack(s);

   if(EnterString(s))   

      printf("括号匹配\n");

   else if(x==1)

      printf("输入的不是括号\n");

   else

      printf("括号不匹配\n");

}

【实验结果】


第二篇:数据结构实验报告(栈_括号匹配) (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>|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;

typedef char SElemType;

typedef struct {//栈的顺序存储表示

    SElemType* base;

    SElemType* top;

    int stacksize;

}SqStack;

int x=0;

SElemType a;

SElemType e;

²  核心算法:

²  程序:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define TURE 1

#define FALSE 0

#define ERROR 0

#define OK 1

#define INFEASIBLE -1

#define OVERFLOW -2

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef int Status;

typedef char SElemType;

typedef struct {//栈的顺序存储表示

    SElemType* base;

    SElemType* top;

    int stacksize;

}SqStack;

int x=0;

Status InitStack(SqStack &s){//构造一个空栈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){

    //插入元素e为新的栈顶元素

    if(s.top-s.base>=s.stacksize){

       //栈满追加存储空间。

       s.base = (SElemType*)realloc(s.base,(s.stacksize+

STACKINCREMENT)*sizeof(SElemType));

       if(!s.base) exit(OVERFLOW);//内存分配失败

       s.top = s.base+s.stacksize;

       s.stacksize += STACKINCREMENT;

    }

    *s.top++ =e;

    return OK;

}

Status Pop(SqStack &s,SElemType &e){

//若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok;否则返回error。

    if(s.top == s.base) return ERROR;

    e = * --s.top;

    return OK;

}

////////////////////////////////////////////////////////////////////

Status Check(SqStack &s,SElemType e){

    SElemType a;

    Pop(s,a);

    if( a=='(' && e==')' ||

       a=='['&& e==']' ||

       a=='{'&& e=='}'  )

       return TURE;

    return ERROR;

}

Status EnterString(SqStack &s){

    SElemType e;

    while (1){

       scanf("%c",&e);

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

           Push(s,e);

       else if(e==')'||e==']'||e=='}'){

              if(!Check(s,e)){

                  return FALSE;

                  break;}

       }

       else if(e!='\n'){

           x=1;

           return FALSE;

           break;

       }

       else

           break;

    }

}

void main()

{

system("cls");

    system("color 1f");

    printf("\n@=========================================================@\n");

    printf("|       *********欢迎进入 括号匹配 系统*************      |\n");

    printf("|          姓名:刘云飞     学号:E01114295               |\n");

    printf("@_________________________________________________________@\n");

    SqStack s;

    InitStack(s);

    if(EnterString(s))      

       printf("括号匹配\n");

    else if(x==1)

       printf("输入的不是括号\n");

    else

       printf("括号不匹配\n");

}

【实验结果】

更多相关推荐:
数据结构栈和队列实验报告

一实验目的和要求1理解栈和队列的特征以及它们之间的差异知道在何时使用那种数据结构2重点掌握在顺序栈上和链栈上实现栈的基本运算算法注意栈满和栈空的条件3重点掌握在顺序队上和链队上实现队列的基本运算算法注意循环队队...

数据结构顺序栈实验报告

一设计人员相关信息1设计者姓名学号和班号12地信李晓婧120xx2429832设计日期20xx3上机环境VC60二程序设计相关信息1实验题目编写一个程序实现顺序栈假设栈中元素类型为char的各种基本运算并在此基...

数据结构出栈、入栈实验报告

数据结构实验报告院系应用科技学院专业电子信息工程姓名学号班1实验目的123熟悉栈的定义和栈的基本操作掌握顺序存储栈和链接存储栈的基本运算加深对栈结构的理解逐步培养解决实际能力问题的能力2需求分析1栈的建立输入形...

数据结构实验报告(栈的应用)

实习报告题目编制一个演示表达式求值的操作的程序班级计算机信息安全姓名学号完成日期需求分析本演示程序中元素限定为int整型和char型演示程序以用户和计算机的对话方式执行即在计算机终端显示提示信息后由用户在键盘上...

数据结构实验报告二栈的应用

数据结构实验指导书姓名修凌云姓名李赛赛信息与计算科学教研室实验一栈及其应用实验目的熟悉栈的基本概念熟练掌握并实现栈的基本操作以及两个栈共享一个存储空间应用栈实现表达式求值可参考教材71页33应用举例实验环境计算...

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

20xx级数据结构实验报告实验名称实验二栈和队列日期20xx年11月15日1实验要求实验目的通过选择下面五个题目之一进行实现掌握如下内容进一步掌握指针模板类异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实...

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

数据结构课程实验报告注空间不够可以增加页码

数据结构实验报告-栈和队列的应用

数据结构第五次实验报告学生姓名学生班级学生学号指导老师雷大江重庆邮电大学计算机学院计算机专业实验中心一实验内容1利用栈深度优先进行迷宫求解用数组表示迷宫建立栈利用栈实现深度优先搜索2利用队列宽度优先进行迷宫求解...

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

数据结构课程设计报告设计题目括号匹配院系计算机学院年级11级学生刘云飞学号E01114295指导教师王爱平起止时间97914第1页共6页课程设计目的1熟悉并写出栈的逻辑结构表示2实现栈的存储表示3实现栈的操作内...

数据结构实验2——栈和队列实验报告

数据结构实验报告实验名称:实验2栈和队列1实验目的通过选择下面五个题目之一进行实现,掌握如下内容:Ø进一步掌握指针、模板类、异常处理的使用Ø掌握栈的操作的实现方法Ø掌握…

数据结构树的实验报告

数据结构实验报告目的要求1掌握二叉树的存储实现2掌握二叉树的遍历思想3掌握二叉树的常见算法的程序实现实验内容1输入字符序列建立二叉链表2中序遍历二叉树递归算法3中序遍历二叉树非递归算法最好也能实现先序后序非递归...

数据结构实验报告

武汉大学国际软件学院实验报告课程名称专业年级姓名学号协作者实验学期课堂时数填写时间月6小结对本次实验的心得体会所遇到的问题及解决方法其他思考和建议7指导教师评语及成绩指导教师依据学生的实际报告内容用简练语言给出...

数据结构栈实验报告(47篇)