面向对象程序设计课程实验报告_第1页
面向对象程序设计课程实验报告_第2页
面向对象程序设计课程实验报告_第3页
面向对象程序设计课程实验报告_第4页
面向对象程序设计课程实验报告_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

--.---.考试资料..z.--.--.考试资料.课程实验报告课程名称:面向对象程序设计院系:专业班级:**:姓名:指导教师:目录实验一.面向过程的整型栈编程11.需求分析11.1题目要求11.2需求分析12.系统设计22.1概要设计22.2详细设计34.软件测试45.特点与缺乏45.1技术特点45.2缺乏和改进的建议56.过程和体会56.1遇到的主要问题和解决方法56.2课程设计的体会57.源码和说明57.1文件清单及其功能说明57.2用户使用说明书57.3源代码5实验二.面向对象的整型栈编程121.需求分析121.1题目要求121.2需求分析122.系统设计132.1概要设计132.2详细设计133.软件开发144.软件测试145.特点与缺乏145.1技术特点145.2缺乏和改进的建议156.过程和体会156.1遇到的主要问题和解决方法156.2课程设计的体会157.源码和说明157.1文件清单及其功能说明157.2用户使用说明书157.3源代码15实验三.基于算符重载的整型栈编程191.需求分析191.1题目要求191.2需求分析192.系统设计202.1概要设计202.2详细设计203.软件开发204.软件测试205.特点与缺乏215.1技术特点215.2缺乏和改进的建议216.过程和体会216.1遇到的主要问题和解决方法216.2课程设计的体会217.源码和说明217.1文件清单及其功能说明217.2用户使用说明书217.3源代码21实验四.面向对象的整型队列编程251.需求分析251.1题目要求251.2需求分析252.系统设计263.软件开发264.软件测试265.特点与缺乏265.1技术特点265.2缺乏和改进的建议266.过程和体会266.1遇到的主要问题和解决方法266.2课程设计的体会277.源码和说明277.1文件清单及其功能说明277.2用户使用说明书277.3源代码27实验五.基于组合的整型队列编程311.需求分析311.1题目要求311.2需求分析312.系统设计313.软件开发324.软件测试325.特点与缺乏325.1技术特点325.2缺乏和改进的建议326.过程和体会326.1遇到的主要问题和解决方法326.2课程设计的体会327.源码和说明337.1文件清单及其功能说明337.2用户使用说明书337.3源代码33实验六.基于继承的整型队列编程371.需求分析371.1题目要求371.2需求分析382.系统设计383.软件开发384.软件测试385.特点与缺乏385.1技术特点385.2缺乏和改进的建议386.过程和体会396.1遇到的主要问题和解决方法396.2课程设计的体会397.源码和说明397.1文件清单及其功能说明397.2用户使用说明书397.3源代码39-.z.--.考试资料.实验一.面向过程的整型栈编程1.需求分析1.1题目要求整型栈是一种先进后出的存储构造,对其进展的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。整型栈类型及其操作函数采用非面向对象的纯C语言定义,请将完成上述操作的所有函数采用面向过程的方法编程,然后写一个main函数对栈的所有操作函数进展测试。structSTACK{int*elems; //申请内存用于存放栈的元素intma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;};voidinitSTACK(STACK*constp,intm);//初始化p指空栈:可存m个元素voidinitSTACK(STACK*constp,constSTACK&s);//用s初始化p指空栈intsize(constSTACK*constp); //返回p指的栈的最大元素个数ma*inthowMany(constSTACK*constp); //返回p指的栈的实际元素个数posintgetelem(constSTACK*constp,int*); //取下标*处的栈元素STACK*constpush(STACK*constp,inte); //将e入栈,并返回pSTACK*constpop(STACK*constp,int&e); //出栈到e,并返回pSTACK*constassign(STACK*constp,constSTACK&s);//赋给p指栈,返回pvoidprint(constSTACK*constp); //打印p指向的栈元素voiddestroySTACK(STACK*constp); //销毁p指向的栈,释放1.2需求分析本实验需要实现栈的功能的操作,如元素的进栈,连续进栈,出栈和连续出栈,所以需要设计两个栈,在完成初始化后直接在程序里给定栈内元素。2.系统设计2.1概要设计函数构造图见图1.1图1.1总体流程图见图1.2图1.22.2详细设计voidinitSTACK(STACK*constp,intm)入口参数:intm出口参数:无功能:初始化栈,可存m个元素voidinitSTACK(STACK*constp,constSTACK&s)入口参数:constSTACK&s出口参数:无功能:用s初始化p指空栈intsize(constSTACK*constp)入口参数:无出口参数:intma*功能:返回p指的栈的最大元素个数ma*inthowMany(constSTACK*constp)入口参数:无出口参数:intpos功能:返回p指的栈的实际元素个数posintgetelem(constSTACK*constp,int*)入口参数:int*出口参数:elem[m]功能:取下标*处的栈元素STACK*constpush(STACK*constp,inte)入口参数:inte出口参数:(*this)功能:将e入栈,并返回pSTACK*constpop(STACK*constp,int&e)入口参数:int&e出口参数:(*this)功能:出栈到e,并返回pSTACK*constassign(STACK*constp,constSTACK&s)入口参数:STACK&s出口参数:(*this)功能:赋s给p指栈,返回pvoidprint(constSTACK*constp)入口参数:无出口参数:无功能:打印p指向的栈元素voiddestroySTACK(STACK*constp)入口参数:出口参数:功能:销毁p指向的栈,释放3.软件开发在Codeblocks编译环境下,使用C++语言编写。4.软件测试测试结果见图1.3图1.35.特点与缺乏5.1技术特点完成了实验的所有要求,没有错误的地方。5.2缺乏和改进的建议没有做人机交互界面,无法自由选择入栈的数据;同时注释较少,对于程序不了解的人可能需要花费更多时间去了解。6.过程和体会6.1遇到的主要问题和解决方法输出结果数字与预计不同,检查后发现原因是变量初始值未设置。6.2课程设计的体会本次实验主要还是通过回忆C语言中栈的知识完成在C++上的编程,所以总体过程没有出现太大的问题;同时也对const变量有了进一步的认识。7.源码和说明7.1文件清单及其功能说明e*periment1.cpp源码e*periment1.e*e可执行文件。7.2用户使用说明书e*periment1.cpp是程序的源码,可通过修改其中main函数中的变量来测试各个函数。7.3源代码#include<stdio.h>#include<malloc.h>#include<stdlib.h>structSTACK{int*elems; //申请内存用于存放栈的元素intma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;};voidinitSTACK(STACK*constp,intm); //初始化p指向的栈:最多m个元素voidinitSTACK(STACK*constp,constSTACK&s);//用栈s初始化p指向的栈intsize(constSTACK*constp); //返回p指向的栈的最大元素个数ma*inthowMany(constSTACK*constp); //返回p指向的栈的实际元素个数posintgetelem(constSTACK*constp,int*); //取下标*处的栈元素STACK*constpush(STACK*constp,inte); //将e入栈,并返回pSTACK*constpop(STACK*constp,int&e); //出栈到e,并返回pSTACK*constassign(STACK*constp,constSTACK&s);//赋s给p指的栈,并返回pvoidprint(constSTACK*constp); //打印p指向的栈voiddestroySTACK(STACK*constp); //销毁p指向的栈intmain(intargc,char*argv[]){STACK*s1=(STACK*)malloc(sizeof(STACK));STACK*s2=(STACK*)malloc(sizeof(STACK));initSTACK(s1,10);push(s1,1);push(s1,2);push(push(s1,3),4);initSTACK(s2,*s1);print(s2);printf("栈s1:\n");print(s1);//assign(s2,*s1);printf("栈s2:\n");print(s2);inta,b,c;a=size(s1);printf("栈的最大元素个数是%d\n",a);b=howMany(s1);printf("栈的实际元素个数是%d\n",b);c=getelem(s1,3);printf("3处栈元素是是%d\n",c);int*,y,z;pop(s2,*);pop(pop(s2,y),z);printf("*=%d,y=%d,z=%d\n",*,y,z);destroySTACK(s2);destroySTACK(s1);getchar();return0;}voidinitSTACK(STACK*constp,intm) //初始化p指向的栈:最多m个元素{p->elems=(int*)malloc(m*sizeof(int*));if(!p->elems)return;p->pos=0;p->ma*=m;inti;for(i=0;i<(p->ma*);i++)p->elems[i]=0;}voidinitSTACK(STACK*constp,constSTACK&s)//用栈s初始化p指向的栈{p->elems=(int*)malloc((s.ma*)*sizeof(int));p->pos=s.pos;p->ma*=s.ma*;inti;for(i=0;i<(s.pos);i++){p->elems[i]=s.elems[i];printf("%d\n",p->elems[i]);}}intsize(constSTACK*constp) //返回p指向的栈的最大元素个数ma*{returnp->ma*;}inthowMany(constSTACK*constp) //返回p指向的栈的实际元素个数pos{returnp->pos;}intgetelem(constSTACK*constp,int*) //取下标*处的栈元素{if(p==NULL)returnNULL;else{if(*>(p->pos))printf("不存在元素\n");elsereturnp->elems[*];}}STACK*constpush(STACK*constp,inte) //将e入栈,并返回p{if(p==NULL)returnNULL;else{if((p->pos)<=(p->ma*)){p->elems[p->pos]=e;p->pos++;returnp;}elseprintf("栈满\n");}}STACK*constpop(STACK*constp,int&e) //出栈到e,并返回p{if(p==NULL)returnNULL;else{if((p->pos)==0)printf("栈为空\n");else{e=p->elems[(p->pos)-1];(p->pos)--;returnp;}}}STACK*constassign(STACK*constp,constSTACK&s)//赋s给p指的栈,并返回p{if(p==NULL||&s==NULL){returnNULL;}else{free(p->elems);//free(p);//STACK*p=(STACK*)malloc(sizeof(STACK));initSTACK(p,s);returnp;}}voidprint(constSTACK*constp) //打印p指向的栈{inti;if(p==NULL){return;}elseif(p->pos==0){printf("栈为空\n");}else{for(i=0;i<(p->pos);i++){printf("%d",p->elems[i]);}printf("\n");}}voiddestroySTACK(STACK*constp) //销毁p指向的栈{free(p->elems);free(p);printf("栈已销毁\n");}实验二.面向对象的整型栈编程1.需求分析1.1题目要求整型栈是一种先进后出的存储构造,对其进展的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。整型栈类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程,然后写一个main函数对栈的所有操作函数进展测试。classSTACK{int*constelems; //申请内存用于存放栈的元素constintma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;public:STACK(intm); //初始化栈:最多m个元素STACK(constSTACK&s);//用栈s拷贝初始化栈intsize()const; //返回栈的最大元素个数ma*inthowMany()const; //返回栈的实际元素个数posintgetelem(int*)const; //取下标*处的栈元素STACK&push(inte); //将e入栈,并返回栈STACK&pop(int&e); //出栈到e,并返回栈STACK&assign(constSTACK&s);//赋s给栈,并返回被赋值的栈voidprint()const; //打印栈~STACK(); //销毁栈};1.2需求分析采用面向对象的C++语言定义整型栈,对其进展的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。2.系统设计2.1概要设计首先需要定义一个类来实现栈,然后依次实现栈的各个功能,在主函数中给定一个栈然后,然后通过函数调用实现栈的功能。2.2详细设计STACK(intm)功能:初始化栈:最多m个元素返回值:无STACK(constSTACK&s)功能:用栈s拷贝初始化栈返回值:无intsize()const功能:返回栈的最大元素个数ma*返回值:最大元素个数ma*inthowMany()const功能:返回栈的实际元素个数pos返回值:元素数目posintgetelem(int*)const功能:取下标*处的栈元素返回值:下标为*的元素STACK&push(inte)功能:将e入栈返回值:栈的引用STACK&pop(int&e)功能:出栈到e,并返回栈返回值:栈的引用STACK&assign(constSTACK&s)功能:使用栈s给栈p赋值返回值:栈的引用voidprint()const功能:打印栈返回值:无~STACK()功能:销毁栈返回值:无3.软件开发在Codeblocks编译环境下,使用C++语言编写。4.软件测试测试结果见图2.1图2.15.特点与缺乏5.1技术特点完成了初定目标,无其他特点。5.2缺乏和改进的建议人机交互需要进一步完善。6.过程和体会6.1遇到的主要问题和解决方法由于第一次使用c++面向对象编写程序,开场不明白对象的生成及使用。在和同学教师的沟通和交流中,慢慢学会了编程的方法。6.2课程设计的体会C++语言与C语言有很多相通的地方,所以其中的*些原理和方法可以互相借鉴,这样就减少了在理解上的难度。7.源码和说明7.1文件清单及其功能说明e*periment2.cpp源码e*periment2.e*e可执行文件。7.2用户使用说明书e*periment2.cpp是程序的源码,可通过修改其中main函数中的变量来测试各个函数。7.3源代码#include<iostream>#include<string>usingnamespacestd;classSTACK{int*constelems; //申请内存用于存放栈的元素constintma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;public:STACK(intm); //初始化栈:最多m个元素STACK(constSTACK&s);//用栈s拷贝初始化栈intsize()const; //返回栈的最大元素个数ma*inthowMany()const; //返回栈的实际元素个数posintgetelem(int*)const; //取下标*处的栈元素STACK&push(inte); //将e入栈,并返回栈STACK&pop(int&e); //出栈到e,并返回栈STACK&assign(constSTACK&s);//赋s给栈,并返回被赋值的栈voidprint()const; //打印栈~STACK(); //销毁栈};STACK::STACK(intm):elems(newint[m]),ma*(m),pos(0){}STACK::STACK(constSTACK&s):elems(newint[s.size()]),ma*(s.size()),pos(s.howMany()){for(inti=0;i<pos;i++)elems[i]=s.getelem(i);cout<<"复制构造成功"<<endl;};intSTACK::size()const{returnma*;}intSTACK::howMany()const{returnpos;}intSTACK::getelem(int*)const{returnelems[*];}STACK&STACK::push(inte){if(pos<ma*){elems[pos]=e;pos++;}elsecout<<"full\n";return*this;}STACK&STACK::pop(int&e){if(pos==0){cout<<"emptystack";return*this;}pos--;e=elems[pos];cout<<"出栈成功";return*this;}STACK&STACK::assign(constSTACK&s){inti;deleteelems;//elems=newint[s.size()];//ma*=s.size();pos=s.howMany();for(i=0;i<s.howMany();i++){elems[i]=s.getelem(i);}return*this;}voidSTACK::print()const{inti;cout<<"栈的元素为:";for(i=0;i<pos;i++)cout<<elems[i]<<"";cout<<endl;}STACK::~STACK(){deleteelems;//elems=0;//ma*=0;pos=0;cout<<"析构完成";}intmain(){STACKs(7);s.push(5);s.push(7);s.push(9);s.push(11);s.print();inti;s.pop(i);cout<<"出栈元素"<<i<<endl;STACKp(s);cout<<"容量"<<p.size()<<endl;cout<<"当前元素数目"<<p.howMany();}实验三.基于算符重载的整型栈编程1.需求分析1.1题目要求整型栈是一种先进后出的存储构造,对其进展的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。整型栈类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程,然后写一个main函数对栈的所有操作函数进展测试。classSTACK{int*constelems; //申请内存用于存放栈的元素constintma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;public:STACK(intm); //初始化栈:最多m个元素STACK(constSTACK&s); //用栈s拷贝初始化栈virtualintsize()const; //返回栈的最大元素个数ma*virtualoperatorint()const; //返回栈的实际元素个数posvirtualintoperator[](int*)const;//取下标*处的栈元素virtualSTACK&operator<<(inte); //将e入栈,并返回栈virtualSTACK&operator>>(int&e); //出栈到e,并返回栈virtualSTACK&operator=(constSTACK&s);//赋s给栈,并返回被赋值的栈virtualvoidprint()const; //打印栈virtual~STACK(); //销毁栈};1.2需求分析采用面向对象的C++语言定义,构建整型栈并对其进展判断栈是否为空、向栈顶添加一个整型元素、出栈等操作。2.系统设计2.1概要设计首先需要定义一个类来实现栈,然后依次实现栈的各个功能,在主函数中给定一个栈然后,然后通过函数调用实现栈的功能。2.2详细设计初始化定义一个类,分配一个数组空间来存储栈内元素信息,然后初始化为0;实现入栈则需要将入栈元素e放入栈内,采用了先判断栈的最大容量够不够的问题,如果不够重新分配空间,并且让e入栈,将当前元素pos加一;然后返回栈构造。实现出栈操作,首先判断是不是空,假设空直接返回,不空则需将栈顶的元素赋给一个变量然后将当前元素pos减一;返回栈构造。实现栈的赋给即需要将s1栈内的元素依次赋给s2栈的,当前元素也需一致并且返回新的栈构造。3.软件开发在Codeblocks编译环境下,使用C++语言编写。4.软件测试测试结果见图3.1图3.15.特点与缺乏5.1技术特点使用了符号重载,在一定程度上简化了函数。5.2缺乏和改进的建议在使用符号重载时需要特别注意,防止与其他操作符混淆。6.过程和体会6.1遇到的主要问题和解决方法对于符号重载,刚开场不会调用函数,之后通过查阅书籍,明白了重载的含义。6.2课程设计的体会本次实验以实验二为根底,通过使用符号重载来更简单的实现实验目的。7.源码和说明7.1文件清单及其功能说明e*periment3.cpp源码e*periment3.e*e可执行文件。7.2用户使用说明书e*periment3.cpp是程序的源码,可通过修改其中main函数中的变量来测试各个函数。7.3源代码#include<iostream>#include<string>usingnamespacestd;classSTACK{int*constelems; //申请内存用于存放栈的元素constintma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;public:STACK(intm); //初始化栈:最多m个元素STACK(constSTACK&s); //用栈s拷贝初始化栈virtualintsize()const; //返回栈的最大元素个数ma*virtualoperatorint()const; //返回栈的实际元素个数posvirtualintoperator[](int*)const; //取下标*处的栈元素virtualSTACK&operator<<(inte); //将e入栈,并返回栈virtualSTACK&operator>>(int&e); //出栈到e,并返回栈virtualSTACK&operator=(constSTACK&s);//赋s给栈,并返回被赋值的栈virtualvoidprint()const; //打印栈virtual~STACK(); //销毁栈};STACK::STACK(intm):elems(newint[m]),ma*(m),pos(0){}STACK::STACK(constSTACK&s):elems(newint[s.ma*]),ma*(s.ma*),pos(s.pos){for(inti=0;i<pos;i++)elems[i]=s.elems[i];};intSTACK::size()const{returnma*;}STACK::operatorint()const{returnpos;}intSTACK::operator[](int*)const{returnelems[*];}STACK&STACK::operator<<(inte){if(pos>ma*){cout<<"栈满";}else{*(elems+pos)=e;pos++;}return(*this);}STACK&STACK::operator>>(int&e){if(pos==0){cout<<"栈空";}else{e=*(elems+pos-1);pos--;}return(*this);}STACK&STACK::operator=(constSTACK&s){deleteelems;*(int**)&elems=newint[s.ma*];*(int*)&ma*=s.ma*;for(pos=0;pos<s.pos;pos++)elems[pos]=s.elems[pos];return*this;}voidSTACK::print()const{for(inti=0;i<pos;i++)cout<<elems[i]<<"\n";}STACK::~STACK(){delete[]elems;if(elems==0){cout<<"销毁失败"<<endl;}else{cout<<"销毁成功"<<endl;}}intmain(){STACKi(5),j(8);i<<1<<3<<6<<9;intk;i>>k;cout<<k<<"\n";i.print();j=i;j.print();j<<1<<2<<3<<4;cout<<endl<<(int)j;}实验四.面向对象的整型队列编程1.需求分析1.1题目要求整型队列是一种先进先出的存储构造,对其进展的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等。整型队列类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程,然后写一个main函数对队列的所有操作函数进展测试。classQUEUE{int*constelems; //申请内存用于存放队列的元素constintma*; //队列能存放的最大元素个数inthead,tail; //队列头和尾,队列空时head=tail;初始时head=tail=0public:QUEUE(intm); //初始化队列:最多m个元素QUEUE(constQUEUE&s); //用队列s拷贝初始化队列virtualoperatorint()const; //返回队列的实际元素个数virtualQUEUE&operator<<(inte)volatile; //将e入队列,并返回队列virtualQUEUE&operator>>(int&e)volatile; //出队列到e,并返回队列virtualQUEUE&operator=(constQUEUE&s);//赋s给队列,并返回被赋值的队列virtualvoidprint()const; //打印队列virtual~QUEUE(); //销毁队列};1.2需求分析此题目用数组实现队列,需要预知需要空间的大小,会造成空间浪费或不够用;插入或删除不需要动态分配或删除内存,耗时很小;支持随机存取。2.系统设计定义一个类,分配一个数组空间来存储栈内元素信息,类中分别定义两个int元素表示队列的头和尾,入栈的时候,头加一;出栈的时候,尾加一。3.软件开发在Codeblocks编译环境下,使用C++语言编写。4.软件测试测试结果见图4.1图4.15.特点与缺乏5.1技术特点通过创立队列类QUEUE,完成了队列的构造析构等诸多功能;同时再次运用重载操作符方便了入队出队等操作的完成。5.2缺乏和改进的建议队列一旦生成则无法改变。6.过程和体会6.1遇到的主要问题和解决方法如何构建一个循环队列,解决方法利用求余的方法,当头结点大于最大元素的时候,除以最大元素求余,重新的得到头结点。6.2课程设计的体会本次实验使用面向对象的方法来编写一个队列,让我对队列的构建以及对其进展一些列的操作有了更进一步的了解。与前几次栈的实验相比,难度有所增加,但更锻炼了个人能力。7.源码和说明7.1文件清单及其功能说明e*periment4.cpp源码e*periment4.e*e可执行文件。7.2用户使用说明书e*periment4.cpp是程序的源码,可通过修改其中main函数中的变量来测试各个函数。7.3源代码#include<iostream>#include<string>usingnamespacestd;classQUEUE{int*constelems; //申请内存用于存放队列的元素constintma*; //队列能存放的最大元素个数inthead,tail; //队列头和尾,队列空时head=tail;初始时head=tail=0public:QUEUE(intm); //初始化队列:最多m个元素QUEUE(constQUEUE&s); //用队列s拷贝初始化队列virtualoperatorint()const; //返回队列的实际元素个数virtualQUEUE&operator<<(inte); //将e入队列,并返回队列virtualQUEUE&operator>>(int&e); //出队列到e,并返回队列virtualQUEUE&operator=(constQUEUE&s);//赋s给队列,并返回被赋值的队列virtualvoidprint()const; //打印队列virtual~QUEUE(); //销毁队列};QUEUE::QUEUE(intm):elems(newint[m]),ma*(m),head(0),tail(0){}QUEUE::QUEUE(constQUEUE&s):elems(newint[s.ma*]),ma*(s.ma*),head(s.head),tail(s.tail){for(inti=head;i<tail;i++)elems[i]=s.elems[i];};QUEUE::operatorint()const{if(tail>=head)return(tail-head);return(ma*-head+tail);}QUEUE&QUEUE::operator<<(inte){if((tail+1)%ma*==head){cout<<"队列满\n";}elseelems[tail]=e;tail++;return(*this);}QUEUE&QUEUE::operator>>(int&e){if(head==tail){cout<<"队列空\n";}elsee=elems[head];head=(head++)%ma*;return(*this);}QUEUE&QUEUE::operator=(constQUEUE&s){deleteelems;*(int**)&elems=newint[s.ma*];*(int*)&ma*=s.ma*;head=s.head;tail=s.tail;for(inti=head;i<tail;i++)elems[i]=s.elems[i];cout<<"赋值成功\n";return*this;}voidQUEUE::print()const{if(head==tail)cout<<"Empty\n";cout<<"队列元素为:";if(head<tail){for(inti=head;i<tail;i++)cout<<elems[i]<<"\t";}else{for(inti=head;i<ma*+1;i++)cout<<elems[i]<<"\t";for(inti=0;i<tail;i++)cout<<elems[i]<<"\t";}cout<<"\n";}QUEUE::~QUEUE(){deleteelems;*(int**)&elems=0;*(int*)&ma*=0;head=tail=0;}intmain(){QUEUEq(5);q<<2<<5<<8;cout<<"元素数目"<<(int)q<<endl;QUEUEp(q);p.print();inti;q>>i;cout<<"出队元素"<<i<<endl;q.print();}实验五.基于组合的整型队列编程1.需求分析1.1题目要求整型队列是一种先进先出的存储构造,对其进展的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等。整型队列类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程,然后写一个main函数对队列的所有操作函数进展测试。注意,请用实验三的SATCK组合形成新的类QUEUE。请说明如果删掉virtual有什么不同。classQUEUE{STACKs1,s2;public:QUEUE(intm); //初始化队列:每个栈最多m个元素QUEUE(constQUEUE&s); //用队列s拷贝初始化队列virtualoperatorint()const; //返回队列的实际元素个数virtualQUEUE&operator<<(inte); //将e入队列,并返回队列virtualQUEUE&operator>>(int&e); //出队列到e,并返回队列virtualQUEUE&operator=(constQUEUE&s);//赋s给队列,并返回被赋值的队列virtualvoidprint()const; //打印队列virtual~QUEUE(); //销毁队列};1.2需求分析采用面向对象的C++语言定义,构建整型队列并对其进展的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等,再写一个main函数对队列的所有操作函数进展测试。。2.系统设计用两个栈实现队列,先判栈S2是否为空,如果为空,对S1进展入栈操作,如果不是空,栈S2数据元素倒入到S1,然后对S1进展入栈操作。出队列时。判断S2是否为空,如果非空S2中的元素出栈,假设果为空,把S1的元素倒入到S2,对S2的元素进展出栈操作3.软件开发在Codeblocks编译环境下,使用C++语言编写。4.软件测试测试结果见图5.1图5.15.特点与缺乏5.1技术特点根本功能已完成,无其他特点。5.2缺乏和改进的建议代码可能有点繁琐,所以可以对代码进展一些精简操作。6.过程和体会6.1遇到的主要问题和解决方法在栈与队列的转换问题上理解有误,后在同学的讲解下明白了问题及如何修改6.2课程设计的体会对队列的构造有了了解,同时也理解了栈与队列的联系。7.源码和说明7.1文件清单及其功能说明e*periment5.cpp源码e*periment5.e*e可执行文件。7.2用户使用说明书e*periment5.cpp是程序的源码,可通过修改其中main函数中的变量来测试各个函数。7.3源代码#include<iostream>#include<string>usingnamespacestd;classSTACK{int*constelems; //申请内存用于存放栈的元素constintma*; //栈能存放的最大元素个数intpos; //栈实际已有元素个数,栈空时pos=0;public:STACK(intm); //初始化栈:最多m个元素STACK(constSTACK&s); //用栈s拷贝初始化栈virtualintsize()const; //返回栈的最大元素个数ma*virtualoperatorint()const; //返回栈的实际元素个数posvirtualintoperator[](int*)const; //取下标*处的栈元素virtualSTACK&operator<<(inte); //将e入栈,并返回栈virtualSTACK&operator>>(int&e); //出栈到e,并返回栈virtualSTACK&operator=(constSTACK&s);//赋s给栈,并返回被赋值的栈virtualvoidprint()const; //打印栈virtual~STACK(); //销毁栈};STACK::STACK(intm):elems(newint[m]),ma*(m),pos(0){}STACK::STACK(constSTACK&s):elems(newint[s.ma*]),ma*(s.ma*),pos(s.pos){for(inti=0;i<pos;i++)elems[i]=s.elems[i];};intSTACK::size()const{returnma*;}STACK::operatorint()const{returnpos;}intSTACK::operator[](int*)const{returnelems[*];}STACK&STACK::operator<<(inte){if(elems==0)return*this;if(pos==ma*)return*this;elems[pos++]=e;return*this;}STACK&STACK::operator>>(int&e){if(pos<0){cout<<"empty\n";return*this;}e=elems[--pos];return*this;}STACK&STACK::operator=(constSTACK&s){if(elems)deleteelems;*(int**)&elems=newint[s.ma*];*(int*)&ma*=s.ma*;for(pos=0;pos<s.pos;pos++)elems[pos]=s.elems[pos];return*this;}voidSTACK::print()const{for(inti=0;i<pos;i++)cout<<elems[i]<<"\t";}STACK::~STACK(){deleteelems;*(int**)&elems=0;*(int*)&ma*=0;pos=0;}classQUEUE{STACKs1,s2;public:QUEUE(intm); //初始化队列:每个栈最多m个元素QUEUE(constQUEUE&s); //用队列s拷贝初始化队列virtualoperatorint()const; //返回队列的实际元素个数virtualQUEUE&operator<<(inte); //将e入队列,并返回队列virtualQUEUE&operator>>(int&e); //出队列到e,并返回队列virtualQUEUE&operator=(constQUEUE&s);//赋s给队列,并返回被赋值的队列virtualvoidprint()const; //打印队列virtual~QUEUE(); //销毁队列};QUEUE::QUEUE(intm):s1(m),s2(m){};QUEUE::QUEUE(constQUEUE&s):s1(s.s1.size()),s2(s.s1.size()){};QUEUE::operatorint()const{return(int)this->s1;}QUEUE&QUEUE::operator<<(inte){if(int(s1)==s1.size())return*this;s1<<(e);return*this;}QUEUE&QUEUE::operator>>(int&e){intf;if(int(s2)!=0)return*this;intm=int(s1);for(inti=0;i<m-1;i++){s1>>(e);s2<<(e);}s1>>(e);for(inti=0;i<m-1;i++){s2>>(f);s1<<(f);}return*this;}QUEUE&QUEUE::operator=(constQUEUE&s){s1=s.s1;s2=s.s2;return*this;}voidQUEUE::print()const{s1.print();}QUEUE::~QUEUE(){s1.~STACK();s2.~STACK();}intmain(){QUEUEi(5),j(8);i<<2<<4<<3<<6;intk;i>>k;cout<<k<<"\n";i.print();j=i;j.print();j<<1<<2<<3<<4;cout<<endl<<(int)j;}实验六.基于继承的整型队列编程1.需求分析1.1题目要求整型队列是一种先进先出的存储构造,对其进展的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等。整型队列类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程。注意,请用实验三的SATCK继承形成新的类QUEUE。分析说明除构造函数以外的函数,加virtual说明与不加virtual说明有无区别。并说明为什么不将s2也作为基类。classQUEUE:publicSTACK{STACKs2;public:QUEUE(intm); //初始化队列:每个栈最多m个元素QUEUE(constQUEUE&s); //用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论