数据结构课设报告Word文件下载.docx
- 文档编号:22669205
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:50
- 大小:1.42MB
数据结构课设报告Word文件下载.docx
《数据结构课设报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课设报告Word文件下载.docx(50页珍藏版)》请在冰豆网上搜索。
next=NULL;
LNode*r;
r=L;
for(i=1;
i<
=m;
i++)
{
LNode*p;
p=(LinkList)malloc(sizeof(LNode));
p->
data=i;
r->
next=p;
r=p;
}
next=L->
next;
}
q,intn)
{
LinkLists;
intj=1;
while(q->
next!
=q)
{while(j<
=n-1)
{
q=q->
j++;
}
s=q->
q->
next=s->
free(s);
j=1;
cout<
<
"
猴王:
"
q->
data<
endl;
return1;
voidmain()
LinkListq;
intn,m;
输入猴子个数m和n:
;
cin>
>
m>
n;
CreateList(q,m);
ListDetele(q,n);
顺序存储结构:
输入猴子数m和报数n:
int*a=newint[m];
inti,sum=0,count=m;
//存剩余猴子数
for(i=0;
m;
a[i]=1;
i=0;
while(i<
=m)
if(i==m)
i=0;
//当i=n时,循环回去
sum+=a[i];
if(sum==n)//当报到n时
sum=a[i]=0;
//淘汰倒霉猴子;
即赋0
count--;
//剩余猴子数-1
if(count==1)
break;
//剩1只时结束
i++;
if(a[i]!
=0)
猴王是"
i+1<
delete[]a;
2.线索二叉树(**)
1.建立中序线索二叉树,并且中序遍历;
2.求中序线索二叉树上已知结点中序的前驱和后继;
stdlib.h>
#defineMAX100
typedefenumPointerTag{Link,Thread};
//Link==0:
指针,Thread==1:
线索
typedefstructBitNode
{
chardata;
structBitNode*lchild,*rchild;
//左右孩子的指针
PointerTagLTag,RTag;
//左右标志
}BitNode,*Bitree;
Bitreepre=NULL;
Bitreepoint[MAX+1];
intCreatBiTree(Bitree&
T)
//先序创建二叉树
voidInThreading(Bitreep)/
/中序遍历线索化二叉树
intInOrderThreading(Bitree&
Thrt,BitreeT)
//中序遍历线索化二叉树T,并将其中序线索化,Thrt指向头节点
BitreeInPre(Bitreep)//前驱
BitreeInNext(Bitreep)//后继
intTraverse_Thr(BitreeT)//各个节点的前驱和后继
T)//先序创建二叉树
{//该节点非空返回1,双亲节点对应标志Link,
//空时返回0,双亲节点对应标志应为Thread
charch;
输入结点元素(#表示空):
ch;
if(ch=='
#'
)
{
T=NULL;
return0;
}
else
if(!
(T=(BitNode*)malloc(sizeof(BitNode))))
{
cout<
存储分配失败"
exit
(1);
}
T->
data=ch;
if(CreatBiTree(T->
lchild))
T->
LTag=Link;
else
LTag=Thread;
rchild))
RTag=Link;
RTag=Thread;
}
voidInThreading(Bitreep)//中序遍历线索化二叉树
if(p!
=NULL)
InThreading(p->
lchild);
//左子树线索化
if(p->
lchild==NULL)//前驱线索
p->
lchild=pre;
if(pre->
rchild==NULL)//后继线索
pre->
rchild=p;
pre=p;
//保持pre指向p的前驱
rchild);
//右子树线索化
{//中序遍历线索化二叉树T,并将其中序线索化,Thrt指向头节点
Thrt=(Bitree)malloc(sizeof(BitNode));
//申请头结点地址
if(Thrt==NULL)exit
(1);
Thrt->
//建立头结点
rchild=Thrt;
//右指针回指
if(T==NULL)
Thrt->
lchild=Thrt;
//若二叉树为空,则左指针回指
else
lchild=T;
pre=Thrt;
InThreading(T);
//中序遍历线索化二叉树
pre->
//最后一个结点的线索化
rchild=pre;
BitreeInPre(Bitreep)//前驱
Bitreeq;
q=p->
lchild;
if(p->
LTag==Thread)
return(p->
if(q==NULL)
returnNULL;
RTag==Link)
rchild;
return(q);
RTag==Thread)
LTag!
=Thread)
return(q);
intTraverse_Thr(BitreeT)
inti=0;
Bitreep;
p=T->
1--代表是,0--代表否"
是否有"
前驱"
节点"
后继"
顶点序号"
前驱"
while(p!
=T)//空树或遍历结束时p==T
while(p->
LTag==Link)
p=p->
//找开始结点
cout<
p->
LTag<
LTag==Thread)
InPre(p)->
point[i++];
RTag<
InNext(p)->
point[i]=p;
RTag==Thread&
&
rchild!
=T)//寻找后继结点
if(p->
{
cout<
}
else
point[i++];
else
point[i]=p;
p=p->
returni;
intmain()
BitreeT,Thrt,prenode,Nextnode;
intn,index;
charstr;
先序创建二叉树"
CreatBiTree(T);
InOrderThreading(Thrt,T);
n=Traverse_Thr(Thrt);
do{
请输入你要查找节点的序号(按中序输出时的序号)"
cin>
index;
if(index<
0||index>
n)
请输入数的序号大于0并小于等于节点数"
return0;
prenode=InPre(point[index]);
Nextnode=InNext(point[index]);
if(point[index]->
你要查找第"
index<
个节点的前驱结点为"
prenode->
个节点无前驱结点"
个节点后继结点为"
Nextnode->
个节点无后继结点"
你是否要继续?
y--是;
n--否"
str;
}while(str=='
Y'
||str=='
y'
);
return0;
3.宿舍管理查询软件(**)
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
(1)采用交互工作方式
(2)可以增加、删除、修改信息
(3)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)
(4)查询:
a.按姓名查询;
b.按学号查询;
c按房号查询
(5)打印任一查询结果(可以连续操作)
string.h>
#defineMAXSIZE100
intn;
typedefstruct//学生结构体的定义
intnum;
//学号
charname[10];
//姓名
charroom[10];
//房号
}Student;
typedefstructSqList//顺序表结构体的定义
StudentStu[MAXSIZE+1];
//定义一个存放学生信息的数组
}SqList;
voidCreatInfo(SqList&
L)//建立学生信息
voidprint(SqList&
L)//输出顺序表
voidInsertsort(SqList&
L)//直接插入排序(房号优先)
voidInPut(SqList&
L)//添加新的学生信息
intPartition(SqList&
L,inti,intj)//快速排序
voidQuicksort(SqListL,intlow,inthigh)//快速排序
voidSelectsort(SqList&
L)//选择排序(姓名优先)
voidfind(SqList&
L,intn)//查找修改学生并打印
1.建立学生信息
2.插入学生信息并插入排序(房号优先)
3.选择排序(姓名优先)
4.快速排序
5.查找修改学生并打印
L)
请输入你要创建的学生数:
学生的信息:
姓名学号房号:
for(inti=1;
=n;
L.Stu[i].name>
L.Stu[i].num>
L.Stu[i].room;
输出学生信息:
++i)
L.Stu[i].name<
L.Stu[i].num<
L.Stu[i].room<
inti,j;
for(i=2;
if(strcmp(L.Stu[i].room,L.Stu[i-1].room)<
0)
L.Stu[0]=L.Stu[i];
for(j=i-1;
strcmp(L.Stu[0].room,L.Stu[j].room)<
0;
--j)
L.Stu[j+1]=L.Stu[j];
L.Stu[j+1]=L.Stu[0];
L)
n++;
输入学生的信息:
L.Stu[n].name>
L.Stu[n].num>
L.Stu[n].room;
Studentp;
L.Stu[0]=L.Stu[i];
p=L.Stu[i];
j)
while(i<
j&
L.Stu[j].num>
=p.num)
j--;
L.Stu[i]=L.Stu[j];
i++;
L.Stu[j]=L.Stu[i];
L.Stu[i]=p;
voidQuicksort(SqListL,intlow,inthigh)//快速排序
intlocation;
if(low<
high)
location=Partition(L,low,high);
Quicksort(L,low,location-1);
//对左区间递归排序
Quicksort(L,location+1,high);
//对右区间递归排序
Studentt;
inti,j,k;
i++)
k=i;
for(j=i+1;
j<
j++)
if(strcmp(L.Stu[j].name,L.Stu[k].name)<
k=j;
if(k!
=i)
t=L.Stu[i];
L.Stu[i]=L.Stu[k];
L.Stu[k]=t;
L,intn)//查找学生信息
intt,m=1,i;
charch,a;
请输入你要查找的学号:
t;
该学生的信息为:
while(m<
=n&
L.Stu[m].num!
=t)
m++;
if(L.Stu[m].num==t)
学号是:
L.Stu[m].num<
\t姓名:
L.Stu[m].name<
\t房号:
L.Stu[m].room<
是否修改信息(Y/N):
cin>
a;
if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告