计10--数据结构专题实验rev2

合集下载

数据结构实验(二)

数据结构实验(二)

实验二:栈在数值进制转换中的应用实验学时:2学时

一.实验目的:

1.掌握栈的存储结构;

2.掌握在栈的建立、插入、删除操作。

二.实验内容:

1.分别建立建栈、进栈、出栈函数;

2.利用数值进制的转换原则合理的应用栈。

三.实验重点:

栈的建立及操作。

四.实验要求:

1.用C语言编写程序源代码;

2.要分别完成建立、插入、删除功能。

3.源程序必须编译调试成功,独立完成。

五.实验器材:

一个装有C语言编译环境的计算机。

六.实验步骤:

单链表:

1.定义头文件和单链表的结构体类型

#include<stdio.h>

#include<stdlib.h>

typedef struct

{

SElemtype data;

SElemtype *top;

Int stacksize;

}Sqstack;

2.编写构造栈的函数

3.编写对栈进行插入操作的函数:

4.编写对栈进行删除操作的函数:

5.编写主函数

#include<stdio.h>

#include<stdlib.h>

#define initsize 20

#define increment 10

#define OK 1

#define ERROR 0

#define OVERFLOW 0

typedef char elemtype;

typedef struct stack{

elemtype *base;

elemtype *top;

int stacksize;

}stack;

void initstack(stack &s)

{s.base=(elemtype *)malloc(initsize*sizeof(elemtype));

数据结构实验十

数据结构实验十

数据结构实验十

1. 实验目的

本实验旨在通过实践来加深对数据结构中树的理解,掌握树的基本操作和应用。

2. 实验背景

树是一种重要的数据结构,常用于解决各种实际问题。树的基本概念包括节点、根节点、叶子节点、父节点、子节点、树的高度等。树的常见应用有文件系统、组织结构、编译器语法分析等。

3. 实验内容

本实验要求实现以下功能:

- 构建一棵二叉树:根据给定的数据构建一棵二叉树,并输出树的结构。

- 遍历二叉树:实现二叉树的前序遍历、中序遍历和后序遍历,并输出遍历结果。

- 求二叉树的高度:计算二叉树的高度,并输出结果。

- 判断二叉树是否为平衡二叉树:判断给定的二叉树是否为平衡二叉树,并输

出结果。

4. 实验步骤

4.1 构建二叉树

根据给定的数据,构建一棵二叉树。可以使用链式存储结构或顺序存储结构实

现二叉树。

4.2 遍历二叉树

实现二叉树的前序遍历、中序遍历和后序遍历。可以使用递归或非递归的方式实现。

4.3 求二叉树的高度

编写算法,计算二叉树的高度。可以使用递归或非递归的方式实现。

4.4 判断二叉树是否为平衡二叉树

编写算法,判断给定的二叉树是否为平衡二叉树。可以使用递归的方式实现。

5. 实验结果

5.1 构建二叉树

给定数据:[1, 2, 3, 4, 5, 6, 7]

构建的二叉树如下所示:

1

/ \

2 3

/ \ / \

4 5 6 7

5.2 遍历二叉树

前序遍历结果:1, 2, 4, 5, 3, 6, 7

中序遍历结果:4, 2, 5, 1, 6, 3, 7

后序遍历结果:4, 5, 2, 6, 7, 3, 1

5.3 求二叉树的高度

数据结构实验报告二

数据结构实验报告二

数据结构实验报告——实验二

一、实验目的

1. 复习结构体、数组、指针

2. 掌握数组的静态创建与动态创建

3. 了解顺序存储的基本访问方法

二、实验内容

1. 每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用动态方法创建数组用于存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文30%,数学50%,英语20%),输出学生的成绩信息。

2. 可以在数组末尾追加新学生的成绩信息;可以根据学号,删除该学生的成绩信息。

3. 可以根据学号或者总分,升序排序学生的成绩信息。

三、数据结构及算法描述

