最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

数据结构实验报告三

来源:动视网 责编:小OO 时间:2025-09-24 21:09:04
文档

数据结构实验报告三

LIAOCHENGUNIVERSITY计算机学院实验报告【2016~2017学年第1学期】【一、基本信息】【实验课程】数据结构【设课形式】□非☑【课程学分】4【实验项目】栈和队列【项目类型】基础□综合☑设计□研究创新□其它[]【项目学时】4【学生姓名】沈凯【学号】2015205377【系别专业】软件开发【实验班组】15级11班组台【同组学生】【实验室名】综合实验楼【实验日期】2016.【报告日期】2016.【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效)指导教师签名:张
推荐度:
导读LIAOCHENGUNIVERSITY计算机学院实验报告【2016~2017学年第1学期】【一、基本信息】【实验课程】数据结构【设课形式】□非☑【课程学分】4【实验项目】栈和队列【项目类型】基础□综合☑设计□研究创新□其它[]【项目学时】4【学生姓名】沈凯【学号】2015205377【系别专业】软件开发【实验班组】15级11班组台【同组学生】【实验室名】综合实验楼【实验日期】2016.【报告日期】2016.【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效)指导教师签名:张


LIAOCHENG UNIVERSITY

计算机学院实验报告

【20 16  ~20 17  学年第 1 学期】

【一、基本信息】

【实验课程】

数据结构
【设课形式】

□    非☑

【课程学分】

4
【实验项目】

栈和队列
【项目类型】

基础□ 综合☑ 设计□ 研究创新□ 其它[        ]

【项目学时】

4
【学生姓名】沈凯【学    号】

2015205377
【系别专业】

软件开发
【实验班组】     15级        11班        组        台                                           

【同组学生】                                          
【实验室名】

 综合实验楼                        

【实验日期】2016.【报告日期】2016.
【二、实验教师对报告的最终评价及处理意见】

实验成绩:        (涂改无效)

                   指导教师签名: 张振领       2016年  月  日

注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案

【三、实验预习】

实验目的和要求:

1、熟练掌握二叉树的结构,以及这种数据结构的特点;

2、会定义二叉树的链式存储结构;

3、能实现二叉树的建立、遍历等功能,需要完成先序遍历、中序遍历和后序遍历递归算法以及中序非递归算法。

实验内容和原理或涉及的知识点:

自己编写程序实现二叉树的各种基本操作,如二叉树的建立,遍历等。

实验条件:

具有C语言集成开发环境的计算机

实验设计方案:

设计的算法有:

1、递归建立二叉树;

2、先序递归遍历二叉树;

3、中序递归遍历二叉树;

4、后序递归遍历二叉树。

5、中序非递归遍历二叉树

实验预习成绩(涂改无效)合格□不合格□
 

【四、实验过程、数据和实验结果记录】

实验方法、步骤、操作过程的记录描述或程序代码。实验过程中输入/输出数据、程序运行结果的记录。(可加附页)

1、根据实验预习阶段的实验设计方案,编写伪C代码如下。

typedef struct BiTNode  {

       TelemType data;

        struct BiTNode *lchild,*rchild;

} BiTNode,*BiTree;

status CreateBiTree(BiTree &T){

//按先序次序输入二叉树中结点的值,空格表示空树

//生成二叉树的二叉链表存储结构,T为根结点指针

 scanf("%c",&ch);

 if (ch==' ') T=NULL;

 else{ 

          if (!(T=(BiTNode *) malloc(sizeof(BiTNode)))) exit(OVERFLOW);

           T->data=ch;  //建立根结点

           CreateBiTree( T->lchild);  //建立左子树

           CreateBiTree(T->rchild);  //建立右子树

          }

  return OK;

} //CreateBiTree

status PrintElement(TelemType e)

{

 printf("%c",e);  //输出元素值

 return OK;

}

status  PreorderTraverse(BiTree T, status(*visit)(TelemType e)) {

//先序遍历根结点指针为T的二叉树

if (T)  {

if (visit(T->data))

if (PreorderTraverse(T->lchild,visit))

if (PreorderTraverse(T->rchild,visit)) return OK;

       return ERROR;  

    }else return OK;   //if (T)

 }//PreorderTraverse

Status  InorderTraverse1(BiTree T, Status(*visit)(TElemType e)) {

    //先序遍历根结点指针为T的二叉树

    if (T)  {

        if (InorderTraverse1(T->lchild,visit))

            if (visit(T->data))

                if (InorderTraverse1(T->rchild,visit)) return OK;

        return ERROR;  

    }else return OK;   //if (T)

}//InorderTraverse

status  PostorderTraverse(BiTree T, status(*visit)(TelemType e)) {

//后序遍历根结点指针为T的二叉树

if (T)  {

if (PostorderTraverse(T->lchild,visit))

if (PostorderTraverse(T->rchild,visit))

        if (visit(T->data))  return OK;

       return ERROR;  

    }else return OK;   //if (T)

 }//PostorderTraverse

