打印 软件开发技术基础 实验报告Word文档格式.docx
- 文档编号:1556967
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:64
- 大小:277.10KB
打印 软件开发技术基础 实验报告Word文档格式.docx
《打印 软件开发技术基础 实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《打印 软件开发技术基础 实验报告Word文档格式.docx(64页珍藏版)》请在冰点文库上搜索。
源程序:
#include<
iostream>
usingnamespacestd;
template<
classT>
classsq_List
{
private:
intmm;
intnn;
T*v;
public:
sq_List(){mm=0;
nn=0;
return;
}
sq_List(int);
voidprt_sq_List();
intflag_sq_List();
voidins_sq_List(int);
voiddel_sq_List(int);
intsch_sq_List(T);
};
sq_List<
T>
:
sq_List(intm)
mm=m;
v=newT[mm];
nn=0;
return;
voidsq_List<
prt_sq_List()
inti;
cout<
<
"
nn="
nn<
endl;
for(i=0;
i<
nn;
i++)
cout<
v[i]<
intsq_List<
flag_sq_List()
if(nn==mm)return(-1);
if(nn==0)return(0);
return
(1);
ins_sq_List(inti)
intk;
Tx;
for(k=0;
k<
i;
k++)
{
输入要插入的数据元素:
;
cin>
>
x;
v[k]=x;
nn++;
}
del_sq_List(inti)
if(nn==0)
underflow!
if((i<
1)||(i>
nn))
Notthiselementinthelist!
return;
for(k=i;
v[k-1]=v[k];
nn=nn-1;
sch_sq_List(Tx)
blanklist"
for(intk=0;
if(x==v[k])return(k);
break;
return(-1);
intmain(intargc,char*argv[])
sq_List<
int>
s(10);
inti,j,x;
第1次输出表中对象:
s.prt_sq_List();
输入要插入表中的数据元素个数:
cin>
s.ins_sq_List(i);
第2次输出表中对象:
输入要删除的数据个数:
j;
输入要删除的数据元素位置"
s.del_sq_List(i);
第3次输出表中对象:
输入要查找的数据元素:
i=s.sch_sq_List(x);
if(i==-1)
表中没有此元素!
else
此时此元素在表中的位置为:
i+1<
return0;
运行结果如下:
心得体会:
通过这次实验,我参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。
这个在以前都没想到,这次学到了很多。
实验二栈、队列的操作
班级0830902学号2009212666姓名唐海东
第六周星期一、9-11节成绩
参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。
1.堆栈类测试和应用问题。
要求:
定义数据元素的数据类型为如下形式的结构体:
typedefstruct
{chartaskname[10];
//任务名
inttaskno;
//任务号
}DataType;
设计一个包含5个数据元素的测试数据,并设计一个主函数实现依次把5个数据元素入栈,然后出栈输出栈中的数据元素并在屏幕上显示。
2.队列类测试和应用问题。
设计一个主函数对循环队列类和链式队列类代码进行测试.测试方法为:
依次把数据元素1,2,3,4,5入队,然后出队中的数据元素并在屏幕上显示。
1)栈和队列的长度都由自己定;
2)写出完整的程序并能调试通过即可。
3)重点理解栈、队列和串的算法思想,能够根据实际情况选择合适的存储结构。
4)栈、队列的算法是后续实验的基础(树、图、查找、排序等)。
⑴建立一个空栈:
定义构造函数对栈初始化,动态申请一个容量为m的存储空间,栈顶指针置0,即栈为空
⑵入栈运算:
首先判断栈顶指针是否已经指向存储空间的最后一个位置,若是,则提示“上溢错误”;
若否,将栈顶指针加一,将新元素插入到栈顶指针指向的位置
⑶退栈运算:
首先判断栈顶指针是否为0,若是,则提示“下溢”错误;
若否,将栈顶元素赋给一个指定变量并将栈顶指针推一
⑷建立一个循环队列存储空间:
用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素
⑸循环队列入队:
首先判断循环队列是否满,若循环队列非空(s=1)且队尾指针等于排头指针则提示“上溢”错误;
否则将队尾指针加一(rear=rear+1),并当rear=m+1时置rear=1,将新元素插入到队尾指针指向的位置,并且置循环队列非空标志
⑹循环队列退队:
首先判断循环队列是否非空,当循环队列为空(s=0)时,则提示“下溢”错误;
若否将排头指针进一(front=front+1),并当front=m+1时置front=1,再将排头指针指向的元素赋给指定的变量,最后判断退队后循环队列是否为空,当front=rear时置循环队列空标志(s=0)
⑺建立一个链式队列存储空间:
带链队列初始化:
排头指针front和队尾指针rear均置为空
⑻链式队列入队:
首先申请一个新节点,置新节点数据域值,置新节点指针域值为空,判断原队列是否为空,若为空,则将排头指针指向新节点,若否则将原队尾节点的指针指向新节点,最后再次将队尾指针指向新节点
⑼链式队列退队:
首先判断原队列是否为空,若为空(front=NULL),则提示“下溢”错误;
若否,将排头元素赋给指定变量,用临时节点p指向排头节点,并将排头指针指向下一结点,释放临时节点空间p,判断队列是否为空,若是将队尾指针也置为空,返回删除节点数据域值
1.建立空栈,分别进行入栈和退栈运算
2.建立循环队列,分别进行循环队列的入队和退队运算
3.建立链式队列,分别进行链式队列的入队和退队运算
1.栈运算:
}DT;
classflag
inttop;
T*DT_var;
voidinput_flag();
flag(int);
voidpri_flag();
intsearch_flag();
voidins_flag(T);
Tdel_flag();
Tread_flag();
flag<
flag(intm)
DT_var=newT[mm];
top=0;
voidflag<
pri_flag()
top="
top<
DTdt4=DT_var[top-1];
栈顶元素:
dt4.taskname<
"
----"
<
dt4.taskno<
intflag<
search_flag()
if(top==mm)return(-1);
if(top==0)return(0);
ins_flag(Tx)
if(top==mm)
{cout<
上溢错误!
top=top+1;
DT_var[top-1]=x;
Tflag<
del_flag()
Ty;
if(top==0)
下溢错误!
y=DT_var[top-1];
top=top-1;
returny;
read_flag()
栈为空!
return(DT_var[top-1]);
input_flag()
5;
{cout<
inputtaskname"
;
cin>
DT_var[i].taskname;
cout<
inputtaskno"
DT_var[i].taskno;
top++;
intmain(intargc,char*argv[])
flag<
DT>
s(5);
s.input_flag();
输出栈顶指针与栈中的元素:
s.pri_flag();
DTdt3=s.read_flag();
输出退栈元素:
for(inti=0;
{
DTdt1=s.del_flag();
cout<
dt1.taskname<
endl;
dt1.taskno<
运行结果:
2.循环队列运算:
classsq_Queue
intfront;
intrear;
ints;
T*q;
sq_Queue(int);
voidprt_sq_Queue();
intflag_sq_Queue();
voidins_sq_Queue(T);
Tdel_sq_Queue();
sq_Queue<
sq_Queue(intm)
q=newT[mm];
front=mm;
rear=mm;
s=0;
voidsq_Queue<
prt_sq_Queue()
front="
front<
rear="
rear<
if(s==0){cout<
队列为空!
i=front;
do{
i++;
if(i==mm+1)i=1;
q[i-1]<
}while(i!
=rear);
intsq_Queue<
flag_sq_Queue()
if((s==1)&
&
(rear=front))return(-1);
if(s==0)return(0);
ins_sq_Queue(Tx)
(rear==front))
Queue_overflow!
rear++;
if(rear==mm+1)rear=1;
q[rear-1]=x;
s=1;
Tsq_Queue<
del_sq_Queue()
if(s==0)
Queue_underflow!
return(0);
front++;
if(front==mm+1)front=1;
y=q[front-1];
if(front==rear)s=0;
return(y);
sq_Queue<
q(5);
输出排头与队尾指针以及队中元素:
q.prt_sq_Queue();
q.ins_sq_Queue
(1);
q.ins_sq_Queue
(2);
q.ins_sq_Queue(3);
q.ins_sq_Queue(4);
q.ins_sq_Queue(5);
输出退队元素:
for(inti=0;
3;
q.del_sq_Queue()<
再次输出排头与队尾指针以及队中元素:
3.链式队列运算:
structnode
{Td;
node*next;
classlinked_Queue
node<
*front;
*rear;
linked_Queue();
voidprt_linked_Queue();
intflag_linked_Queue();
voidins_linked_Queue(T);
Tdel_linked_Queue();
linked_Queue<
linked_Queue()
front=NULL;
rear=NULL;
voidlinked_Queue<
prt_linked_Queue()
node<
*p;
p=front;
if(p==NULL){cout<
空队列!
do{cout<
p->
d<
p=p->
next;
}while(p!
=NULL);
intlinked_Queue<
flag_linked_Queue()
{if(front==NULL)return(0);
return
(1);
ins_linked_Queue(Tx)
p=newnode<
p->
d=x;
next=NULL;
if(rear==NULL)
front=p;
rear->
next=p;
rear=p;
Tlinked_Queue<
del_linked_Queue()
*q;
if(front==NULL){cout<
空队!
y=front->
d;
q=front;
front=q->
deleteq;
if(front==NULL)rear=NULL;
linked_Queue<
q;
q.ins_linked_Queue
(1);
q.ins_linked_Queue
(2);
q.ins_linked_Queue(3);
q.ins_linked_Queue(4);
q.ins_linked_Queue(5);
输出带链队列中的元素:
q.prt_linked_Queue();
if(q.flag_linked_Queue())cout<
输出退队元素:
q.del_linked_Queue()<
再次输出带链队列中的元素:
这次实验让我看书时对栈的误解纠正了过来,这正验证了实践检验真理的方法。
我一定在学习中多上机,多实践。
实验三停车场管理
第七周星期一、9-11节成绩
设计一个停车场管理程序
设停车场(如图所示)内只有一个可停放n辆汽车的狭长的通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可开入;
当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入车场的车辆必须先退出车场为它让路,待该辆车开出大门外后,为它让路的车辆再按原次序进入车场。
在这里假设汽车不能从便道上开走。
试设计一个停车场管理程序(这里只是一个假想的停车管理,并不代表实际的停车场管理)。
试为停车场编制按上述要求进行管理的模拟程序。
本程序中,栈采用顺序存储结构,队列用链式存储结构。
存储
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打印 软件开发技术基础 实验报告 软件 开发 技术 基础 实验 报告