1. 首先是对于学生成绩的储存,由于成绩信息有多个字段,所以用个结构体student是最合适不过了。然后把每一个结构体看成一个元素,用数组存储,数组类型是student。由于要求动态存储,所以这里需要声明一个指向类型是student结构体的动态空间的指针p。最初询问用户输入多少个学生,通过malloc申请n * sizeof(student)的空间大小,通过p[i]依次存放每个学生的成绩信息。后来需要在末尾追加学生的成绩信息,所以需要realloc对空间进行调整,调整后的空间大小是(n+1) * sizeof(student)。在这里我省去了malloc的过程,而是添加一个学生,就realloc一下,增加一个结构体的空间。注意,在添加前p指向空时,realloc相当于malloc。

2. 后来实现根据学号删除学生的成绩信息,首先要根据用户输入的学号找到这位学生,然后p[j] = p[j+1], 也就是把后一个学生的信息依次复制到前一个学生,就相当于把该学号的学生成绩信息删掉了。注意还没完,要把存储空间缩减一个结构体的大小,因为毕竟少了一个嘛。实现也很简单还是用realloc,假设此时n个学生,则空间变为(n-1) * sizeof(student)就好啦。

数据结构实验二

数据结构实验二

数据结构实验二

数据结构实验二:线性表的顺序存储结构实现

一、实验目的

本实验旨在通过实践,掌握线性表的顺序存储结构实现方法,加深对数据结构中线性表概念的理解,以及顺序存储结构的特点和操作。

二、实验内容

1. 了解线性表的顺序存储结构的定义和特点;

2. 设计并实现线性表的顺序存储结构的初始化操作;

3. 设计并实现线性表的顺序存储结构的插入操作;

4. 设计并实现线性表的顺序存储结构的删除操作;

5. 设计并实现线性表的顺序存储结构的查找操作;

6. 设计并实现线性表的顺序存储结构的修改操作;

7. 设计并实现线性表的顺序存储结构的打印操作;

8. 编写测试用例,验证线性表的顺序存储结构的各项操作是否正确。

三、实验步骤

1. 定义线性表的顺序存储结构,包括表头指针、表长度和表最大容量等成员变量;

2. 实现线性表的顺序存储结构的初始化操作,包括动态分配内存空间、初始化表头指针、表长度和表最大容量等;

3. 实现线性表的顺序存储结构的插入操作,包括判断插入位置的合法性、移动元素、插入新元素等;

4. 实现线性表的顺序存储结构的删除操作,包括判断删除位置的合法性、移动元素、修改表长度等;

5. 实现线性表的顺序存储结构的查找操作,包括按值查找和按位置查找两种方式;

6. 实现线性表的顺序存储结构的修改操作,包括判断修改位置的合法性、修改元素值等;

7. 实现线性表的顺序存储结构的打印操作,按照从头到尾的顺序输出线性表中的元素;

8. 编写测试用例,包括插入、删除、查找、修改和打印等操作的测试,验证线性表的顺序存储结构的正确性。

数据结构 实验2

数据结构 实验2

