2011-软件技术基础实验指导书

2018-12-11 23:11

《软件技术基础》课程实验指导书

实验环境:C/C++语言编程 Turbo C3.0 / Visual C++6.0 一、实验内容

序号 1 2 3 4 实验内容 单链表的操作 堆栈操作 二叉树操作 数据的查找与排序 实验类型 设计 设计 设计 设计 学时 2 2 2 2 要求 必做 必做 必做 必做 二、实验指导

实验一 单链表的操作

一、 实验目的

1.掌握线性表的链式存储结构 (1)线性表的链式存储原理 (2)链式存储结构的优缺点

2.掌握结构体的应用以及数据结点的生成 (1)结构体的定义

(2)动态存储分配函数的使用 (3)强制类型转换的方法 3.掌握指针的应用

(1)巩固指针的含义和用法 (2)结构体指针的使用 二、 预习要求 1.复习C语言

(1)巩固C语言程序设计的基本方法

(2)巩固在TC或VC环境中编写和调试C程序 2.复习指针和结构体两部分的知识 (1)巩固指针的含义以及定义方式

(2)理解结构体的定义以及其成员的赋值和引用 3.理解课本关于单链表部分的知识 (1)掌握单链表的生成原理和过程 (2)在草稿纸上画出简单程序流程图 三、 实验内容

1.通过C语言编程,用函数实现不低于五个结点的单链表的建立:

(1)要求编写功能函数实现单链表的建立;

(2)链表中结点的数据类型为任意原子类型,以下参考算法假设的是整型;

(3)采用循环结构建表,请同学自定义循环结束标志,以下是次数循环,同学们可设计为输入某个键值结束,如数字‘-1’结束;

(4)编写访问各结点的算法,把建成的单链表顺序输出。 2.实现单链表的插入和删除算法。

3.编写主函数调用以上各算法函数,调试并运行整个程序,分析运行结果。 四、 实验原理

1.尾插法建立单链表

(1)算法原理:从一个空表开始,循环读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到循环结束为止。

(2)算法示意图如下,若要建立L=(1,2,3,4,5)的单链表,则链表结构为:

L

1 2 3 4 5 ^ (3)算法描述: //结点结构体定义 struct node {

int data;

struct node *next; };

//尾插法建立n个结点的单链表L

struct node* CreateList(struct node *L,int n) {

int i; int x;

struct node *p,*q;

L=(struct node *) malloc(sizeof(struct node)); L->data=n; L->next=NULL; q=L;

for(i=n;i>0;i--)

{

p=(struct node *) malloc(sizeof(struct node)); scanf(\ p->data=x; q->next=p; p->next=NULL; q=p; }

return L; }

2. 单链表的访问

从头节点开始,依次输出每个节点的值。 void access(struct node *h) {

struct node *p; p=h;

while(p->next!=NULL) { p=p->next;

printf(\ } }

3.单链表的插入算法

(1)算法原理:在以上算法的基础上,在指定位置插入一个新结点。首先定义一个搜索指针p,从头开始搜索(p=p->next)直到指定位置的前一个位置;然后建立新结点,修改指针使之插入。

(2)算法示意图:若要在3号位置插入一个数据域为6的结点t,则链表结构变为:

L

1 2 3 4 5 ^ 6 (3)算法描述:

//在第i个位置上插入一个新结点t

struct node * insert(struct node * L,int i) {

p=L; j=0;

while(p->next!=NULL && j

{

p=p->next; j++; } if(j!=i-1)

{

printf(\ exit(0); }

t=(struct node *)malloc(sizeof(struct node)); scanf(\ t->data=x;

t->next=p->next; p->next=t; return L; }

4.单链表的删除算法请同学们参见课本P14的算法5,注意相关定义和语句的修改和完善。 5.同学自行编写主程序,完成整个实验。 五、 实验报告要求

1.按教务处印发的标准的计算机实验报告格式填写实验报告 (1)字迹工整,内容属实规范;

(2)报告不得打印或复印,也不得抄袭或有雷同。

2.本实验为软件设计,报告中应先画程序流程图,再阐述你的设计思路和过程;

3.避免纯粹的抄写源程序,应适当地填写一些调试情况以及问题的产生原因和处理办法; 4.设计感想可包括你对本次实验的收获、启示以及不足和希望。 六、 思考题

1.如果结点指针P指向链表中某一中间结点,问:如何用P表示P之后的每一个结点? 2.单链表可以按随意顺序输出吗?

3.单链表和顺序表所花的存储空间相同吗? 七、 注意事项

1.算法和程序是不同的,课本上的算法不能直接拿来调试和运行,必须将其改写为程序; 2.算法到程序的完善方法: (1)将变量类型具体化; (2)将每一个语句标准化;

(3)补充主函数,实现变量定义、函数调用等功能。 八、 实验环境、条件

1.P4、Windows操作系统、台式计算机每人一套; 2.Turbo C/VC++ 软件编程环境;

3.学生自备实验报告纸一张,最好有U盘用以备份自己的程序。

实验二 堆栈的基本操作

一、 实验目的

1.理解堆栈的特殊性质FILO

2.熟悉顺序堆栈的结构和定义方法 3.掌握顺序堆栈的进栈和出栈操作 二、 预习要求

1.熟悉结构体和指针的用法。 2.熟悉VC环境中的调试方法。 三、 实验内容

1.通过C语言编程,实现十进制到二进制的转换。 (1)要求编写功能函数实现堆栈的定义; (2)编写进栈函数push(); (3)编写出栈函数pop(); (4)将转换结果输出。

2.选做:实现十进制到十六进制的转换。 四、 实验原理

1.算法原理:由于十进制数转换为二进制数的方法是依次将十进制数除以2取余,然后将余数倒排序。这样刚好满足“先进后出”的特性,即可以将除2取余的结果依次进栈,最后再依次出栈。

2.算法示意图:例如将十进制数13转换为二进制,其方法如下:

3.算法描述:

//顺序栈结构体定义 #define MAXNUM 20 struct stacktype {

int stack[MAXNUM]; int top; };

(1)进栈函数定义

int push(struct stacktype *s,int x) { if(s->top >= MAXNUM-1) return false; else

s->top++;

s->stack[s->top]=x; return true;


2011-软件技术基础实验指导书.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:长春市建筑工程安全防护文明施工措施费用管理规定

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: