数据结构课程设计报告(0002)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.“火烧连营”问题……………………………………………16
5.管道铺设施工的最佳方案选择………………………………19
MFC
1.停车场管理……………………………………………………27
2.个人电话号码查询系统………………………………………29
3.排序运用………………………………………………………34
总结
~BSTNode(){}
void setData(TeleNumber d){data=d;}
TeleNumber getData(){return data;}
};
class BST
{
public:
BST():root(NULL){}
~BST(){}
bool Insert(const TeleNumber& e1)
{
return Insert(e1,root);
}
bool Remove(const string x)
{
return Remove(x,root);
}
bool Modify(const string x,BSTNode *&ptr);
BSTNode *getroot(){return root;}
{
s1.Pop(a,num,time);//将车辆放在零时栈
s2.Push(a,num,time);
}
s1.Pop(a,num,time);//退出此车
for (i=0;i<s2.getSize();i++)//将零时栈的车辆放在停车场
{
s2.Pop(a,num,time);
s1.Push(a,num,time);
const int max=10;
struct TeleNumber
{
string name; //姓名
string phoneNumber; //固定电话号码
string mobileNumber; //移动电话号码
string email; //电子邮箱
} Tele[max];
为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,
{
temp=ptr->right;
while (temp->left!=NULL)
{
temp=temp->left;
}
ptr->data=temp->data;
Remove(ptr->data.name,ptr->right);
}
else
{
temp=ptr;
if (ptr->left==NULL)
{
int time1=time;
if (a=='A')
{
if (s1.Find(num)==true)
{
cout<<"车牌为"<<num<<"车停在"<<s1.getnum(num)+1<<"位置"<<" 请重新输入!"<<endl;
continue;;
}
else
{
if (s1.getSize()<n)
数据结构课程设计报告
数据结构课程设计报告
学院:信息工程
专业:信息工程
老师:陈占龙
姓名:郝宝亮
学号:20111001149
班号:116112-05
2013年1月
控制台
1.停车场管理……………………………………………………3
2.个人电话号码查询系统………………………………………6
3.排序运用………………………………………………………12
return true;
}
}
else if (int(e1.name.substr(i,i+1)[0])<int(ptr->data.name.substr(i,i+1)[0]))
{
Insert(e1,ptr->left);
}
else if (int(e1.name.substr(i,i+1)[0])>int(ptr->data.name.substr(i,i+1)[0]))
}Tele[10];
istream &operator>>(istream &is,TeleNumber &c)
{
is>>c.name>>c.phoneNumber>>c.mobileNumber>>c.email;//输入结构体
return is;
}
ostream &operator<<(ostream &os,TeleNumber &c)//输出结构体
【设计思想】
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟
管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号以及到达或离去的时刻。对每一组输入的数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场推出来的汽车,也用顺序存
实习题目二个人电话号码查询系统
【问题描述】
人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单
的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
基本要求:
(1)在外存上,用文件保存电话号码信息;
(2)在内存中,设计数据结构存储电话号码信息;
(3)提供查询功能:根据姓名实现快速查询;
SeqStack<char,int,int> s2;
LinkedQueue<char,int,int> q;
s1.Push(a,num,time);
cout<<"车牌为 "<<num<<" 在停车场的位置为:"<<s1.getSize()<<endl;
while (a!='E')
{
cin>>a>>num>>time;
{
Remove(x,ptr->left);
}
else if (int(x.substr(0,1)[0])>int(ptr->data.name.substr(0,1)[0]))
{
Remove(x,ptr->right);
}
else if (ptr->left!=NULL&&ptr->right!=NULL)
{
TeleNumber data;
BSTNode *left,*right;
BSTNode():left(NULL),right(NULL){}
BSTNode(const TeleNumber d,BSTNode *L=NULL,BSTNode *R=NULL)
:data(d),left(L),right(R){}
{
os<<c.name<<setw(10)<<setw(15)<<c.phoneNumber<<setw(20)<<c.mobileNumber<<setw(20)<<c.email;
return os;
}
//二叉搜索树的实现
#include "stdlib.h"
struct BSTNode //TeleNumber(E)
#include <string>
using namespace std;
struct TeleNumber;
istream &operator>>(istream &is,TeleNumber &c);//使编译器识别重载的运算符
ostream &operator<<(ostream &os,TeleNumber &c);
储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数
据项:汽车的牌照号码和进入停车场的时刻。
【设计表示】
【代码实现】
//主函数的实现
#include "stdafx.h"
#include "iostream.h"
#include "queue.h"
#include "stack.h"
}
}
}
if (a=='D')
{
if (s1.Find(num)==true)//先找到此车
{
int b=s1.gettime(num);
cout<<"车牌为 "<<num<<" 在停车场停留的时间是:"<<time-b<<endl;
for (int i=s1.getnum(num)+1;i<s1.getSize();i++)
BSTNode *Search(const string x,BSTNode *ptr);
private:
BSTNode *root;
bool Insert(const TeleNumber&e1,BSTNode *&ptr);
bool Remove(const string x,BSTNode *&ptr);
(4)提供其他维护功能:例如插入、删除、修改等。
【设计思想】
由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,
所以电话号码信息采用文件的形式存放到外存中。在系统运行时,需要将电话号码信息从文
件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以
设计如下结构类型的数组来接收数据:
{
s1.Push(a,num,time);
cout<<"车牌为 "<<num<<" 在停车场的位置为:"<<s1.getSize()<<endl;;
}
else
{
q.EnQueue(a,num,time);
cout<<"车牌为 "<<num<<" 在便道上的位置为:"<<q.getSize()<<endl;
};
//插入到二叉搜索树
bool BST::Insert(const TeleNumber& e1,BSTNode *&ptr)
{
int i=0;
if (ptr==NULL)
{
ptr=new BSTNode(e1);
if (ptr==NULL)
{
cerr<<"Out of space"<<endl;exit(1);
int main(int argc, char* argv[])
{
cout<<"请输入停车场的容量:";
int n,num,time;
cin>>n;
char a;
cout<<"请输入停车场车辆的情况:"<<endl;
cin>>a>>num>>time;
SeqStack<char,int,int> s1;
struct TeleNumber
{
string name;
string phoneNumber;
string mobileNumber;
string email;
friend istream &operator>>(istream &is,TeleNumber &c);//重载>>
friend ostream &operator<<(ostream &os,TeleNumber &c);//重载<<
在数组中实现插入和删除操作的代价较高。如果记录需频繁进行插入或删除操作,可以考虑
采用二叉搜索树组织电话号码信息,则查找和维护都能获得较高的时间性能。更复杂地,需
要考虑该二叉搜索树是否平衡,如何使之达到平衡。
【设计表示】
【代码实现】
//结构体的实现
#include <iostream>
#include "stdlib.h"
{
Insert(e1,ptr->right);
}
else
return false;
};
//删除二叉搜索树中的某结点
bool BST::Remove(const string x,BSTNode *&ptr)
{
BSTNode *temp;
if (ptr!=NULL)
{
if (int(x.substr(0,1)[0])<int(ptr->data.name.substr(0,1)[0]))
ptr=ptr->right;
}
else ptr=ptr->left;
delete temp;
return true;
自我总结…………………………………………………38
实习题目一 停车场管理
【问题描述】
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
}
if(q.getSize()>0)//如果便道中有车,则将便道的车进入停车场
{
q.DeQueue(a,num,time);
s1.Push(a,num,time1);
}
}ቤተ መጻሕፍቲ ባይዱ
else
{
cout<<"车牌为 "<<num<<" 车在便道上,不在停车场!"<<endl;
}
}
}
return 0;
}
【运行结果】
5.管道铺设施工的最佳方案选择………………………………19
MFC
1.停车场管理……………………………………………………27
2.个人电话号码查询系统………………………………………29
3.排序运用………………………………………………………34
总结
~BSTNode(){}
void setData(TeleNumber d){data=d;}
TeleNumber getData(){return data;}
};
class BST
{
public:
BST():root(NULL){}
~BST(){}
bool Insert(const TeleNumber& e1)
{
return Insert(e1,root);
}
bool Remove(const string x)
{
return Remove(x,root);
}
bool Modify(const string x,BSTNode *&ptr);
BSTNode *getroot(){return root;}
{
s1.Pop(a,num,time);//将车辆放在零时栈
s2.Push(a,num,time);
}
s1.Pop(a,num,time);//退出此车
for (i=0;i<s2.getSize();i++)//将零时栈的车辆放在停车场
{
s2.Pop(a,num,time);
s1.Push(a,num,time);
const int max=10;
struct TeleNumber
{
string name; //姓名
string phoneNumber; //固定电话号码
string mobileNumber; //移动电话号码
string email; //电子邮箱
} Tele[max];
为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,
{
temp=ptr->right;
while (temp->left!=NULL)
{
temp=temp->left;
}
ptr->data=temp->data;
Remove(ptr->data.name,ptr->right);
}
else
{
temp=ptr;
if (ptr->left==NULL)
{
int time1=time;
if (a=='A')
{
if (s1.Find(num)==true)
{
cout<<"车牌为"<<num<<"车停在"<<s1.getnum(num)+1<<"位置"<<" 请重新输入!"<<endl;
continue;;
}
else
{
if (s1.getSize()<n)
数据结构课程设计报告
数据结构课程设计报告
学院:信息工程
专业:信息工程
老师:陈占龙
姓名:郝宝亮
学号:20111001149
班号:116112-05
2013年1月
控制台
1.停车场管理……………………………………………………3
2.个人电话号码查询系统………………………………………6
3.排序运用………………………………………………………12
return true;
}
}
else if (int(e1.name.substr(i,i+1)[0])<int(ptr->data.name.substr(i,i+1)[0]))
{
Insert(e1,ptr->left);
}
else if (int(e1.name.substr(i,i+1)[0])>int(ptr->data.name.substr(i,i+1)[0]))
}Tele[10];
istream &operator>>(istream &is,TeleNumber &c)
{
is>>c.name>>c.phoneNumber>>c.mobileNumber>>c.email;//输入结构体
return is;
}
ostream &operator<<(ostream &os,TeleNumber &c)//输出结构体
【设计思想】
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟
管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号以及到达或离去的时刻。对每一组输入的数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场推出来的汽车,也用顺序存
实习题目二个人电话号码查询系统
【问题描述】
人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单
的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
基本要求:
(1)在外存上,用文件保存电话号码信息;
(2)在内存中,设计数据结构存储电话号码信息;
(3)提供查询功能:根据姓名实现快速查询;
SeqStack<char,int,int> s2;
LinkedQueue<char,int,int> q;
s1.Push(a,num,time);
cout<<"车牌为 "<<num<<" 在停车场的位置为:"<<s1.getSize()<<endl;
while (a!='E')
{
cin>>a>>num>>time;
{
Remove(x,ptr->left);
}
else if (int(x.substr(0,1)[0])>int(ptr->data.name.substr(0,1)[0]))
{
Remove(x,ptr->right);
}
else if (ptr->left!=NULL&&ptr->right!=NULL)
{
TeleNumber data;
BSTNode *left,*right;
BSTNode():left(NULL),right(NULL){}
BSTNode(const TeleNumber d,BSTNode *L=NULL,BSTNode *R=NULL)
:data(d),left(L),right(R){}
{
os<<c.name<<setw(10)<<setw(15)<<c.phoneNumber<<setw(20)<<c.mobileNumber<<setw(20)<<c.email;
return os;
}
//二叉搜索树的实现
#include "stdlib.h"
struct BSTNode //TeleNumber(E)
#include <string>
using namespace std;
struct TeleNumber;
istream &operator>>(istream &is,TeleNumber &c);//使编译器识别重载的运算符
ostream &operator<<(ostream &os,TeleNumber &c);
储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数
据项:汽车的牌照号码和进入停车场的时刻。
【设计表示】
【代码实现】
//主函数的实现
#include "stdafx.h"
#include "iostream.h"
#include "queue.h"
#include "stack.h"
}
}
}
if (a=='D')
{
if (s1.Find(num)==true)//先找到此车
{
int b=s1.gettime(num);
cout<<"车牌为 "<<num<<" 在停车场停留的时间是:"<<time-b<<endl;
for (int i=s1.getnum(num)+1;i<s1.getSize();i++)
BSTNode *Search(const string x,BSTNode *ptr);
private:
BSTNode *root;
bool Insert(const TeleNumber&e1,BSTNode *&ptr);
bool Remove(const string x,BSTNode *&ptr);
(4)提供其他维护功能:例如插入、删除、修改等。
【设计思想】
由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,
所以电话号码信息采用文件的形式存放到外存中。在系统运行时,需要将电话号码信息从文
件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以
设计如下结构类型的数组来接收数据:
{
s1.Push(a,num,time);
cout<<"车牌为 "<<num<<" 在停车场的位置为:"<<s1.getSize()<<endl;;
}
else
{
q.EnQueue(a,num,time);
cout<<"车牌为 "<<num<<" 在便道上的位置为:"<<q.getSize()<<endl;
};
//插入到二叉搜索树
bool BST::Insert(const TeleNumber& e1,BSTNode *&ptr)
{
int i=0;
if (ptr==NULL)
{
ptr=new BSTNode(e1);
if (ptr==NULL)
{
cerr<<"Out of space"<<endl;exit(1);
int main(int argc, char* argv[])
{
cout<<"请输入停车场的容量:";
int n,num,time;
cin>>n;
char a;
cout<<"请输入停车场车辆的情况:"<<endl;
cin>>a>>num>>time;
SeqStack<char,int,int> s1;
struct TeleNumber
{
string name;
string phoneNumber;
string mobileNumber;
string email;
friend istream &operator>>(istream &is,TeleNumber &c);//重载>>
friend ostream &operator<<(ostream &os,TeleNumber &c);//重载<<
在数组中实现插入和删除操作的代价较高。如果记录需频繁进行插入或删除操作,可以考虑
采用二叉搜索树组织电话号码信息,则查找和维护都能获得较高的时间性能。更复杂地,需
要考虑该二叉搜索树是否平衡,如何使之达到平衡。
【设计表示】
【代码实现】
//结构体的实现
#include <iostream>
#include "stdlib.h"
{
Insert(e1,ptr->right);
}
else
return false;
};
//删除二叉搜索树中的某结点
bool BST::Remove(const string x,BSTNode *&ptr)
{
BSTNode *temp;
if (ptr!=NULL)
{
if (int(x.substr(0,1)[0])<int(ptr->data.name.substr(0,1)[0]))
ptr=ptr->right;
}
else ptr=ptr->left;
delete temp;
return true;
自我总结…………………………………………………38
实习题目一 停车场管理
【问题描述】
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
}
if(q.getSize()>0)//如果便道中有车,则将便道的车进入停车场
{
q.DeQueue(a,num,time);
s1.Push(a,num,time1);
}
}ቤተ መጻሕፍቲ ባይዱ
else
{
cout<<"车牌为 "<<num<<" 车在便道上,不在停车场!"<<endl;
}
}
}
return 0;
}
【运行结果】