六、结论与分析 在本次实验中掌握了栈的定义,学会栈的初始化,掌握栈的前缀、中缀 以及后缀表达式求值和前缀、中缀和后缀表达式相互之间的转换,感觉 在实验中也遇到不少问题,都有相对的解决。
exit(0); } break; default: d=0; while(*postexp>='0'&&*postexp<='9') { d=10*d+*postexp-'0'; postexp++; } st.top++; st.data[st.top]=d; break; } postexp++; } return (st.data[st.top]); } void main() { char exp []="(56-20)/(4+2)"; char postexp[MaxSize]; trans(exp,postexp); printf("中缀表达式:%s\n",expwenku.baidu.com; printf("后缀表达式:%s\n",postexp); printf("表达式的值:%g\n",compvalue(postexp)); }
op.data[op.top]='='; while(*exp !='\0') { if(!InOp(*exp)) while(*exp>='0'&&*exp<='9') { postexp[i++]=*exp; exp++; } postexp[i++]='#'; } else switch(Precede(op.data[op.top],*exp)) { case -1: op.top++;op.data[op.top]=*exp; exp++; break; case 0: op.top--; exp++; break; case 1: postexp[i++]=op.data[op.top]; op.top--; break; } } while(op.data[op.top]!='=') {

数据结构实验二

数据结构实验二

数据结构实验二

数据结构实验二:队列与栈的实现

一、实验目的

本实验旨在通过实现队列和栈数据结构,加深对队列和栈实现原理的理解,并熟练掌握队列和栈的基本操作。

二、实验要求

1.使用C/C++语言实现队列的基本操作:初始化队列、入队、出队、判空、判满等。

2.使用C/C++语言实现栈的基本操作:初始化栈、入栈、出栈、判空、判满等。

3.验证队列和栈的实现是否正确。

4.分析队列和栈的时间复杂度,并给出实验结果。

5.撰写实验报告,包括实验目的、实验原理、实验步骤、程序源代码、实验结果和分析、实验总结等内容。

三、实验原理

1.队列:队列是一种先进先出(FIF0)的数据结构。在队列中,数据元素按照进入队列的顺序排列,首元素是最先进入的元素,尾

元素是最后进入的元素。队列的基本操作有:初始化队列、入队、出队、判空、判满等。

2.栈:栈是一种后进先出(LIFO)的数据结构。在栈中,数据元素按照进入栈的顺序排列,但是只能从栈顶进出,即最后进入的元素最先出栈。栈的基本操作有:初始化栈、入栈、出栈、判空、判满等。

四、实验步骤

1.实现队列的基本操作:

1.初始化队列:创建一个空队列,并设置相关指针。

2.入队:将新元素插入到队尾。

3.出队:将队头元素删除,并返回其值。

4.判空:判断队列是否为空。

5.判满:判断队列是否已满。

2.实现栈的基本操作:

1.初始化栈:创建一个空栈,并设置相关指针。

2.入栈:将新元素压入栈顶。

3.出栈:将栈顶元素弹出,并返回其值。

4.判空:判断栈是否为空。

5.判满:判断栈是否已满。

3.编写测试代码,验证队列和栈的基本操作是否正确。

数据结构实验十

数据结构实验十

数据结构实验十

引言概述

数据结构实验十是一门重要的课程,通过实验学习可以帮助学生更好地理解和掌握数据结构的基本原理和应用。本文将从五个部分详细介绍数据结构实验十的内容和重点。

一、实验目的

1.1 熟练掌握树的基本概念和操作

1.2 理解二叉树、平衡二叉树和红黑树的特点

1.3 学习树的遍历算法和应用

二、实验内容

2.1 实现二叉树的基本操作:插入、删除、查找

2.2 实现平衡二叉树的插入和删除操作

2.3 实现红黑树的插入和删除操作

三、实验步骤

3.1 设计树的数据结构和相关操作函数

3.2 实现二叉树、平衡二叉树和红黑树的插入和删除算法

3.3 编写测试程序,验证算法的正确性和效率

四、实验要求

4.1 熟练掌握C/C++编程语言

4.2 能够理解和分析树的基本操作和算法

4.3 具备良好的编程习惯和逻辑思维能力

五、实验总结

5.1 总结本次实验的收获和问题

5.2 深入思考树的应用场景和算法优化

5.3 探讨数据结构与算法的关系及未来学习方向

通过本次实验,学生将能够深入理解树这一重要的数据结构,掌握树的基本操作和算法,提升编程能力和解决问题的能力。希望学生能够认真对待实验,不断提升自己的技术水平和学习能力。

2010级计算机科学与技术专业数据结构实验

2010级计算机科学与技术专业数据结构实验

2010级数据结构实验

(计算机科学与技术专业用)

一、线性表的顺、链式存储结构的实现(4学时,验证性实验)

1.线性表的顺序存储结构

要求:利用书本上的线性表的顺序存储结构定义,

#define LIST_INIT_SIZE 100 // 线性表存储空间的初

//始分配量

#define LISTINCREMENT 10 // 线性表存储空间的分配增量

typedef struct{

ElemType *elem; // 存储空间基址

四、int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)

} SqList;