Status InorderTraverse2(BiTree T, Status (*visit)(TElemType  e)) {

    SqStack S;    

    InitStack(S);   BiTree p=T;

        while( p || !StackEmpty(S) ){ // 找到最左下的结点

            if (p)  {  Push(S,p);   p=p->lchild;  } // 根指针进栈,遍历左子树

            else  {                                 //根指针退栈,访问根结点,遍历右子树

                Pop(S,p);   if (!visit(p->data)  ) return  ERROR;

                p=p->rchild;

            } //else

        } // while

        return  OK;

}// InOrderTraverse

2、将算法细化为程序代码。

#include

#include

#include

#define LIST_INIT_SIZE 10

#define LISTINCREMENT 100

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define TRUE 1

#define FALSE 0

#define true 1

#define false 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define OPSETSIZE 7

#define MAXQSIZE 100

#define NULL 0

typedef char TelemType;

typedef int Status;

typedef struct BiTNode

{

    TelemType data;

    struct BiTNode *lchild, *rchild;

} BiTNode, *BiTree;

Status CreateBiTree(BiTree *T);

Status PrintElement(TelemType e);

Status visit(TelemType e);

Status PreorderTraverse(BiTree T, Status *visit(TelemType e));

Status InorderTraverse(BiTree T, Status *visit(TelemType e));

Status PostorderTraverse(BiTree T, Status *visit(TelemType e));

int main()

{

    BiTree T;

    printf("Please input characters to create a tree:\\n");

    CreateBiTree(&T);

    printf("PreorderTraverse:");

    PreorderTraverse(T, visit);

    printf("\\nInorderTraverse:");

    InorderTraverse(T, visit);

    printf("\\nPostorderTraverse:");

    PostorderTraverse(T, visit);

    return 0;

}

Status CreateBiTree(BiTree *T)

{

    char ch;

    ch = getchar();

    if (ch == ' ')

        *T = NULL;

    else

    {

        if (!(*T = (BiTNode *) malloc(sizeof (BiTNode))))

            exit(OVERFLOW);

(*T)->data = ch;

CreateBiTree(&((*T)->lchild));

CreateBiTree(&((*T)->rchild));

    }

    return OK;

}

Status PrintElement(TelemType e)

{

    printf("%c", e);

    return OK;

}

Status visit(TelemType e)

{

    printf("%c ", e);

    return OK;

}

Status  PreorderTraverse(BiTree T, Status *visit(TelemType e))

{

    if (T)

    {

if (visit(T->data))

if (PreorderTraverse(T->lchild, visit))

if (PreorderTraverse(T->rchild, visit)) return OK;

        return ERROR;

    }

    return OK;

}

Status InorderTraverse(BiTree T, Status *visit(TelemType e) )

{

    if (T)

    {

if (InorderTraverse(T->lchild, visit))

if (visit(T->data))

if (InorderTraverse(T->rchild, visit)) return OK;

        return ERROR;

    }

    return OK;

}

Status  PostorderTraverse(BiTree T, Status *visit(TelemType e))

{

    if (T)

    {

if (PostorderTraverse(T->lchild, visit))

if (PostorderTraverse(T->rchild, visit))

if (visit(T->data)) return OK;

        return ERROR;

    }

    return OK;

}
3、编译、链接、运行程序。

int main()

{

    BiTree T;

    printf("Please input characters to create a tree:\\n");

    CreateBiTree(&T);

    printf("PreorderTraverse:");

    PreorderTraverse(T, visit);

    printf("\\nInorderTraverse:");

    InorderTraverse(T, visit);

    printf("\\nPostorderTraverse:");

    PostorderTraverse(T, visit);

    return 0;

}

实验数据和实验结果记录

程序的一个运行实例如下。
记录成绩(涂改无效)合格□不合格□
【五、实验结果分析】
1、分析数制转换时后进先出的特点;

2、分析如果将数转换为二进制, conversion函数的修改;

3、分析如果没有初始化栈的操作时程序的运行结果;

3、写出自己的心得体会。

文档

数据结构实验报告三

LIAOCHENGUNIVERSITY计算机学院实验报告【2016~2017学年第1学期】【一、基本信息】【实验课程】数据结构【设课形式】□非☑【课程学分】4【实验项目】栈和队列【项目类型】基础□综合☑设计□研究创新□其它[]【项目学时】4【学生姓名】沈凯【学号】2015205377【系别专业】软件开发【实验班组】15级11班组台【同组学生】【实验室名】综合实验楼【实验日期】2016.【报告日期】2016.【二、实验教师对报告的最终评价及处理意见】实验成绩:(涂改无效)指导教师签名:张
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top