C++大作业说明.docx

上传人:b****6 文档编号:3010076 上传时间:2022-11-17 格式:DOCX 页数:10 大小:49.67KB
下载 相关 举报
C++大作业说明.docx_第1页
第1页 / 共10页
C++大作业说明.docx_第2页
第2页 / 共10页
C++大作业说明.docx_第3页
第3页 / 共10页
C++大作业说明.docx_第4页
第4页 / 共10页
C++大作业说明.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

C++大作业说明.docx

《C++大作业说明.docx》由会员分享,可在线阅读,更多相关《C++大作业说明.docx(10页珍藏版)》请在冰豆网上搜索。

C++大作业说明.docx

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();//出队

};

//定义顺序栈模板类

template

classsq_stack

{

private:

intmm;//顺序栈容量

inttop;//栈顶指针

T*s;//顺序栈向量指针

public:

sq_stack(int);//构造函数,建立空栈

intemptystack();//测试栈是否下溢

voidpush(T);//入栈

Tpop();//出栈

Tget();//读栈顶元素

voidprint();//从栈顶到栈底输出栈中元素

};

//定义循环队列类模板构造函数

template

sq_queue:

:

sq_queue(intm)

{

mm=m+1;//设置队列容量,考虑到循环队列少用一个存储单元

q=newT[mm];//动态分配循环队列存储空间

front=rear=mm-1;//设置空队列

}

//定义顺序栈类模板构造函数

template

sq_stack:

:

sq_stack(intm)

{

mm=m;//设置顺序栈容量

s=newT[mm];//动态分配顺序栈存储空间

top=0;//设置空栈

}

//定义循环队列类模板成员函数

template

intsq_queue:

:

emptyqueue()

{

if(front==rear)return1;

elsereturn0;

}

template

voidsq_queue:

:

enqueue(Tx)

{

rear=(rear+1)%mm;

q[rear]=x;

}

template

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());

while(!

queue.emptyqueue())

stack.push(queue.dequeue());

stack.print();

cout<<"按“Y”键结束";

cin>>ch;

}

2.以下程序涉及类模板、友元函数、插入符“<<”重载函数,补充成员函数、友元函数的定义,实现将顺序表A按元素值奇、偶数拆分成两个表,A表存放奇数,B表存放偶数。

//sq_list.h

#include

#include

//定义顺序表类模板

template

classsq_list

{

private:

intmm;//顺序表空间容量

intnn;//顺序表长度

T*L;//指向顺序表向量的指针

public:

sq_list(int);//构造函数,建立空顺序表

intlength();//成员函数,计算顺序表当前长度

Tget(int);//成员函数,读取顺序表中第i个元素

voidinsert(T,int);//成员函数,在顺序表的第i个元素之前插入一个元素

voiddel(int);//成员函数,删除顺序表中第i个元素

friendostream&operator<<(ostream&,constsq_list&);//声明友元函数,插入符<<重载为友元函数

friendvoidseparate(sq_list&,sq_list&);//声明友元函数,拆分顺序表

};

//定义构造函数

template

sq_list:

:

sq_list(intm)

{

mm=m;

L=newT[mm];//动态分配顺序表存储空间

nn=0;//空表,长度为0

}

//定义成员函数

//定义友元函数

//拆分顺序表.cpp

#include"sq_list.h"

voidmain()

{

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

//二叉树结点结构体模板

template

structbtnode{

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.程序运行结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1