1)编写完成下列功能的函数:(1)初始化一个线性表;(2)创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数插在第i个元素前(i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入);(5)输出线性表中所有元素。

2)用主函数调用你所编写的函数,并在使线性表有所变化的每一步输出线性表的内容,以验证你编程序的正确性。

备注:stdlib.h中有srand( )接受随机数的种子; rand( )产生0~RAND_MAX的一个整数的函数。用rand( )%100+1可以产生不大于100的正整数值。

2.线性表的链式存储结构

要求同顺序存储结构,只是用链表作为存储结构完成以上操作。

二、栈的顺序存储结构、链队列的实现(4学时,验证性实验)

1.栈的顺序存储结构

要求:利用书本上的栈的顺序存储结构定义,

数据结构实验十

数据结构实验十

数据结构实验十

数据结构实验十:二叉树的遍历

一、实验目的

本实验旨在通过编程实现二叉树的遍历算法,包括前序遍历、中序遍历和后序

遍历,并加深对二叉树遍历算法的理解。

二、实验原理

二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点。

二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。

1. 前序遍历:

前序遍历是指先访问根节点,然后按照先左后右的顺序递归地遍历左右子树。

具体步骤如下:

- 访问根节点。

- 递归地前序遍历左子树。

- 递归地前序遍历右子树。

2. 中序遍历:

中序遍历是指先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。具体步骤如下:

- 递归地中序遍历左子树。

- 访问根节点。

- 递归地中序遍历右子树。

3. 后序遍历:

后序遍历是指先递归地遍历左右子树,然后访问根节点。具体步骤如下:

- 递归地后序遍历左子树。

- 递归地后序遍历右子树。

- 访问根节点。

三、实验步骤

1. 创建二叉树数据结构:

首先,我们需要创建一个二叉树的数据结构,包括节点的定义和一些基本操作,如插入节点和删除节点等。

2. 实现前序遍历算法:

根据前序遍历的原理,我们可以编写一个递归函数来实现前序遍历算法。具体

步骤如下:

- 如果当前节点为空,则返回。

- 访问当前节点。

- 递归地前序遍历左子树。

- 递归地前序遍历右子树。

3. 实现中序遍历算法:

根据中序遍历的原理,我们可以编写一个递归函数来实现中序遍历算法。具体

步骤如下:

- 如果当前节点为空,则返回。

- 递归地中序遍历左子树。

数据结构实验二数据结构实验二

数据结构实验二数据结构实验二

status list_delete(sqlist &L,int i) { int *p,*q,e; if((iL.length)) { cout<<"你输入位置不合法!"<<endl; return error; } p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; return e; } int main() { int i=0,j,in_num,a; //第j个元素前插入数据in_num sqlist M; list_init(M); M.length =10; cout<<"请输入10个数据(数据之间用空格分隔!)"<M.elem[i++]; list_output(M);) cout<<endl<<endl<<"请选者你要对表进行的操作:"<<endl<<" 1 插入数 据"<<endl <<" 2 删除数据"<>a; switch(a)
iBiblioteka Baidut listsize; }sqlist; status list_init(sqlist &L) //对表初始化定义 { L.elem =(int*)malloc(list_init_size*sizeof(int)); if (!L.elem) exit(error); L.length =0; L.listsize =list_init_size; return ok; } status list_output(sqlist &L) //输出一个表的函数定义 { cout<<endl<<"操作后的表为:"; for(int i=0;i<L.length ;i++) cout<<L.elem [i]<<" "; return ok; } status list_insert(sqlist &L,int i,int e) { int* newbase,*p,*q; if(iL.length +1) { cout<<endl=q;--p) *(p+1)=*p; *q=e; ++L.length ; return ok; }

数据结构实验十

数据结构实验十

数据结构实验十

