中国地质大学数据结构实验报告Word下载.docx
- 文档编号:14792129
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:58
- 大小:198.30KB
中国地质大学数据结构实验报告Word下载.docx
《中国地质大学数据结构实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《中国地质大学数据结构实验报告Word下载.docx(58页珍藏版)》请在冰豆网上搜索。
LNode*createtail()
{
LNode*s,*r;
intx,tag;
printf("
inputthesignofending:
"
);
/*输入结束标志*/
scanf("
%d"
&
tag);
h=(LNode*)malloc(sizeof(LNode));
/*建立表头结点*/
h->
data=tag;
r=h;
inputthedata:
x);
while(x!
=tag)
/*建立循环逐个输入数据*/
s=(LNode*)malloc(sizeof(LNode));
s->
data=x;
r->
link=s;
r=s;
}
link=NULL;
returnh;
(2)输出单链表中所有结点的数据域值;
首先获得表头结点地址,然后建立循环逐个输出数据,直到地址为空。
数据输出的函数为:
voidoutput(LNode*h)
LNode*r;
inti;
for(i=1;
link!
=NULL;
i++)
%d.%d\n"
i,r->
link->
data);
r=r->
link;
}
(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;
建立两个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,建立循环扫描链表。
当当前结点指针域不为空且数据域等于x的时候,申请结点并给此结点数据域赋值为y,然后插入当前结点后面,退出函数;
当当前结点指针域为空的时候,申请结点并给此结点数据域赋值为y,插入当前结点后面,退出函数。
数据插入函数为:
voidinsert(LNode*h)
LNode*r,*s;
intx,y;
Inputthedatathatyouwanttoinsert:
\n"
x="
/*输入x值*/
y="
y);
/*输入y值*/
for(;
;
link)
if(r->
data==x)
/*当当前结点指针域不为空且数据域等于x的时候…*/
s=(LNode*)malloc(sizeof(LNode));
data=y;
link=r->
break;
link==NULL)
/*当当前结点指针域为空的时候*/
(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。
建立三个结构体指针,一个指向当前结点,另一个指向当前结点的上一结点,最后一个备用;
建立整形变量l=0;
建立循环扫描链表。
当当前结点指针域为空的时候,如果当前结点数据域等于k,删除此结点,l++,跳出循环,结束操作;
如果当前结点数据域不等于k,跳出循环,结束操作。
当当前结点指针域不为空的时候,如果当前结点数据域等于k,删除此结点,l++,继续循环操作;
如果当前结点数据域不等于k,指针向后继续扫描。
循环结束后函数返回变量l的值,l便是删除的结点的个数。
数据删除函数为:
intdel(LNode*h)
LNode*r,*s,*t;
intk,l=0;
Inputthedatathatyouwanttodelete:
k);
s=r;
)
data==k)
/*如果当前结点数据域不等于k…*/
l++;
free(r);
elsebreak;
/*如果当前结点数据域等于k…*/
else
/*当当前结点指针域不为空的时候*/
t=r;
link=t->
r=t->
free(t);
else{r=r->
s=s->
returnl;
堆栈与队列
一.实验目的
1.会定义顺序栈和链栈的结点类型。
2.掌握栈的插入和删除结点在操作上的特点。
3.熟悉对栈的一些基本操作和具体的函数定义。
4.会定义顺序队列和链队列的结点类型。
二.实验内容
程序1
该程序的功能是实现顺序栈的定义和操作。
该程序包括定义的栈结构类型以及对每一种栈操作的具体的函数定义和主函数。
/*定义DataType为int类型*/
typedefintDataType;
/*栈的结点类型*/
#defineMAXSIZE
1024
typedef
struct
{DataType
data[MAXSIZE];
int
top;
}SeqStack;
程序2:
试利用堆栈将队列中的元素逆置。
程序3:
编写括号匹配算法。
1队列的抽象数据类型定义:
ADTQueue{数据对象:
D={
|
∈ElemSet,i=1,2,...,n,n>
=0}
数据关系:
R1={<
>
∈D,i=2,...,n}
基本操作:
InitQueue(&
Q)
构造一个空队列Q
QueueEmpty(Q)
判断队列是否为空
QueueLenght(Q)
返回队列Q的元素个数,即队列的长度
GetHead(Q,&
e)
取队列Q的队头元素,并用e返回
EnQueue(&
Q,e)
将元素e入队列
DeQueue(&
Q,&
删除非空队列Q的队头元素,并用e返回其值
}ADTQueue
1.队列的表示:
队列有两种表示方法:
链队列、循环队列(顺序队列)。
(1)链队列的表示:
typedefstructQNode{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
(2)循环队列的表示
1.操作系统作业调度模拟。
编写一个程序,其功能是实现顺序栈的定义和操作。
利用堆栈将队列中的元素逆置。
编写括号匹配算法
假设有几个作业运行。
如果都需要请求CPU,则可以让作业按先后顺序排队,每当CPU处是完一个作业后,就可以接受新的作业,这时队列中队头的作业先退出进行处理。
后来的作业排在队尾。
此题算法跟模拟服务台前的排队现象问题相似,假定只有一个CPU,但为了防止一个作业占用CPU太久,可规定每个作业一次最长占用CPU的时间(称时间片),如果时间片到,作业未完成,则此作业重新进入等待队列,等到下次占有CPU时继续处理。
三.问题描述和分析
1.
实现顺序栈的定义和操作共有如下几个环节:
a)初始化顺序栈
b)检查顺序栈是否为空
c)置为空栈
d)把元素压入栈,使其成为新的栈顶元素
e)把栈顶元素弹出
f)取栈顶元素
g)输出顺序栈中的元素
2.利用堆栈队列的元素逆置的流程图如下:
N
1
2
…
n-2
n-1
n
3
………………………………………………………………
3.括号匹配问题的转化:
在算法中设置一个栈,每读入一个括号,若是右括号,则或者使置于栈顶的最急迫的期待得以消解,或者是不合法的情况,若是左括号,则作为一个新的更急迫的期待压入栈中,自然使原有的在栈中的所有未消解的期待的急迫性都降了一级。
稀疏矩阵表示、转置和乘法
一.实验目的:
通过查找相关书籍和所学过的知识,将自己的编程能力提高,以及掌握稀疏矩阵的压缩存储及基本操作,了解多维数组的逻辑结构和存储结构。
本程序是用三元组表示矩阵,并进行相关的操作,主要用到线性和链式存储法将矩阵表示出来,以及快速转置法和加法的应用。
二.实验要求:
(1)用顺序和链式存储方式存放用于存储稀疏矩阵的三元组表
(2)快速转置
(3)矩阵的乘法
课程设计的实验报告内容:
整个程序通过结构体实现题目要求的的功能(乘法除外),通过用三元组(线性和链式)来表示稀疏矩阵,并能够在屏幕上输出,且还要见其转置(分两种方法)和相加。
LMatrixAdd(LMatrix&
M1,LMatrix&
M2)实现了矩阵的加法,其中包括检验要想家的矩阵是否合格,不合格会报错。
SMatrixFastTranspose(SMatrix&
M)实现了稀疏矩阵的快速转置,用了两个动态数组查找矩阵中的非零元素,只将这些非零元素转置,是速度大大提高。
三.课程设计的原程序代码:
#include<
iostream>
#defineMaxTerms10
#defineMaxRows10
usingnamespacestd;
typedefi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国地质大学 数据结构 实验 报告