《软件技术基础》实验指导学生Word文档格式.docx
《《软件技术基础》实验指导学生Word文档格式.docx》由会员分享,可在线阅读,更多相关《《软件技术基础》实验指导学生Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
![《软件技术基础》实验指导学生Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/16/c2736c32-601c-40f2-be99-905b9da6dd6d/c2736c32-601c-40f2-be99-905b9da6dd6d1.gif)
2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。
编写实现该循环队列的入队和出队操作的算法。
提示:
队空的条件:
sq->
quelen==0;
队满的条件:
quelen==m。
循环队列)
实验三串
1.熟悉串的顺序存储结构
2.掌握串的基本运算及应用
1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。
模式匹配)
2.编写一个算法voidstrDelete(seqstring*S,intpos,intlen),从串S中删除第pos个字符开始长度为len的子串。
要求:
1≤pos≤S->
length-len+1(文件夹:
删除子串)
实验四数组
1.熟悉数组的结构
2.掌握矩阵的压缩存储
3.能够对数组和矩阵的压缩存储进行运算
1.若在矩阵Am×
n中存在一个元素A[i][j],其满足A[i][j]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。
用二维数组存储矩阵Am×
n,设计算法求出矩阵中所有马鞍点。
找马鞍点)
2.A和B是两个n×
n阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。
对称矩阵相乘)
实验五树
1.熟悉二叉树的链式存储结构
2.掌握二叉树的建立、深度优先递归遍历等算法
3.能够利用遍历算法实现一些应用
1.已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。
即按要求交换二叉树及子树的左、右子树。
交换左右子树)
2.采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。
统计二叉树结点)
实验六图
1.熟悉图的邻接矩阵和邻接表的存储结构
2.熟悉图的邻接矩阵和邻接表的建立算法
3.掌握图的遍历算法
1.无向图采用邻接矩阵存储,编写深度优先搜索遍历算法,从不同的顶点出发对无向图进行遍历。
无向图邻接矩阵)
实验七排序
1.熟悉各种内部排序算法
2.能够编写程序显示排序过程中各趟排序的结果
3.能够编写一些排序的算法
1.采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。
希尔排序)
2.编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。
双向起泡排序)
实验八查找
1.熟悉线性表、二叉排序树和散列表的查找
2.能够编写一些查找的算法
1.18个记录的关键字为22、12、13、8、9、20、33、42、44、38、24、48、60、58、74、49、86、53,编写分块查找的算法进行查找。
分块查找)
2.编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数。
判断二叉排序树)
附录:
原代码
实验一:
第1题
(1)
//顺序表逆置的程序代码
#include<
stdio.h>
malloc.h>
//顺序表结构类型定义
typedefchardatatype;
constintmaxsize=1024;
typedefstruct
{datatypedata[maxsize];
intlast;
}sequenlist;
voidcreate(sequenlist*&
);
voidprint(sequenlist*);
voidinvert(sequenlist*);
voidmain()
{
sequenlist*L;
create(L);
//建立顺序表
print(L);
//输出顺序表
invert(L);
//调用顺序表逆值的函数
}
L)
L=(sequenlist*)malloc(sizeof(sequenlist));
L->
last=0;
charch;
while((ch=getchar())!
='
*'
)
{
L->
last++;
data[L->
last]=ch;
}
voidprint(sequenlist*L)
for(inti=1;
i<
=L->
last;
i++)
printf("
%2c"
L->
data[i]);
printf("
\n"
//顺序表逆置
voidinvert(sequenlist*L)
intn=L->
last/2;
=n;
{
chartemp=L->
data[i];
data[i]=L->
last-i+1];
last-i+1]=temp;
第1题
(2)
//单链表逆置的程序代码
//单链表结构类型定义
typedefstructnode
datatypedata;
structnode*next;
}linklist;
voidcreate(linklist*&
voidprint(linklist*);
voidinvert(linklist*);
linklist*head;
create(head);
print(head);
invert(head);
//调用单链表逆置的函数
//采用尾插法建立具有头结点的单链表
head)
linklist*s,*r;
head=(linklist*)malloc(sizeof(linklist));
//生成头结点1
r=head;
//r指针指向头结点
)//输入abc
s=(linklist*)malloc(sizeof(linklist));
//生成新结点2
s->
data=ch;
//将输入的字符赋给新结点的数据域
r->
next=s;
//新结点插入表尾3
r=s;
//r指针指向表尾4
r->
next=NULL;
//表尾结点的指针域置空5
//输出单链表
voidprint(linklist*head)
linklist*p=head->
next;
//p指向第一个结点
while(p!
=NULL)
p->
data);
//数据域输出
p=p->
//指针域加一
//单链表逆置
voidinvert(linklist*head)
intn=head->
for(inti=1;
chart=head->
head->
data[i]=head->
data[head->
last-i+1]=t;
linklist*p,*q,*r;
p=head->
q=p->
while(q!
r=q->
q->
next=p;
p=q;
q=r;
head->
next->
第2题
//分解单链表的程序代码
//链表结构类型定义
{datatypedata;
voidresolve(linklist*,linklist*,linklist*,linklist*);
voidinsert(linklist*,linklist*);
voidprint1(linklist*);
voidprint2(linklist*);
{linklist*head,*letter,*digit,*other;
print1(head);
letter=(linklist*)malloc(sizeof(linklist));
//建立3个空循环链表
letter->
next=letter;
digit=(linklist*)malloc(sizeof(linklist));
digit->
next=digit;
other=(linklist*)malloc(sizeof(linklist));
other->
next=other;
resolve(head,letter,digit,other);
//调