引言概述:数据结构实验十是数据结构课程中的重要实验之一,通过这个实验,可以加深对数据结构的理解和应用能力。本文将从五个方面详细介绍数据结构实验十的内容。

一、实验目的

1.1 熟悉并掌握树的基本概念和性质

1.2 学习树的遍历算法,包括前序、中序、后序遍历

1.3 理解树的应用场景,如文件系统、数据库索引等

二、实验内容

2.1 实现树的基本数据结构,包括节点、树的构建和销毁

2.2 实现树的遍历算法,分别实现前序、中序、后序遍历

2.3 实现树的应用场景,如文件系统的建立和遍历

三、实验步骤

3.1 设计树的节点结构,包括数据域和指针域

3.2 实现树的构建和销毁函数

3.3 实现前序、中序、后序遍历算法,可以采用递归或者非递归方式实现

四、实验要求

4.1 实现代码需符合数据结构的基本原理和规范

4.2 实验报告需包括实验目的、实验内容、实验步骤、实验结果和分析等内容

4.3 实验过程中需注意代码的茁壮性和效率,尽量减少不必要的内存和时间消耗

五、实验总结

5.1 总结本次实验的收获和体味,包括对树的理解和应用能力的提升

5.2 分析实验中遇到的问题和解决方法,为以后的实验积累经验

5.3 展望未来,如何将所学的数据结构知识应用到实际项目中,提高自己的编程能力和解决问题的能力。

通过本文的介绍,读者可以了解数据结构实验十的内容和要求,希翼能够匡助读者顺利完成实验并提升数据结构的应用能力。

数据结构实验二

数据结构实验二

数据结构实验二公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]

《数据结构》实验报告二

学校:班级:

学号:姓名:

日期:程序名:

一、上机实验的问题和要求:

单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:

1.从键盘输入20个整数,产生不带表头的单链表,并输入结点值。

2.从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显

示“找到了”;否则,则显示“找不到”。

3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入

的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。

4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点

值,观察输出结果。

5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相

同,输出单链表所有结点值,观察输出结果。

6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输

出结果。

7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,

观察输出结果。

8.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中

序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。

二、程序设计的基本思想,原理和算法描述:

(包括程序的结构,数据结构,输入/输出设计,符号名说明等)这是一个带头结点的线性链表,数据域存放整形数据,由用户输入。头结点数据域存链表长度,所以程序中有个求链表长度的函数

数据结构实验报告-实验2

数据结构实验报告-实验2

理工学院计算机类课程实验报告

int deleteLink(LinkList L,int location){

LinkList p,q;

p=L;

int j=0;

while(p&&j<location-1){

p=p->next;

j++;

}

if(p==NULL||j>location-1)//判断删除位置是否合法

return -1;//插入的位置有误

q=p->next;

p->next=q->next;//核心代码删除结点q

free(q);//释放结点q的空间

return 1;

}

运行结果:

实验过程中遇到的困难:

(1) 整体实验代码是参考老师的发的视频完成的,对.h文件的创建还不是特别理解。

(2) 插入和删除元素的过程,缺少了对插入和删除元素的指定位置进行判断。

改进措施:

(1) 课后及时对自己不懂的知识进行学习巩固。

(2) 对数组相关算法要考虑全面,考虑是否越界及合法。

收获:

(1) 掌握了二分查找的算法。

(2) 基本了解C项目的编写方式。

(3) 学会创建简单顺序表并能够在指定位置插入、删除元素及查找指定元素。

数据结构实验十

数据结构实验十

数据结构实验十

引言概述:

数据结构实验十是计算机科学与技术专业中的一门实验课程,旨在通过实践操作,让学生掌握和深入理解常用的数据结构及其应用。本文将从五个方面详细阐述数据结构实验十的内容。

一、实验背景与目的:

1.1 实验背景:介绍数据结构实验十的背景,例如该实验是在哪个学期进行,

是否有先修课程等。

1.2 实验目的:明确数据结构实验十的目标,例如通过实验掌握树结构的基本

概念和操作,理解树的遍历算法等。

二、实验内容:

2.1 树的基本概念:介绍树结构的定义和特点,包括根节点、子节点、叶节点

等基本概念。

2.2 树的遍历算法:详细阐述树的先序遍历、中序遍历和后序遍历算法,包括

递归和非递归实现方法。

2.3 树的应用:探讨树结构在实际应用中的作用,如文件系统、数据库索引等,以及树的应用场景和优势。

三、实验要求与实验步骤:

3.1 实验要求:列举数据结构实验十的实验要求,如完成树的遍历算法的编程

实现,编写实验报告等。

3.2 实验步骤:详细描述进行数据结构实验十的步骤,包括创建树结构、实现

树的遍历算法、进行实验验证等。

四、实验结果与分析:

4.1 实验数据:给出进行数据结构实验十所使用的测试数据,包括树的结构和

节点数据。

4.2 实验结果:展示实验运行的结果,包括树的遍历顺序和相关输出信息。

4.3 实验分析:对实验结果进行分析和解释,讨论实验结果与预期目标的符合

程度,分析可能存在的问题和改进方向。

五、实验总结与展望:

5.1 实验总结:总结数据结构实验十的主要内容和收获,强调实验对于学生的

意义和作用。

5.2 实验心得:分享个人对于数据结构实验十的体会和心得,包括遇到的困难、解决方法和感悟。

数据结构第二章 实验报告

数据结构第二章 实验报告

数据结构与算法实验报告

顺序表逆置操作:输出La顺序表,逆置操作后输出逆置的顺序表

if(!(p->next)||j>i-1) return ERROR;

else{pc->next=pb;pc=pb;pb=pb->next;}

数据结构实验报告2

数据结构实验报告2

实验报告(二)

分校名称

学号姓名

实验日期2010-11-11

实验名称栈、队列、递归程序设计

使用主要设备PC,VC++6.0

实验要求

正确理解栈的现金后出的操作特点,建立初始栈,通过操作显示栈底元素

程序中要体现出建栈的过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规定打印结果栈的元素

比较体重二种不同的递归程序设计和执行过程的差别

正确理解递归程序的执行过程显示计算结果

实验报告内容:

1.调试中碰到的问题及解决方法

2.调试成功的程序清单

3.实验结论

2.1 栈和队列的基本操作

编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。

