1、C+大作业说明面向对象程序设计大作业的说明一、3个示例(相应的cpp文件和h文件具有完整的源代码)1 以下程序涉及类模板,补充顺序栈类模板成员函数的定义,利用队列实现栈的逆置。/sq_queue_sq_stack.h#include/定义循环队列模板类template class sq_queue protected: int mm; /循环队列容量 int front,rear; /队头、队尾指针 T*q; /循环队列向量指针 public: sq_queue(int); /构造函数,建立空循环队列 int emptyqueue(); /测试队列是否下溢 void enqueue(T); /
2、入队 T dequeue(); /出队;/定义顺序栈模板类template class sq_stack private: int mm; /顺序栈容量 int top; /栈顶指针 T*s; /顺序栈向量指针 public: sq_stack(int); /构造函数,建立空栈 int emptystack(); /测试栈是否下溢 void push(T); /入栈 T pop(); /出栈 T get(); /读栈顶元素 void print(); /从栈顶到栈底输出栈中元素;/定义循环队列类模板构造函数templatesq_queue:sq_queue(int m) mm=m+1; /设置
3、队列容量,考虑到循环队列少用一个存储单元 q=new Tmm; /动态分配循环队列存储空间 front=rear=mm-1; /设置空队列/定义顺序栈类模板构造函数templatesq_stack:sq_stack(int m) mm=m; /设置顺序栈容量 s=new Tmm; /动态分配顺序栈存储空间 top=0; /设置空栈/定义循环队列类模板成员函数templateint sq_queue:emptyqueue() if(front=rear) return 1; else return 0;templatevoid sq_queue:enqueue(T x) rear=(rear+1
4、)%mm; qrear=x;templateT sq_queue:dequeue() front=(front+1)%mm; return qfront;/定义顺序栈类模板成员函数/顺序表逆置.cpp#include sq_queue_sq_stack.hvoid main() sq_queue queue(20); /建立容量为20的队列对象 sq_stack stack(20); /建立容量为20的栈对象 char ch; for(ch=a;ch=f;ch+) stack.push(ch); stack.print(); while(!stack.emptystack() queue.en
5、queue(stack.pop(); while(!queue.emptyqueue() stack.push(queue.dequeue(); stack.print(); coutch;2以下程序涉及类模板、友元函数、插入符“”重载函数,补充成员函数、友元函数的定义,实现将顺序表A按元素值奇、偶数拆分成两个表,A表存放奇数,B表存放偶数。/sq_list.h#include#include/定义顺序表类模板template class sq_list private: int mm; /顺序表空间容量 int nn; /顺序表长度 T*L; /指向顺序表向量的指针 public: sq_l
6、ist(int); /构造函数,建立空顺序表 int length(); /成员函数,计算顺序表当前长度 T get(int); /成员函数,读取顺序表中第i个元素 void insert(T,int); /成员函数,在顺序表的第i个元素之前插入一个元素 void del(int); /成员函数,删除顺序表中第i个元素 friend ostream&operator(ostream&,const sq_list&); /声明友元函数,插入符重载为友元函数 friend void separate(sq_list&,sq_list&); /声明友元函数,拆分顺序表;/定义构造函数template
7、sq_list:sq_list(int m) mm=m; L=new Tmm; /动态分配顺序表存储空间 nn=0; /空表,长度为0/定义成员函数/定义友元函数/拆分顺序表.cpp#includesq_list.hvoid main() sq_list A(20),B(20); for(int i=1;i=10;i+) A.insert(i,i); coutA; separate(A,B); coutAB; coutch;3以下程序涉及类模板的派生、抽象类和虚函数,补充成员函数的定义,实现对完全二叉树的DLR、LDR和LRD遍历。/binary_tree.h#include /二叉树结点结构
8、体模板templatestruct btnode T data; /数据域 btnode*lchild, *rchild; /左、右指针域;/二叉树类模板template /抽象类class binary_tree protected: btnode*root; public: binary_tree()root=NULL; /构造函数,初始化二叉链表 void creat_BT(); /建立二叉树 virtual void trav_BT()=0; /说明纯虚函数(遍历二叉树);template /派生类class pretrav:public binary_tree public: voi
9、d trav_BT() /遍历二叉树 btnode*p=root; preorder(p); /先序遍历 coutendl; ;template /派生类class intrav:public binary_tree public: void trav_BT() /遍历二叉树 btnode*p=root; inorder(p); /中序遍历 coutendl; ;template /派生类class postrav:public binary_tree public: void trav_BT() /遍历二叉树 btnode*p=root; postorder(p); /后序遍历 couten
10、dl; ;/定义成员函数(建立二叉树)/定义函数模板template /先序遍历void preorder(btnode*p) if(p!=NULL) coutdata; preorder(p-lchild); preorder(p-rchild); template /中序遍历void inorder(btnode*p) if(p!=NULL) inorder(p-lchild); coutdata; inorder(p-rchild); template /后序遍历void postorder(btnode*p) if(p!=NULL) postorder(p-lchild); posto
11、rder(p-rchild); coutdata; /完全二叉树遍历.cpp#includebinary_tree.hvoid main() binary_tree*p; cout先序遍历:endl; p=new pretrav; p-creat_BT(); p-trav_BT(); cout中序遍历:endl; p=new intrav; p-creat_BT(); p-trav_BT(); cout后序遍历:endl; p=new postrav; p-creat_BT(); p-trav_BT(); coutch;二、大作业的任务与要求选择或部分选择类模板、类模板的派生类、模板函数、虚函数等方法完成专题。 可供选择的题目(也可以自己拟定题目):1. 顺序表的查找2. 顺序表的排序3. 哈夫曼编码、译码 专题作业要求:1. 对问题用文字详细描述;2. 说明所采用的C+语言的具体方法;3. 如果具有类的继承,画出类结构图;4. 程序源代码并且加序言性注释和程序段的功能注释;5. 程序运行结果。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1