C++大作业说明.docx
《C++大作业说明.docx》由会员分享,可在线阅读,更多相关《C++大作业说明.docx(10页珍藏版)》请在冰豆网上搜索。
C++大作业说明
《面向对象程序设计》大作业的说明
一、3个示例(相应的cpp文件和h文件具有完整的源代码)
1.以下程序涉及类模板,补充顺序栈类模板成员函数的定义,利用队列实现栈的逆置。
//sq_queue_sq_stack.h
#include
//定义循环队列模板类
template
classsq_queue
{
protected:
intmm;//循环队列容量
intfront,rear;//队头、队尾指针
T*q;//循环队列向量指针
public:
sq_queue(int);//构造函数,建立空循环队列
intemptyqueue();//测试队列是否下溢
voidenqueue(T);//入队
Tdequeue();//出队
};
//定义顺序栈模板类
classsq_stack
private:
intmm;//顺序栈容量
inttop;//栈顶指针
T*s;//顺序栈向量指针
sq_stack(int);//构造函数,建立空栈
intemptystack();//测试栈是否下溢
voidpush(T);//入栈
Tpop();//出栈
Tget();//读栈顶元素
voidprint();//从栈顶到栈底输出栈中元素
//定义循环队列类模板构造函数
sq_queue:
:
sq_queue(intm)
mm=m+1;//设置队列容量,考虑到循环队列少用一个存储单元
q=newT[mm];//动态分配循环队列存储空间
front=rear=mm-1;//设置空队列
}
//定义顺序栈类模板构造函数
sq_stack:
sq_stack(intm)
mm=m;//设置顺序栈容量
s=newT[mm];//动态分配顺序栈存储空间
top=0;//设置空栈
//定义循环队列类模板成员函数
intsq_queue:
emptyqueue()
if(front==rear)return1;
elsereturn0;
voidsq_queue:
enqueue(Tx)
rear=(rear+1)%mm;
q[rear]=x;
Tsq_queue:
dequeue()
front=(front+1)%mm;
returnq[front];
//定义顺序栈类模板成员函数
//顺序表逆置.cpp
#include"sq_queue_sq_stack.h"
voidmain()
sq_queuequeue(20);//建立容量为20的队列对象
sq_stackstack(20);//建立容量为20的栈对象
charch;
for(ch='a';ch<='f';ch++)
stack.push(ch);
stack.print();
while(!
stack.emptystack())
queue.enqueue(stack.pop());
queue.emptyqueue())
stack.push(queue.dequeue());
cout<<"按“Y”键结束";
cin>>ch;
2.以下程序涉及类模板、友元函数、插入符“<<”重载函数,补充成员函数、友元函数的定义,实现将顺序表A按元素值奇、偶数拆分成两个表,A表存放奇数,B表存放偶数。
//sq_list.h
//定义顺序表类模板
classsq_list
intmm;//顺序表空间容量
intnn;//顺序表长度
T*L;//指向顺序表向量的指针
sq_list(int);//构造函数,建立空顺序表
intlength();//成员函数,计算顺序表当前长度
Tget(int);//成员函数,读取顺序表中第i个元素
voidinsert(T,int);//成员函数,在顺序表的第i个元素之前插入一个元素
voiddel(int);//成员函数,删除顺序表中第i个元素
friendostream&operator<<(ostream&,constsq_list&);//声明友元函数,插入符<<重载为友元函数
friendvoidseparate(sq_list&,sq_list&);//声明友元函数,拆分顺序表
//定义构造函数
sq_list:
sq_list(intm)
mm=m;
L=newT[mm];//动态分配顺序表存储空间
nn=0;//空表,长度为0
//定义成员函数
//定义友元函数
//拆分顺序表.cpp
#include"sq_list.h"
sq_listA(20),B(20);
for(inti=1;i<=10;i++)A.insert(i,i);
cout<separate(A,B);cout<cout<<"按“Y”键结束";charch;cin>>ch;}3.以下程序涉及类模板的派生、抽象类和虚函数,补充成员函数的定义,实现对完全二叉树的DLR、LDR和LRD遍历。//binary_tree.h#include//二叉树结点结构体模板templatestructbtnode{Tdata;//数据域btnode*lchild,*rchild;//左、右指针域};//二叉树类模板template//抽象类classbinary_tree{protected:btnode*root;public:binary_tree(){root=NULL;}//构造函数,初始化二叉链表voidcreat_BT();//建立二叉树virtualvoidtrav_BT()=0;//说明纯虚函数(遍历二叉树)};template//派生类classpretrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;preorder(p);//先序遍历cout<}};template//派生类classintrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;inorder(p);//中序遍历cout<}};template//派生类classpostrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;postorder(p);//后序遍历cout<}};//定义成员函数(建立二叉树)//定义函数模板template//先序遍历voidpreorder(btnode*p){if(p!=NULL){cout<data;preorder(p->lchild);preorder(p->rchild);}}template//中序遍历voidinorder(btnode*p){if(p!=NULL){inorder(p->lchild);cout<data;inorder(p->rchild);}}template//后序遍历voidpostorder(btnode*p){if(p!=NULL){postorder(p->lchild);postorder(p->rchild);cout<data;}}//完全二叉树遍历.cpp#include"binary_tree.h"voidmain(){binary_tree*p;cout<<"先序遍历:"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
separate(A,B);
cout<cout<<"按“Y”键结束";charch;cin>>ch;}3.以下程序涉及类模板的派生、抽象类和虚函数,补充成员函数的定义,实现对完全二叉树的DLR、LDR和LRD遍历。//binary_tree.h#include//二叉树结点结构体模板templatestructbtnode{Tdata;//数据域btnode*lchild,*rchild;//左、右指针域};//二叉树类模板template//抽象类classbinary_tree{protected:btnode*root;public:binary_tree(){root=NULL;}//构造函数,初始化二叉链表voidcreat_BT();//建立二叉树virtualvoidtrav_BT()=0;//说明纯虚函数(遍历二叉树)};template//派生类classpretrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;preorder(p);//先序遍历cout<}};template//派生类classintrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;inorder(p);//中序遍历cout<}};template//派生类classpostrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;postorder(p);//后序遍历cout<}};//定义成员函数(建立二叉树)//定义函数模板template//先序遍历voidpreorder(btnode*p){if(p!=NULL){cout<data;preorder(p->lchild);preorder(p->rchild);}}template//中序遍历voidinorder(btnode*p){if(p!=NULL){inorder(p->lchild);cout<data;inorder(p->rchild);}}template//后序遍历voidpostorder(btnode*p){if(p!=NULL){postorder(p->lchild);postorder(p->rchild);cout<data;}}//完全二叉树遍历.cpp#include"binary_tree.h"voidmain(){binary_tree*p;cout<<"先序遍历:"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
3.以下程序涉及类模板的派生、抽象类和虚函数,补充成员函数的定义,实现对完全二叉树的DLR、LDR和LRD遍历。
//binary_tree.h
//二叉树结点结构体模板
structbtnode{
Tdata;//数据域
btnode*lchild,*rchild;//左、右指针域
//二叉树类模板
template//抽象类
classbinary_tree
btnode*root;
binary_tree(){root=NULL;}//构造函数,初始化二叉链表
voidcreat_BT();//建立二叉树
virtualvoidtrav_BT()=0;//说明纯虚函数(遍历二叉树)
template//派生类
classpretrav:
publicbinary_tree
voidtrav_BT()//遍历二叉树
btnode*p=root;
preorder(p);//先序遍历
cout<}};template//派生类classintrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;inorder(p);//中序遍历cout<}};template//派生类classpostrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;postorder(p);//后序遍历cout<}};//定义成员函数(建立二叉树)//定义函数模板template//先序遍历voidpreorder(btnode*p){if(p!=NULL){cout<data;preorder(p->lchild);preorder(p->rchild);}}template//中序遍历voidinorder(btnode*p){if(p!=NULL){inorder(p->lchild);cout<data;inorder(p->rchild);}}template//后序遍历voidpostorder(btnode*p){if(p!=NULL){postorder(p->lchild);postorder(p->rchild);cout<data;}}//完全二叉树遍历.cpp#include"binary_tree.h"voidmain(){binary_tree*p;cout<<"先序遍历:"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
classintrav:
inorder(p);//中序遍历
cout<}};template//派生类classpostrav:publicbinary_tree{public:voidtrav_BT()//遍历二叉树{btnode*p=root;postorder(p);//后序遍历cout<}};//定义成员函数(建立二叉树)//定义函数模板template//先序遍历voidpreorder(btnode*p){if(p!=NULL){cout<data;preorder(p->lchild);preorder(p->rchild);}}template//中序遍历voidinorder(btnode*p){if(p!=NULL){inorder(p->lchild);cout<data;inorder(p->rchild);}}template//后序遍历voidpostorder(btnode*p){if(p!=NULL){postorder(p->lchild);postorder(p->rchild);cout<data;}}//完全二叉树遍历.cpp#include"binary_tree.h"voidmain(){binary_tree*p;cout<<"先序遍历:"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
classpostrav:
postorder(p);//后序遍历
cout<}};//定义成员函数(建立二叉树)//定义函数模板template//先序遍历voidpreorder(btnode*p){if(p!=NULL){cout<data;preorder(p->lchild);preorder(p->rchild);}}template//中序遍历voidinorder(btnode*p){if(p!=NULL){inorder(p->lchild);cout<data;inorder(p->rchild);}}template//后序遍历voidpostorder(btnode*p){if(p!=NULL){postorder(p->lchild);postorder(p->rchild);cout<data;}}//完全二叉树遍历.cpp#include"binary_tree.h"voidmain(){binary_tree*p;cout<<"先序遍历:"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
//定义成员函数(建立二叉树)
//定义函数模板
template//先序遍历
voidpreorder(btnode*p)
if(p!
=NULL)
cout<data;
preorder(p->lchild);
preorder(p->rchild);
template//中序遍历
voidinorder(btnode*p)
inorder(p->lchild);
inorder(p->rchild);
template//后序遍历
voidpostorder(btnode*p)
postorder(p->lchild);
postorder(p->rchild);
//完全二叉树遍历.cpp
#include"binary_tree.h"
binary_tree*p;
cout<<"先序遍历:
"<p=newpretrav;p->creat_BT();p->trav_BT();cout<<"中序遍历:"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
p=newpretrav;
p->creat_BT();
p->trav_BT();
cout<<"中序遍历:
"<p=newintrav;p->creat_BT();p->trav_BT();cout<<"后序遍历:"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
p=newintrav;
cout<<"后序遍历:
"<p=newpostrav;p->creat_BT();p->trav_BT();cout<<"按“Y”键结束:";charch;cin>>ch;}二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。●可供选择的题目(也可以自己拟定题目):1.顺序表的查找2.顺序表的排序3.哈夫曼编码、译码●专题作业要求:1.对问题用文字详细描述;2.说明所采用的C++语言的具体方法;3.如果具有类的继承,画出类结构图;4.程序源代码并且加序言性注释和程序段的功能注释;5.程序运行结果。
p=newpostrav;
cout<<"按“Y”键结束:
";
二、大作业的任务与要求
选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。
●可供选择的题目(也可以自己拟定题目):
1.顺序表的查找
2.顺序表的排序
3.哈夫曼编码、译码
●专题作业要求:
1.对问题用文字详细描述;
2.说明所采用的C++语言的具体方法;
3.如果具有类的继承,画出类结构图;
4.程序源代码并且加序言性注释和程序段的功能注释;
5.程序运行结果。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1