(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。

(2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。

设计程序代码如下:

//数据结构实验2.1栈和队列的基本操作

//调试环境: Visual C++ 6.0

//-----库文件的预设和定义

#include <stdio.h>

#include <malloc.h>

#define MaxSize 100

typedef char ElemType;

typedef struct

{

ElemType data[MaxSize];

int top; //栈顶指针

} SeqStack;//定义栈

typedef struct

{

ElemType elem[MaxSize];

int front,rear; //队首和队尾指针

} SqQueue;//定义队列

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机实验要求及规范

《数据结构》课程具有比较强的理论性,同时也具有较强的可应用性和实践性,因此上机实验是一个重要的教学环节。一般情况下学生能够重视实验环节,对于编写程序上机练习具有一定的积极性,但是容易忽略实验的总结,忽略实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程,而是应该按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略,逐一地解决子问题。具体步骤如下:

1.问题分析与系统结构设计

充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),然后设计有关操作的函数。在每个函数模块中,要综合考虑系统功能,使系统结构清晰、合理、简单和易于调试。最后写出每个模块的算法头和规格说明,列出模块之间的调用关系(可以用图表示),便完成了系统结构设计。

2.详细设计和编码

详细设计是对函数(模块)的进一步求精,用伪高级语言(如类C语言)或自然语言写出算法框架,这时不必确定很多结构和变量。

编码,即程序设计,是对详细设计结果的进一步求精,即用某种高级语言(如C/C++语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。

3.上机准备

熟悉高级语言用法,如C语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。

4.上机调试程序

调试最好分块进行,自底向上,即先调试底层函数,必要时可以另写一个调用驱动程序,表面上的麻烦工作可以大大降低调试时所面临的复杂性,提高工作效率。

5.整理实验报告

在上机实验开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析,写出实验报告。

成绩评定标准

成绩构成

成绩=程序实践×80%+出勤×10%+课上表现×10%

出勤与课上表现

(1)出勤统计100分×出勤率

(2)课上表现任选一个算法做相应PPT报告,由老师评分,总分100分

程序实践

(1) 分组

✧自由组合,4人/组;

✧9月8日完成分组,未选择分组的同学由老师指派。

(2) 选题

✧不带*的实验题目为基本内容,应至少完成80%,否则实验成绩不合格。

✧带*的实验题目难度较高,学生可自选。该部分完成40%,实验成绩为中

等;完成60%,实验成绩为良好;完成80%,实验成绩为优秀。

✧每组将所选题目的编号(如1-5)上报老师;

✧可自拟题目,但自拟题目的难度由老师认定并备份。

✧算法中元素类型根据实际需要自行选择。

(3)程序检查

✧检查时间(见课表)

✧检查要求

程序调试通过,应有相应的注释;

准备测试数据;

回答老师针对算法提出的问题。

(4)文档提交

✧实验报告模板见本文第11页所示;

✧12月27日,以组为单位提交实验报告。

实验一线性表

一、实验目的

1. 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。

2. 重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。

二、实验内容

1-1 输入整型元素序列利用插入算法建立一个非递减有序表。请设计程序实现。要求:采用顺序存储结构实现;采用链式存储结构实现;比较两种方法的优劣。

1-2 设计程序实现把题1建立的顺序表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。

1-3 设计程序实现把题1建立的单链表中值相同的多余结点的删除。

1-4 约瑟夫环问题。有n个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,如此下去,直到所有人都出列为止。试设计确定他们出列次序的程序。要求选择单向循环链表作为存储结构模拟整个过程,并依次输出出列人的编码。

*1-5 用链表建立通讯录。通讯录内容有:姓名、通讯地址、电话号码。要求:通讯录是按姓名项的字母顺序排列的;能查找通讯录中某人的信息。

*1-6 超长正整数的加法,设计一个程序实现两个任意长的整数求和运算

【提示】可采用一个带有头结点的循环链表来表示一个非负的超大整数。从低位开始每四位组成的数字,依次放在链表的第一个、第二个、……第n个结点中,不足四位的最高位存放在链表的最后一个结点中,表头结点值规定为-1。例如:大整数“567890987654321”可用如下的头结点的链表表示:

按照此数据结构,可以从两个表头结点开始,顺序依次对应相加,求出所需要的进位后,将其代入下一个结点进行运算。

*1-7 综合训练。利用单链表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)。

实验二 栈和队列

一、实验目的

1. 掌握栈这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。

2. 掌握队列这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。

3. 了解和掌握递归程序设计的基本原理和方法。 二、实验内容

2-1 采用顺序存储实现栈的初始化、入栈、出栈操作。

2-2 采用顺序存储实现循环队列的初始化、入队、出队操作。

2-3 设单链表中存放着n 个字符,利用栈结构,试设计算法判断字符串是否中心对称。例如xyzzyx 即为中心对称的字符串。

2-4 假设仅知循环队列中队尾元素的位置rear 和内含元素的个数len(len

人们之所以研究该函数,是因为m 和n 值的较小增长都会引起函数值的极快增长。

(1)设计一个递归算法的源程序,上机运行。

(2)设计一个非递归算法的源程序,上机运行。并进行比较。 *2-6 综合训练。利用栈实现表达式求值算法。 *2-7 离散事件模拟。

*2-8 编写递归程序求顺序表中的最大(最小)值。 *2-9 二项式(a+b)n 展开后,其系数构成杨辉三角形,利用队列写出打印杨辉三角形的前n 行的程序。

n+1 当 m=0 时 akm(m-1,1) 当 m>0,n=0 时 akm(m-1,akm(m,n-1)) 当 m>0,n>0 时

akm(m,n)=

1 1 1 1

2 1 1

3 3 1

相关文档
最新文档