数据结构c++课设报告.docx
- 文档编号:7968269
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:42
- 大小:93.06KB
数据结构c++课设报告.docx
《数据结构c++课设报告.docx》由会员分享,可在线阅读,更多相关《数据结构c++课设报告.docx(42页珍藏版)》请在冰豆网上搜索。
数据结构c++课设报告
数据结构课程设计
专业:
计算机
班级:
1306班
学生:
林道松
学号:
3131903609
指导老师:
鲍春波/肖琳
起止时间:
2014-6-12——2014-6-18
2014年6月
基础题
题目1:
类(或结构体)的定义与实现
具体要求:
包含各种构造器,重载赋值运算符、比较运算符(大于或小于,等于)以及流插入流提取运算符,具体类的内容可以选复数类或学生类,或其它类。
类定义实现之后进行各种测试。
代码实现:
//复数类
#include
usingnamespacestd;
classcomp
{
public:
comp(inta=0,intb=0):
real(a),imaginary(b){}
friendistream&operator>>(istream&istr,comp&t)//重载流提取
{
istr>>t.real>>t.imaginary;
returnistr;
};
friendostream&operator<<(ostream&ostr,constcomp&c)//重载流插入
{
ostr<<'('< returnostr; }; friendcompoperator+(constcomp&lhs,constcomp&rhs)//重载+运算 { compc1; c1.real=lhs.real+rhs.real; c1.imaginary=lhs.imaginary+rhs.imaginary; returnc1; } friendcompoperator-(constcomp&lhs,constcomp&rhs)//重载—运算 { compc1; c1.real=lhs.real-rhs.real; c1.imaginary=lhs.imaginary-rhs.imaginary; returnc1; } private: intreal,imaginary; }; intmain() { compc,d,e; cin>>c>>d; e=c+d; cout<<"两复数的和为: "< e=c-d; cout<<"两复数的差为: "< } 题目2: 类模板的定义与实现1 具体要求: 根据栈数据结构的特点建立自己的栈类模板myStack,其中要包含栈的基本操作,最后测试之。 代码实现: //mystack类 #include #include #include #include usingnamespacestd; template classmystack { public: mystack();//初始化操作,创建一个空栈 boolempty()const;//判断栈是否为空 voidclearstack();//清空栈 intsize();//求栈长度 voidpush(constT&item);//在栈顶加入一个元素 voidpop();//删除栈顶的一个元素 intgettop();//获取栈顶元素 private: list }; template mystack : mystack() {} template boolmystack : empty()const { returnstacklist.size()==0; } template intmystack : size() { returnstacklist.size(); } template voidmystack : clearstack() { stacklist.clear(); } template voidmystack : push(constT&item) { stacklist.push_back(item); } template voidmystack : pop() { stacklist.pop_back(); } template intmystack : gettop() { returnstacklist.back(); } intmain() { mystack inta=ceshi.empty();//检测是否为空 cout<<"isemptyornot? "< intnum; cout<<"enternumberintothestack: "; while (1) {cin>>num; ceshi.push(num); charc=getchar(); if(c=='\n') break; } intb=ceshi.empty();//检测是否为空 cout<<"isemptyornot? "< intc=ceshi.size();//获取栈顶长度 cout<<"thelengthofthestack: "< cout<<"outputtheelem: "< for(inti=c;i>0;i--)//测试pop函数 {cout< ceshi.pop(); } cout< intd=ceshi.empty();//检测经pop后栈是否为空 cout<<"isemptyornot? "< cout<<"clearthestack..."< ceshi.clearstack();//将栈清空 return0; } 题目3: 类模板的定义与实现2 具体要求: 根据单向链表的特点,建立一个自己的链表类模板myList,其中要包含表链式存储的基本操作,最后测试之。 代码实现: #include #include #include usingnamespacestd; template classslistNode { public: slistNode(){next=NULL;} Tdata;//value slistNode*next;//pointtonextpos }; template classmyslist { private: intlistlen; slistNode slistNode slistNode public: myslist(); intlen();//thelengthofthelist voidaddback(Tx);//addelemtothebackofthelist voidDispList();//outputthelist boolisEmpty();// slistNode voidDelete(Tx);//deletex`spos voidinsert(Tx,slistNode voidinsertnode(Tx);//在链表的头部插入节点 }; template myslist : myslist()//conductor {node=NULL; lastnode=NULL; headnode=NULL; listlen=0; } template inlineintmyslist : len()//list长度计算 {if(listlen==0) cout<<"listisempty"< else returnlistlen; } template voidmyslist : addback(Tx)//push_back {node=newslistNode node->data=x;//新节点赋值为x if(lastnode==NULL)//没有尾节点则链表为空,node既为头结点,又是尾节点 {headnode=node; lastnode=node; } else//如果链表非空 {lastnode->next=node;//node既为尾节点的下一个节点 lastnode=node;//node变成了尾节点,把尾节点赋值为node } listlen++;//元素个数+1 } template voidmyslist : DispList()//打印list {node=headnode;//用临时节点指向头结点 while(node! =NULL)//遍历链表并输出 {cout< node=node->next; } cout< template boolmyslist : isEmpty()//判断list是否为空 { returnlistlen==0; } template slistNode : find(Tx)//查找函数 {node=headnode;//用临时节点指向头结点 while(node! =NULL&&node->data! =x)//遍历链表,遇到值相同的节点跳出 { node=node->next; } returnnode;//返回找到的节点的地址,如果没有找到则返回NULL } template voidmyslist : Delete(Tx)//删除list中的元素 { slistNode if(temp==NULL)return;//如果头节点为空,则该链表无元素,直接返回 if(temp->data==x) {headnode=temp->next;//把头节点指向头节点的下一个节点 if(temp->next==NULL)lastnode=NULL; delete(temp);//删除头节点 listlen--; return; } while(temp->next! =NULL&&temp->next->data! =x)//在list中查找x { temp=temp->next; } if(temp->next==NULL)return;//如果没有找到则返回 if(temp->next==lastnode)//如果找到的时候尾节点 {lastnode=temp;//把尾节点指向他的上一个节点 delete(temp->next);//删除尾节点 temp->next=NULL; } else//如果不是尾节点 {node=temp->next;//用临时节点node指向要删除的节点 temp->next=node->next; delete(node);//删除节点 listlen--; node=NULL; } } template voidmyslist : insert(Tx,slistNode {if(p==NULL)return; node=newslistNode node->data=x; node->next=p->next; p->next=node; if(node->next==NULL)//如果node为尾节点 lastnode=node; listlen++; } template voidmyslist : insertnode(Tx) {node=newslistNode node->data=x; node->next=headnode; headnode=node; listlen++; } intmain() {inttemp1,temp2; charm; myslist //输入函数测试 cout<<"pleaseenterelem: "< cin>>temp1; v.addback(temp1); while(m=cin.get()! ='\n') {cin>>temp1; v.addback(temp1); } //判断是否为空函数测试 if(v.isEmpty()) cout<<"listisempty? "< else cout<<"listisempty? "< //list长度函数测试 cout<<"thelengthofthelistis: "< cout<<"display: "< //往list表头插入元素 cout<<"push_front: "< cin>>temp1; v.insertnode(temp1); cout<<"thelengthofthelistis: "< cout<<"display: "< v.DispList(); //插入函数测试 cout<<"entertheposyouwanttofollow: "< cin>>temp1; cout<<"entertheelemyouwanttoinsert: "< cin>>temp2; //查找函数测试 v.insert(temp2,v.find(temp1)); cout<<"thelengthofthelistis: "< cout<<"display: "< v.DispList(); //删除函数测试 cout< "< cin>>temp1; v.Delete(temp1); cout<<"thelengthofthelistis: "< cout<<"display: "< v.DispList(); return0; } 题目4: 迭代器的使用 具体要求: 用迭代器访问向量vector和表list的元素。 假设已知数据存在一个数组中,分别建立一个向量vector和一个list,然后用迭代器访问向量和表,分别求它们的最大值另外使用string类建立字符串,用迭代器访问每个字符。 代码实现: #include #include #include #include #include usingnamespacestd; intmain() {intarr[5]={1,-1,3,4,0}; list vector for(inti=0;i<5;i++) {vector1.push_back(arr[i]);//将数组中的元素输入到向量中 list1.push_back(arr[i]);//将数组中的元素输入到表中 } //创建一个链表迭代器进行访问 intmax1=arr[0]; list : iteratoriter1; for(iter1=list1.begin();iter1! =list1.end();iter1++) {cout<<*iter1<<''; if(*iter1>=max1) max1=*iter1; }cout< "< //创建一个向量迭代器进行访问 intmax2=arr[0]; vector : iteratoriter2=vector1.begin(); for(;iter2! =vector1.end();iter2++) {cout<<*iter2<<''; if(*iter2>=max1) max2=*iter2; }cout< "< //string类创建字符串并访问 stringstr("Helloworld! "); for(string: : iteratorit=str.begin();it! =str.end();it++) cout<<*it; cout< return0; } 题目5: 函数对象的使用 具体要求: 定义一个比较的函数对象类或模板,然后再定义一个插入排序函数或函数模板,写一个main测试它们。 代码实现: #include #include #include usingnamespacestd; template classlessThan { public: booloperator()(constT&x,constT&y)const { returnx<=y;} }; template £°? classlessThan2 { public: booloperator()(constT&x,constT&y)const { returnx>=y; } }; template voidinsertionSort(vector { inttemp=1,i; vector : iteratorita; vector : iteratorit; while(temp) {temp=0; for(ita=v.begin();ita+1! =v.end();ita++) {if(! comp(*ita,*(ita+1))) {i=*ita; *ita=*(ita+1); *(ita+1)=i; temp=1; }}}} intmain() { vector vector : iteratorit; inta; charc; cin>>a; v.push_back(a); while(c=getchar()! ='\n') {cin>>a; v.push_back(a); } insertionSort(v,lessThan it=v.begin(); cout<<*it;it++; for(;it! =v.end();it++) cout<<""<<*it; cout< insertionSort(v,lessThan2 it=v.begin(); cout<<*it;it++; for(;it! =v.end();it++) cout<<""<<*it; cout< } 题目6: 各种排序算法比较 具体要求: 对各种内部排序算法如插入排序,冒泡排序,选择排序,快速排序,基数排序,堆排序、二路归并排序等进行实时计算比较,针对同样的数据计算每种方法耗时多少秒。 测试数据可以用随机产生的100000个1到999之间的整数。 代码实现: #include #include #include"d_random.h" #include"d_sort.h" #include #include usingnamespacestd; template classlessThan { public: booloperator()(constT&x,constT&y)const { returnx<=y; } }; intmain() {randomNumberarr; intnumber,num[100000]; vector for(inti=0;i<100000;i++) {number=arr.random()%1000; num[i]=number; rand1.push_back(number); rand2.push_back(number); rand3.push_back(number); rand4.push_back(number); rand5.push_back(number); rand6.push_back(number); } doublestarttime,endtime; //快速排序 starttime=clock(); qui
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 c+ 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)