数据结构实验报告2Word文档格式.docx
- 文档编号:19656881
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:33
- 大小:64.47KB
数据结构实验报告2Word文档格式.docx
《数据结构实验报告2Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告2Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
#include<
string.h>
voidmove(chara,inti,charb){
staticintc=0;
printf("
%i.movedisk%i.from%cto%c\n"
++c,i,a,b);
}//移动
voidhanoi(intn,charx,chary,charz){
if(n==1)move(x,1,z);
else{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
}//递归
intmain(){
charx,y,z;
intn;
scanf("
%d"
&
n);
x='
x'
;
y='
y'
z='
z'
hanoi(n,x,y,z);
//调用
return0;
实验2.字符串匹配。
一.需求分析:
输入一母串,另输入一字符串,判断该字符串是不是母串的字串,若是字串,则返回母串中字串的起始位置,否则输出不是字串。
输入:
两串字符;
返回值或0。
abcdefgijkefg预测结果:
4
用查找的方法,如果遇到第一个相同的字母,则字串母串同时往后移一个。
intsubstring(strings1,strings2)//s1是字串
{
inta=0,b,j=1,i;
for(b=0;
b<
s2.length();
b++){
i=b;
for(;
a<
s1.length();
a++)
{
if(s1[a]!
=s2[i]){j=0;
continue;
}//若s1的字母和s2的字母有一个不同则进行下一个的比较
elsei++;
j++;
if(j==s2.length())returna-s2.length()+1;
//如果匹配,则返回母串中与字串开始匹配的位置
}
return0;
}
跳出循环时没有考虑到如果字串与母串相匹配则字串的字母也要向后移动一个。
字串同时后移一个如果前一个相匹配。
o(n^2);
设计算法时,即使是很简单的算法,也不能掉以轻心。
五.用户使用说明:
输入一字符串,换行,再输入一字符串,再换行,在换行,即可。
六.运算结果:
七.源代码:
iostream>
string>
usingnamespacestd;
intsubstring(strings1,strings2)//s1是字串
strings1,s2;
getline(cin,s1);
//输入母串
getline(cin,s2);
//输入字串
cout<
<
substring(s1,s2)<
endl;
实验3.停车场管理。
一.需求分析:
问题:
用栈模拟停车场,汽车到达时记录下汽车的编号以及进停车场时间,离开时,记录下离开时间并结算停车费。
需要输入的数据:
汽车离开还是到达的信息,汽车的标号,以及汽车的到达或者离的时间。
需要输出的数据:
到达:
汽车停在哪里,离开:
汽车需要交多少钱。
n=2(即有多少停车位)。
(’A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。
二.设计概要:
1.需要设计两个栈,一个作为停车场,一个作为把车退出来时,暂时停车的地方。
还需设计个队列,用来停放等进停车场的车。
2.当停车场中有空位时,才可以让其他的车进去,此时,来的车需要在便道上等待。
另外,要车子进停车场时,才计算时间。
在栈底的汽车退出来时,栈顶的车需要退出来,让栈底汽车退出来,在进入停车场,再从便道上取一辆等待停车的汽车。
三.详细设计:
1.汽车需要做成一个结构体或类:
classcar
charstatueinfo;
//停车状态。
intcarnum;
//汽车编号
inttime;
//汽车离开或到达的时间
public:
car()
{
statueinfo='
E'
carnum=0;
time=0;
car(charstatueinfo,intcarnum,inttime)
this->
statueinfo=statueinfo;
carnum=carnum;
time=time;
chargets()//取车的状态
returnstatueinfo;
intgetcarnum()//车的编号
returncarnum;
intgettime()//车离开或到达的时间
returntime;
voidsettime(inttime)//重新设置时间
voidsetcarnum(intcanum)//重新设置车的编号
voidsetcarnum(charstatueinfo)//重新设计车的状态
};
2.设计一个栈,用于停车或者暂时存放车辆。
classstack:
publiccar//栈
car*base;
car*top;
intstacksize;
stack(){//初始化
stacksize=200;
base=newcar[stacksize];
top=base;
stack(intstacksize)//设计一个新的容量的栈
stacksize=stacksize;
top=base;
~stack(){}//解放栈的空间
car*gettop()//取栈顶
returntop-1;
car*getbase()//取栈底
returnbase-1;
intgetsize()//取栈的大小
returnstacksize;
car*push(care)//压入栈
//if(top-base>
stacksize)return0;
*top=e;
top++;
returntop;
car*pop()//弹出栈
//if(top==base)return0;
top--;
3.设计一个队列,用于存放没有停车位置的车。
classqueue:
publiccar//队列
car*front;
car*rear;
queue()//初始化
front=newcar[200];
rear=front;
~queue(){}//解放队列
car*enqueue(care)//让车进入队列
*front=e;
front++;
returnfront;
car*dequeue()//让车出队列
rear++;
returnrear;
car*getfront()//取队头元素
car*getrear()//取队尾元素
1.怎样把车的所有信息绑在一起?
用一个类。
2.怎样把车所有的信息压入栈?
让栈直接在car的类上进行操作。
3.栈的压入出现问题,让top指针指向压入的元素,导致后来总出现联机错误,不能输入数据。
修改top指针的指向。
4.一开始没有设队列,把所有的车停在栈里,后来仔细看题目,才觉得有点不对。
设队列
o(n)
做题要仔细分析,不要信服气躁。
把数据压入栈后,要把指针向上移一个。
首先输入有几个停车车位,之后根据提示输入即可。
六.实验结果:
#defineSTACK_INIT_SIZE100;
#defineSTACKINCREMMNT10;
intn,carnum,time;
intt[100];
"
pleaseinputthetotalparkingspace:
cin>
>
n;
stacks;
stacks1(n);
queueq;
s1.getsize()<
while
(1)
cout<
WELCOME!
thechargeofparkingis10yuanpertimeunit.\npleaseinputyourinfomation:
\n1.arriveordepartureinformation:
A(arrive),D(depature),E(end);
\n2.yourcarnumber;
\n3.yourarriveordeparturetime:
\n"
cin>
statueinfo>
carnum>
time;
carcar1(statueinfo,carnum,time);
if(car1.gets()=='
A'
)//如果车辆到来
if(s1.gettop()-s1.getbase()<
s1.getsize())//如果停车场还有位置
{
s1.push(car1);
//把车子停进停车场
cout<
t[car1.getcarnum()]=car1.gettime();
//把进停车场的时间记录下来
thiscarnowstopinparkinglotandtheNO."
(s1.gettop()-s1.getbase())<
position\n"
}
else//如果停车场没有位置
q.enqueue(car1);
//把车停入便道中
thiscarnowstopinmakeshiftroadandtheNO."
(q.getfront()-q.getrear())<
else
D'
)//如果车子离开
while(s1.gettop()->
getcarnum()!
=car1.getcarnum())
s.push(*(s1.gettop()));
s1.pop();
}//当它不是停在栈顶,则把其他的车退出来停入另一个栈中
s1.pop();
//弹出要离开的车
while(s.gettop()!
=s.getbase())
s1.push(*(s.gettop()));
s.pop();
}//把退出的车停回去
if(q.getfront()!
=q.getrear())//如果还有车在等停车
{
t[q.getrear()->
getcarnum()]=car1.gettime();
//把他进入停车场的时间记录下来
q.getrear()->
getcarnum()<
:
"
t[q.getrear()->
getcarnum()]<
s1.push(*(q.getrear()));
q.dequeue();
}//把等待进入停车场的车停入停车场
youshouldpay"
(car1.gettime()-t[car1.getcarnum()])*10<
yuan.ThankYouforYourCustom!
if(statueinfo=='
)break;
elsecout<
thereissomethingwrong.pleaseinputagain!
//结束
delete&
s1;
s;
实验4.程序分析
读入一个c程序,统计程序中代码,注释和空行的行数以及行数的个数以及平均行数,并利用统计信息分析评价该代码的风格。
一个c程序的文件名。
统计信息以及评价。
测试的程序:
stdlib.h>
intstrc(chara[10],charb[15],intn)
inti;
for(i=0;
i<
i++)
if(a[i]!
=b[i])returni;
//查找到第一个不同的字母则返回
//字符串比较
intmain()
chara[10];
//charb[15];
intn;
scanf("
%s"
a);
//输入一字符串
n=strc(a,"
void"
6);
%d\n"
n);
//输出结果
二.概要设计:
1.需要用到文件的输入输出相关的知识,当遇到‘\n’表示一行,与这种方法计算行数
2.当遇到‘\\’表一注释行,当一行中只有‘\n’表示空行,还需要设计一个计算函数的函数来计算程序中共有多少个函数
1.字符串比较的函数
intstrc(chara[100],charb[8],intn)
//字符串的比较。
//返回到第一个不相等的字母的位置。
2.函数平均长度的评价表。
charG_Cclass(ints)
//平均代码行的等级关系。
if(s<
=15&
&
s>
=10)return'
if((s<
=9&
=8)||(s>
=16&
s<
=20))return'
B'
if((s>
=5&
=7)||(s>
=21&
=24))return'
C'
if(s==5||s==24)return'
elsereturn'
//如果以上条件都不满足,则返回E.
3.占总行数比率的评价关系:
charG_ZBclass(doubles)
//注释行以及空白行的等级关系。
if(s>
=0.15&
=0.25)return'
=0.14&
=0.10)||(s>
=0.26&
=0.30))return'
=0.05&
=0.09)||(s>
=0.31&
=0.35))return'
if(s==0.05||s==0.35)return'
//以上条件都不满足,返回E。
4.判断是不是关键字
intCS(chard[])
//判断语句的前一个单词是不是关键词。
inta=0,i;
if(strc(d,"
void"
5)==4||strc(d,"
int"
5)==3||strc(d,"
char"
double"
8)==6||strc(d,"
float"
6)==5||strc(d,"
bool"
5)==4)
a++;
strlen(d)-2;
if(d[i]=='
('
){a++;
break;
if(a==2)return2;
elsereturn0;
//a为标志。
5.判断是不是函数:
intG_F(FILE*fp,charfile[])
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告