数据结构课程设计题目.docx
《数据结构课程设计题目.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计题目.docx(42页珍藏版)》请在冰豆网上搜索。
数据结构课程设计题目
《数据结构》课程设计题目
(C++)
刘新320130938311
题目1:
猴子选王(学时:
3)
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。
/*
DataStructureExperiment-Project1
Author:
BirdLiu(LiuXin)
CreatedDate:
2015-03-08
*/
#include
#include
#include
usingnamespacestd;
/*ClassDefinition*/
classMonkey{
public:
Monkey(){flag=1;};
Monkey(intnum){initNum=num;flag=1;};
voidsetInitNum(intnum);
voidsetTempNum(intnum);
voidsetFlag(intnum);
intgetInitNum();
intgetTempNum();
intgetFlag();
Monkey*next;
Monkey*last;
private:
intinitNum,tempNum;
intflag;
};
/*ClassFunctionsDefinition*/
voidMonkey:
:
setInitNum(intnum){
initNum=num;
}
voidMonkey:
:
setTempNum(intnum){
tempNum=num;
}
voidMonkey:
:
setFlag(intnum){
flag=num;
}
intMonkey:
:
getInitNum(){
returninitNum;
}
intMonkey:
:
getTempNum(){
returntempNum;
}
intMonkey:
:
getFlag(){
returnflag;
}
/*VectorFunction*/
intrunWithVector(){
/*InitilizeMonkeyGroup*/
intm;
cout<<"Pleaseinputm:
";
cin>>m;
if(m<3){
cerr<<"Notallowed!
"<exit
(1);
}
MonkeymonkeyGroup[m];
for(inti=0;imonkeyGroup[i].setInitNum(i+1);
}
vectormonkeyCircle;
vector:
:
iteratoriter;
for(inti=0;imonkeyCircle.push_back(monkeyGroup[i]);
}
/*Processing*/
intn,leftCount;
cout<<"Pleaseinputn:
";
cin>>n;leftCount=m;
if(n<1){
cerr<<"Notallowed!
"<exit
(1);
}
while
(1){
if(leftCount>=n){
monkeyCircle.erase(monkeyCircle.begin()+n-1);
leftCount--;
}
else{
n=n-leftCount-1;
monkeyCircle.erase(monkeyCircle.begin()+n);
leftCount--;
}
if(leftCount==1){
cout<<"TheKingisNo."<break;
}
}
return0;
}
/*ChainFunction*/
intrunWithChain(){
/*InitilizeMonkeyGroup*/
intm,n,leftCount;
cout<<"Pleaseinputm&n:
";
cin>>m>>n;
if(m<3){
cerr<<"Notallowed!
"<exit
(1);
}
leftCount=m;
/*GenerateChain*/
Monkey*head=newMonkey;
Monkey*first=newMonkey;
head->next=first;
Monkey*p=first;
for(inti=1;i<=m;i++){
if(i!
=m){
p->setInitNum(i);
Monkey*newMonkey=newMonkey;
p->next=newMonkey;
p=p->next;
}
else{
p->setInitNum(i);
p->next=first;
}
}
/*Finder*/
Monkey*temp=head;
Monkey*temp2=newMonkey;
while(leftCount!
=1){
for(inti=1;itemp=temp->next;
if(temp->next!
=head->next){
temp2=(temp->next)->next;
free(temp->next);
temp->next=temp2;
}
else{
head->next=temp;
}
leftCount--;
temp=head;
}
cout<<"TheKingisNo."<<(head->next)->getInitNum()<return0;
}
/*MainFunction*/
intmain(intargc,char*argv[]){
intchoose;
cout<<"1.Runwithvector"<cin>>choose;
if(choose==1)
runWithVector();
else{
if(choose==2)
runWithChain();
else
cerr<<"Notallowed!
"<}
return0;
}
题目2:
字符逆转(学时:
3)
从键盘读入一个字符串,把它存入一个链表(每个结点存储1个字符),并按相反的次序将字符串输出到显示屏。
/*
DataStructureExperiment-Project2
Author:
BirdLiu(LiuXin)
CreatedDate:
2015-03-29
*/
#include
usingnamespacestd;
structNode
{
charc;
Node*next;
Node*last;
intnum;
};
intmain(){
chararray[100];
Node*head=newNode;
Node*pBottom=newNode;
head->next=NULL;
head->last=NULL;
Node*p=head;
cin>>array;
for(inti=0;i<100;i++){
if(array[i]!
=0){
Node*pNew=newNode;
pNew->c=array[i];
pNew->num=i;
pNew->next=NULL;
pNew->last=p;
p->next=pNew;
p=pNew;
}
else{
pBottom->next=NULL;
pBottom->last=p;
break;
}
}
while
(1){
pBottom=pBottom->last;
cout<c;
if(pBottom->last==NULL)
break;
}
return0;
}
题目3:
工资核算(学时:
3)
设有一个单位的人员工资有如下信息:
name、department、basepay、allowance、total。
现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中;再从paydata取出工资数据并给每个人的basepay增加100元,增加后将工资数据显示于屏幕(每行1人)。
/*
DataStructureExperiment-Project3
Author:
BirdLiu(LiuXin)
CreatedDate:
2015-04-26
*/
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classEmployee{
public:
stringname;
stringdepartment;
doublebase_pay;
doubleallowance;
};
voidsplit(conststring&src,conststring&separator,vector&dest){
stringstr=src;
stringsubstring;
string:
:
size_typestart=0,index;
do{
index=str.find_first_of(separator,start);
if(index!
=string:
:
npos)
{
substring=str.substr(start,index-start);
dest.push_back(substring);
start=str.find_first_not_of(separator,index);
if(start==string:
:
npos)return;
}
}while(index!
=string:
:
npos);
//thelasttoken
substring=str.substr(start);
dest.push_back(substring);
}
doublestr2num(strings){
doublenum;
stringstreamss(s);
ss>>num;
returnnum;
}
intsaveData(Employee*person){
ofstreamout("data",ios:
:
app);
while(out.is_open()){
out<name<<";"<department<<";"<base_pay<<";"<allowance<out.close();
}
return0;
}
intshowData(){
vectorresult;
vector:
:
iteratorq;
charbuffer[256];
ifstreamin("data");
if(!
in.is_open()){cout<<"Erroropeningfile";exit
(1);}
doublei,res_base,res_allowance;
while(!
in.eof()){
in.getline(buffer,100);
result.clear();
split(buffer,";",result);
for(q=result.begin();q!
=result.end();q++){
i++;
if(i==3){
res_base=str2num(*q)+100;
cout<}
else{
if(i==4){res_allowance=str2num(*q);}
cout<<*q<<"";
if(i==4){cout<}
}
i=0;
}
return0;
}
intmain(){
intchoice=3;
while(choice!
=0){
cout<<"Pleasechoose:
"<(1)Newdata"<(2)Showdata"<cin>>choice;
if(choice==1){
Employee*person=newEmployee;
cout<<"Pleaseinputthename,department,base_payandallowance:
"<cin>>person->name>>person->department>>person->base_pay>>person->allowance;
saveData(person);
}
if(choice==2){
showData();
}
}
return0;
}
题目4:
满足条件的有序表生成(学时:
3)
已知三个有序表A、B、C,它们皆由同一类元素构成,现要求对于表A作以下运算而获得有序表D:
排出A中所有的既在B中又在C中出现的元素。
另外该任务要求具有建立有序表功能以及输出有序表到屏幕的功能。
/*
DataStructureExperiment-Project4
Author:
BirdLiu(LiuXin)
CreatedDate:
2015-04-27
*/
#include
usingnamespacestd;
voidgenerateList(intlist[10]){
for(inti=0;i<10;i++){
for(intj=0;j
if(list[i]inttemp=0;
temp=list[j];
list[j]=list[i];
list[i]=temp;
}
}
}
}
intfindElement(inta[10],intb[10],intc[10],intd[10]){
intflag=0;
inttemp[10];
for(intk=0;k<10;k++){
for(inti=0;i<10;i++){
for(intj=0;j<10;j++){
if(a[k]==b[i]&&b[i]==c[j])
a[k]=-1;
}
}
}
for(inti=0;i<10;i++){
if(a[i]!
=-1){
d[flag]=a[i];
flag++;
}
}
returnflag;
}
intmain(){
intnum;
inta[10],b[10],c[10],d[10];
cout<<"PleaseinputarrayA:
(Allarenaturalnumbersand10numbersintotal)"<for(inti=0;i<10;i++)
cin>>a[i];
generateList(a);
cout<<"PleaseinputarrayB:
(Allarenaturalnumbersand10numbersintotal)"<for(inti=0;i<10;i++)
cin>>b[i];
generateList(b);
cout<<"PleaseinputarrayC:
(Allarenaturalnumbersand10numbersintotal)"<for(inti=0;i<10;i++)
cin>>c[i];
generateList(c);
num=findElement(a,b,c,d);
for(inti=0;i<10;i++)
cout<cout<
for(inti=0;icout<cout<return0;
}
题目5:
一元多项式的减法(学时:
6)
设有两个一元多项式A(x),B(x),请完成运算A(x)+B(x)、A(x)-B(x),要求多项式采用链表进行存储。
另外该任务要求具有建立多项式链表以及输出多项式到屏幕的功能。
/*
DataStructureExperiment-Project5
Author:
BirdLiu(LiuXin)
CreatedDate:
2015-04-27
*/
#include
usingnamespacestd;
classPolymer{
public:
Polymer(){};
intn;
intpower;
Polymer*next;
};
intcreateChain(Polymer*head){
inthighest;
cout<<"Pleaseinputthehighestpower:
(mustbeabove0)";
cin>>highest;
//Polymer*head=newPolymer;
Polymer*p=head;
for(inti=0;i<=highest;i++){
cout<<"Pleaseinputaofx^"<
";
cin>>p->n;
p->power=i;
Polymer*newPolymer=newPolymer;
p->next=newPolymer;
p=p->next;
}
returnhighest;
}
voidaddPolymer(Polymer*aHead,Polymer*bHead,Polymer*result,intaHighest,intbHighest){
cout<<"Add:
"<if(aHighest>bHighest){
Polymer*aTemp=aHead;
Polymer*bTemp=bHead;
for(inti=0;i<=aHighest;i++){
if(i<=bHighest){
cout<n+bTemp->n<<"x^"<aTemp=aTemp->next;
bTemp=bTemp->next;
}
else{
if(i!
=aHighest){
cout<n<<"x^"<aTemp=aTemp->next;
}
else
cout<n<<"x^"<}
}
}
else{
Polymer*aTemp=aHead;
Polymer*bTemp=bHead;
for(inti=0;i<=bHighest;i++){
if(i<=aHighest){
cout<n+bTemp->n<<"x^"<aTemp=aTemp->next;
bTemp=bTemp->next;
}
else{
if(i!
=bHighest){
cout<n<<"x^"<bTemp=bTemp->next;
}