数据结构课程设计报告Word文件下载.docx
《数据结构课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告Word文件下载.docx(59页珍藏版)》请在冰点文库上搜索。
![数据结构课程设计报告Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/a658aa24-02bc-447d-b11b-ce1ac10873b4/a658aa24-02bc-447d-b11b-ce1ac10873b41.gif)
queue.h"
stack.h"
intmain(intargc,char*argv[])
{
cout<
<
"
请输入停车场的容量:
;
intn,num,time;
cin>
>
n;
chara;
请输入停车场车辆的情况:
endl;
a>
num>
time;
SeqStack<
char,int,int>
s1;
s2;
LinkedQueue<
q;
s1.Push(a,num,time);
车牌为"
num<
在停车场的位置为:
s1.getSize()<
while(a!
='
E'
)
{
cin>
inttime1=time;
if(a=='
A'
{
if(s1.Find(num)==true)
{
cout<
车牌为"
车停在"
s1.getnum(num)+1<
位置"
请重新输入!
continue;
}
else
if(s1.getSize()<
n)
{
s1.Push(a,num,time);
cout<
}
else
q.EnQueue(a,num,time);
在便道上的位置为:
q.getSize()<
}
D'
if(s1.Find(num)==true)//先找到此车
intb=s1.gettime(num);
在停车场停留的时间是:
time-b<
for(inti=s1.getnum(num)+1;
i<
s1.getSize();
i++)
s1.Pop(a,num,time);
//将车辆放在零时栈
s2.Push(a,num,time);
s1.Pop(a,num,time);
//退出此车
for(i=0;
s2.getSize();
i++)//将零时栈的车辆放在停车场
s2.Pop(a,num,time);
if(q.getSize()>
0)//如果便道中有车,则将便道的车进入停车场
q.DeQueue(a,num,time);
s1.Push(a,num,time1);
}
车在便道上,不在停车场!
}
return0;
}
【运行结果】
实习题目二个人电话号码查询系统
人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单
的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。
基本要求:
(1)在外存上,用文件保存电话号码信息;
(2)在内存中,设计数据结构存储电话号码信息;
(3)提供查询功能:
根据姓名实现快速查询;
(4)提供其他维护功能:
例如插入、删除、修改等。
由于需要管理的电话号码信息较多,而且要在程序运行结束后仍然保存电话号码信息,
所以电话号码信息采用文件的形式存放到外存中。
在系统运行时,需要将电话号码信息从文
件调入内存来进行查找等操作,为了接收文件中的内容,要有一个数据结构与之对应,可以
设计如下结构类型的数组来接收数据:
constintmax=10;
structTeleNumber
stringname;
//姓名
stringphoneNumber;
//固定电话号码
stringmobileNumber;
//移动电话号码
stringemail;
//电子邮箱
}Tele[max];
为了实现对电话号码的快速查询,可以将上述结构数组排序,以便应用折半查找,但是,
在数组中实现插入和删除操作的代价较高。
如果记录需频繁进行插入或删除操作,可以考虑
采用二叉搜索树组织电话号码信息,则查找和维护都能获得较高的时间性能。
更复杂地,需
要考虑该二叉搜索树是否平衡,如何使之达到平衡。
//结构体的实现
#include<
iostream>
stdlib.h"
string>
usingnamespacestd;
structTeleNumber;
istream&
operator>
(istream&
is,TeleNumber&
c);
//使编译器识别重载的运算符
ostream&
operator<
(ostream&
os,TeleNumber&
stringname;
stringphoneNumber;
stringmobileNumber;
stringemail;
friendistream&
//重载>
friendostream&
//重载<
}Tele[10];
c)
is>
c.name>
c.phoneNumber>
c.mobileNumber>
c.email;
//输入结构体
returnis;
c)//输出结构体
os<
c.name<
setw(10)<
setw(15)<
c.phoneNumber<
setw(20)<
c.mobileNumber<
returnos;
//二叉搜索树的实现
structBSTNode//TeleNumber(E)
TeleNumberdata;
BSTNode*left,*right;
BSTNode():
left(NULL),right(NULL){}
BSTNode(constTeleNumberd,BSTNode*L=NULL,BSTNode*R=NULL)
:
data(d),left(L),right(R){}
~BSTNode(){}
voidsetData(TeleNumberd){data=d;
TeleNumbergetData(){returndata;
};
classBST
public:
BST():
root(NULL){}
~BST(){}
boolInsert(constTeleNumber&
e1)
returnInsert(e1,root);
boolRemove(conststringx)
returnRemove(x,root);
boolModify(conststringx,BSTNode*&
ptr);
BSTNode*getroot(){returnroot;
BSTNode*Search(conststringx,BSTNode*ptr);
private:
BSTNode*root;
e1,BSTNode*&
boolRemove(conststringx,BSTNode*&
//插入到二叉搜索树
boolBST:
:
Insert(constTeleNumber&
ptr)
inti=0;
if(ptr==NULL)
ptr=newBSTNode(e1);
if(ptr==NULL)
cerr<
Outofspace"
exit
(1);
returntrue;
elseif(int(e1.name.substr(i,i+1)[0])<
int(ptr->
data.name.substr(i,i+1)[0]))
Insert(e1,ptr->
left);
elseif(int(e1.name.substr(i,i+1)[0])>
right);
else
returnfalse;
//删除二叉搜索树中的某结点
Remove(conststringx,BSTNode*&
BSTNode*temp;
if(ptr!
=NULL)
if(int(x.substr(0,1)[0])<
data.name.substr(0,1)[0]))
Remove(x,ptr->
elseif(int(x.substr(0,1)[0])>
elseif(ptr->
left!
=NULL&
&
ptr->
right!
temp=ptr->
right;
while(temp->
temp=temp->
left;
ptr->
data=temp->
data;
Remove(ptr->
data.name,ptr->
else
temp=ptr;
if(ptr->
left==NULL)
ptr=ptr->
elseptr=ptr->
deletetemp;
returnfalse;
//在二叉搜索树的某个值
BSTNode*BST:
Search(conststringx,BSTNode*ptr)
returnNULL;
elseif(int(x.substr(0,1)[0])<
returnSearch(x,ptr->
elseif(int(x.substr(0,1)[0])>
returnptr;
Modify(conststringx,BSTNode*&
ptr=Search(x,root);
returntrue;
fstream>
stdlib.h>
iomanip>
tele.h"
BST.H"
inta;
stringstr;
BSTbst;
BSTNode*b;
************************欢迎使用个人电话号码查询系统**********************"
************************||1.查找联系人||**********************"
************************||2.添加联系人||**********************"
************************||3.删除联系人||**********************"
************************||4.修改联系人||**********************"
************************||5.退出本系统||**********************"
ifstreamfin("
C.txt"
);
while(!
fin.eof())
fin>
Tele[i];
bst.Insert(Tele[i]);
i++;
fin.close();
=5)
cout<
请输入您的选择:
cin>
a;
switch(a)
case1:
请输入你要查找的名字:
cin>
str;
if(bst.Search(str,bst.getroot())==NULL)
没有此联系人!
bst.Search(str,bst.getroot())->
data<
}break;
case2:
请输入要添加的联系人:
bst.Insert(Tele[i]);
}break;
case3:
请输入要删除的联系人:
bst.Remove(str);
case4:
请输入要修改的联系人:
bst.Modify(str,b);
case5:
谢谢使用个人电话号码查询系统!
实习题目三排序应用
假定文本文件A1.txt中是我校所有参加南望山庄二期挑房职工的信息,请编写程序,读
出文件中的内容,再按挑房的先后次序排队后将排序号和姓名以文本方式存放到文件A2.txt
中。
排队原则:
先按职称排,同职称按分房工龄排,同工龄按年龄排。
职称编号:
校级干部0
教授、正处级1
副教授、副处级2
讲师、科级3
其他4
先将文本文档的内容读到数组中,重载输入输出号,使得文本文档中的每一行为一个元素,然后按照要用冒泡排序法。
排序后,并将有序的结果输入到文本文档中
structstaff;
is,staff&
os,staff&
constintmax=1000;
structstaff//结构体包括职工信息
stringtitleID;
//职称编号
stringworkingage;
//工龄
stringage;
//年龄
>
}sta[max];
c.titleID>
c.workingage>
c.age;
setiosflags(ios_base:
left)<
setw(12)<
c.titleID<
c.workingage<
c.age<
//冒泡排序法进行排序
voidBubbleSort(staffv[],intn)
for(inti=2;
{
for(intj=n-1;
j>
=i;
j--)
if(atof(v[j-1].titleID.c_str())>
atoi(v[j].titleID.c_str()))
stafftemp=v[j-1];
v[j-1]=v[j];
v[j]=temp;
if(atof(v[j-1].titleID.c_str())==atoi(v[j].titleID.c_str()))
if(atof(v[j-1].workingage.c_str())>
atoi(v[j].workingage.c_str()))
stafftemp=v[j-1];
if(atof(v[j-1].workingage.c_str())==atoi(v[j].workingage.c_str()))
if(atof(v[j-1].age.c_str())>
atoi(v[j].age.c_str()))
{
stafftemp=v[j-1];
}
}
staff.h"
sort.h"
a1.txt"
//将a1.txt的内容读到结构体数组中
sta[i];
BubbleSort(sta,i)