计算机软件技术基础上机报告.docx
- 文档编号:6520209
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:38
- 大小:82.82KB
计算机软件技术基础上机报告.docx
《计算机软件技术基础上机报告.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础上机报告.docx(38页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础上机报告
《软件开发技术基础》
实验报告
学院:
自动化学院
班级:
0831004班
学号:
2010213157
姓名:
彭威威
目录
⏹《软件开发技术基础》1
⏹实验报告1
⏹实验一线性表的操作(2学时)3
⏹实验二栈的操作(3学时)7
⏹实验三队列的操作(3学时)11
⏹实验四树和二叉树的操作(3学时)18
⏹实验五查找算法实现(2学时)22
⏹实验六排序综合实验(3学时)26
实验一线性表的操作(2学时)
班级0831004学号2010213157姓名彭威威
第4周星期四1、2节成绩
实验类型:
验证性
实验要求:
必修
实验学时:
2学时
一、实验目的:
参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。
二、实验要求:
1、掌握线性表顺序表类和链表类的特点。
掌握线性表的常见算法。
2、提交实验报告,报告内容包括:
目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。
三、实验内容:
设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:
1)建立一个线性表,首先依次输人整数数据元素(个数根据自己的需要键盘给定)
2)删除指定位置的数据元素(指定元素位置通过键盘输入)再依次显示删除后的线性表中的数据元素。
3)查找指定数据的数据元素(指定数据的大小通过键盘输入),若找到则显示位置,若没有找到就显示0。
四、要求:
1)采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。
2)写出完整的程序并能调试通过即可
五、实验原理:
(1)线性表在顺序存储下的插入运算①首先处理以下3种异常情况:
当存储空间已满(n=m)时为“上溢”错误,不能进行插入,算法解释。
当i>n时认为在最后一个元素之后(第n+1个元素之前)插入。
当i<1时认为在第一个元素之前插入。
②从最后一个元素开始,直到第i个元素,其中每一个元素均往后一点一个位置。
③最后将新元素插入到第i个位置,并将线性表的长度增加1。
(2)线性表在顺序存储下的删除运算①首先出来以下2种异常情况:
当线性表为空(n=0)时为“上溢”错误,不能进行插入,算法结束。
当i<1或i>n时,认为在最后一个元素之后(第n+1个元素之前)插入。
②从第i+1个元素开始,直到最后一个元素,其中每一个元素均一次往前移动一个位置。
③最后将线性表的长度减小1。
(3)线性表在顺序存储下的查找运算
将所要查找的数与线性表里面的数比较,当找到时输出其所在位置,否则输出0
#include
usingnamespacestd;
template
classsq_LList
{private:
intmm;
intnn;
T*v;
public:
sq_LList(){mm=0;nn=0;return};
sq_LList(int);
voidprt_sq_LList();
voidins_sq_LList(int,T);
intsearch_sq_LList(T);
voiddel_sq_LList(int);
};
//建立空顺序表
template
sq_LList
:
sq_LList(intm)
{mm=m;
v=newT[mm];
nn=0;
return;
}
//顺序输出顺序表的长度和元素
template
voidsq_LList
:
prt_sq_LList()
{inti;
cout<<"nn="< for(i=0;i cout< return; } //在顺序表的指定元素前插入元素 template voidsq_LList : ins_sq_LList(inti,Tb) {intk; if(nn==mm) { cout<<"overflow! "< return; } if(i>nn) i=nn+1; if(i<1) i=1; for(k=nn;k>=i;k--) v[k]=v[k-1]; v[i-1]=b; nn=nn+1; return; } //在顺序表中查找指定数据 template intsq_LList : search_sq_LList(Tb) {inti; for(i=0;i if(v[i]==b) returni+1; return0; } //在顺序表中删除指定未指定的元素 template voidsq_LList : del_sq_LList(inti) {intk; if(nn==0) { cout<<"underflow! "< return; } if((i<1)||(i>nn)) { cout<<"Notthiselementinthelist! "< return; } for(k=i;k v[k-1]=v[k]; nn=nn-1; return; } intmain() { inti,k,temp1,temp2,temp3; sq_LList cout<<"=========================="< cout<<"输入数据的个数k: "< cin>>k; cout<<"=========================="< cout<<"输入k个整型数据元素: "< for(i=1;i<=k;i++) { cin>>temp1; s1.ins_sq_LList(i,temp1); } cout<<"=========================="< cout<<"输出顺序表对象s1: "< s1.prt_sq_LList(); cout<<"=========================="< cout<<"指定删除元素的位置: "< cin>>temp2; s1.del_sq_LList(temp2); cout<<"再次输出顺序表对象s1: "< s1.prt_sq_LList(); cout<<"=========================="< cout<<"输入要查找的数据: "< cin>>temp3; cout<<"该数的位置为: "< return0; } 实验二栈的操作(3学时) 班级0831004学号2010213157姓名彭威威 第8周星期五7、8节成绩 实验类型: 验证性 实验要求: 必修 实验学时: 3学时 一、实验目的: 参照给定的栈类的程序样例,验证给出的栈的常见算法。 二、实验要求: 1、掌握栈的特点。 掌握特殊线性表的常见算法。 2、提交实验报告,报告内容包括: 目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 堆栈类测试和应用问题。 要求: (1)设计一个主函数实现对顺序堆栈类和链式堆栈类代码进行测试。 测试方法为: 依次把数据元素1,2,3,4,5入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 (2)定义数据元素的数据类型为如下形式的结构体: typedefstruct {chartaskname[10];//任务名 inttaskno; //任务号 }DataType; 设计一个包含5个数据元素的测试数据,并设计一个主函数实现依次把5个数据元素入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 四、要求 1)栈的长度都由自己定; 2)写出完整的程序并能调试通过即可。 3)重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 五、实验原理: 链式堆栈类①栈的初始化,即建立一个空栈的顺序存储空间②入栈运算,是指在栈顶位置插入一个新元素③退栈运算,即取出栈顶元素赋给一个指定的变量④读栈顶元素,是指将栈顶元素赋给一个指定的变量 链栈: #include usingnamespacestd; template structnode { Td; node*next; }; template classlinked_Stack { private: node public: linked_Stack(); voidprt_linked_Stack(); voidins_linked_Stack(T); intflag_linked_Stack(); Tdel_linked_Stack(); Tread_linked_Stack(); }; //链栈初始化 template linked_Stack : linked_Stack() { top=NULL; return; } //检测链栈的状态 template intlinked_Stack : flag_linked_Stack() { if(top==0) return(0); return (1); } //顺序输出栈中的元素 template voidlinked_Stack : prt_linked_Stack() { node p=top; if(p==NULL) { cout<<"Stackempty! "< return; } do{ cout< p=p->next; }while(p! =NULL); return; } //入栈 template voidlinked_Stack : ins_linked_Stack(Tx) {node p=newnode p->d=x; p->next=top; top=p; return; } //退栈 template Tlinked_Stack : del_linked_Stack() {Ty; node if(top==NULL) { cout<<"Stackempty! "< return(0); } q=top; y=q->d; top=top->next; deleteq; return(y); } //读取栈顶元素 template Tlinked_Stack : read_linked_Stack() { if(top==NULL) { cout<<"Stackempty! "< return(0); } return(top->d); } intmain() { linked_Stack s.ins_linked_Stack (1); s.ins_linked_Stack (2); s.ins_linked_Stack(3); s.ins_linked_Stack(4); s.ins_linked_Stack(5); cout<<"=========================="< cout<<"输出栈中的元素: "< s.prt_linked_Stack(); cout<<"=========================="< if(s.flag_linked_Stack()) cout<<"栈顶元素: "< if(s.flag_linked_Stack()) cout<<"退栈元素: "< if(s.flag_linked_Stack()) cout<<"退栈元素: "< if(s.flag_linked_Stack()) cout<<"退栈元素: "< cout<<"=========================="< cout<<"再次输出栈中的元素: "< s.prt_linked_Stack(); return0; } 实验三队列的操作(3学时) 班级0831004学号2010213157姓名彭威威 第9周星期四9-11节成绩 实验类型: 验证性 实验要求: 必修 实验学时: 3学时 一、实验目的: 参照给定的队列类的程序样例,验证给出的队列的常见算法,并结合线性表类实现有关串的操作。 二、实验要求: 1、掌握队列、串的特点。 掌握特殊线性表的常见算法。 2、提交实验报告,报告内容包括: 目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 队列类测试和应用问题。 要求: 设计一个主函数对循环队列类和链式队列类代码进行测试.测试方法为: 依次把数据元素1,2,3,4,5入队,然后出队中的数据元素并在屏幕上显示。 四、要求: 1)队列的长度都由自己定; 2)写出完整的程序并能调试通过即可。 3)重点理解队列和串的算法思想,能够根据实际情况选择合适的存储结构。 4)栈、队列的算法是后续实验的基础(树、图、查找、排序等)。 五、实验原理: (1)、循环队列类①入队运算首先判断循环队列是否满,当循环队列非空(算)且队尾指针等于排头指针时,说明循环队列已满,不能进行入队运算。 这种情况称为“上溢”,此时算法结束然后敬爱那个队尾指针进一(rear=rear+1),并且置循环队列非空标志最后将新元素插入到队尾指针指向的位置,并且置循环队列非空标志②退队运算首先判断循环队列是否为空,当循环队列为空(s=0)时,不能进行腿肚运算。 这种情况称为“下溢”,此时算法结束然后将排头指针进一(front=front+1),并当front=m+1时置front=1再将排头指针指向元素赋给指定的变量最后判断退队后循环队列是否为空。 当front=rear时置循环队列空标志(s=0) (2)、带链队列①队列的初始化,建立一个空队列的顺序存储空间②入队运算,指在循环队列的队尾加入一个新元素③退队运算,在循环队列的派头位置退出一个元素并赋给指定的变量 循环队列类: #include usingnamespacestd; template classsq_Queue { private: intmm; intfront; intreal; ints; T*q; public: sq_Queue(int); voidprt_sq_Queue(); voidins_sq_Queue(T); Tdel_sq_Queue(); }; //建立空队列 template sq_Queue : sq_Queue(intm) { mm=m; q=newT[mm]; front=mm; real=mm; s=0; return; } //输出排头与队尾指针以及队中的元素 template voidsq_Queue : prt_sq_Queue() { inti; cout<<"front="< cout<<"real="< if(s==0) { cout<<"Queueempty"< return; } i=front; do{ i=i+1; if(i==mm+1) i=1; cout< }while(i! =real); return; } //入队 template voidsq_Queue : ins_sq_Queue(Tx) { if((s==1)&&(real==front)) { cout<<"Queueoverflow! "< return; } real=real+1; if(real==mm+1) real=1; q[real-1]=x; s=1; return; } //退队 template Tsq_Queue : del_sq_Queue() { Ty; if(s==0) { cout<<"Queueunderflow! "< return(0); } front=front+1; if(front==mm+1) front=1; y=q[front-1]; if(front==real) s=1; return(y); } intmain() { sq_Queue cout<<"==============================="< cout<<"输出排头与队尾指针以及队中的元素: "< 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); cout<<"==============================="< cout<<"输出排头与队尾指针以及队中的元素: "< q.prt_sq_Queue(); cout<<"==============================="< cout<<"输出退队元素: "< cout< cout< cout< cout<<"==============================="< cout<<"再次输出排头与队尾指针以及队中的元素: "< q.prt_sq_Queue(); return0; } 链式队列: #include usingnamespacestd; template structnode {Td; node*n; }; template classQ {private: node node public: Q(); voidprt(); intflag(); voidin(T); Tdel(); }; //链队的初始化 #include usingnamespacestd; template structnode {Td; node*n; }; template classQ {private: node node public: Q(); voidprt(); intflag(); voidin(T); Tdel(); }; //链队的初始化 template Q : Q() {a=NULL; b=NULL; return; } //顺序输出队列中的元素 template voidQ : prt() {node p=a; if(p==NULL) {cout<<"empty! "< return; } do{ cout< p=p->n; }while(p! =NULL); return; } //检测链队的状态 template intQ : flag() {if(a==NULL) return(0); return (1); } //入队 template voidQ : in(Tx) {node p=newnode p->d=x; p->n=NULL; if(b==NULL)a=p; elseb->n=p; b=p; return; } //退队 template TQ : del() {Ty; node if(a==NULL) { cout<<"empty! "< return(0); } y=a->d; q=a; a=q->n; deleteq; if(a==NULL) b=NULL; return(y); } intmain() { Q q.in (1);q.in (2);q.in(3);q.in(4);q.in(5); cout<<"============================"< cout<<"输出带链队列中的元素: "< q.prt(); cout<<"============================"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 上机 报告