数据结构报告Word格式.docx
- 文档编号:20810599
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:41
- 大小:236.94KB
数据结构报告Word格式.docx
《数据结构报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构报告Word格式.docx(41页珍藏版)》请在冰豆网上搜索。
1.3实验代码
#include<
stdio.h>
stdlib.h>
#defineMAXSIZE100
typedefintElemType;
typedefstructlist
{
ElemTypeelem[MAXSIZE];
intlength;
}Sqlist;
typedefstructNode
ElemTypedate;
structNode*next;
}DNode;
typedefstructDulNode
structDulNode*prev,*next;
intfreq;
}DLinkList;
//定义双向链表
voidCreatlist(Sqlist&
L)
inti;
printf("
请输入顺序表的长度:
"
);
scanf("
%d"
&
L.length);
for(i=0;
i<
L.length;
i++)
scanf("
L.elem[i]);
}
voidCreateSame(Sqlist&
L1,Sqlist&
L2)
intcounter=0;
SqlistL3;
Creatlist(L1);
Creatlist(L2);
for(inti=0;
L1.length;
for(intj=0;
j<
L2.length;
j++)
{
if(L1.elem[i]==L2.elem[j])
{
L3.elem[counter]=L1.elem[i];
counter++;
}
}
printf("
删除相同元素后的链表元素:
for(i=0;
counter;
printf("
%d"
L3.elem[i]);
\n"
voidChooseking(DNode*head)
intm,num;
请输入猴子的总数:
num);
出局的猴子所报的号码是:
m);
DNode*s,*q,*t;
inti,counter=0;
if(m==1)
最后一只猴子是%d号。
num);
else
{
num;
s=(DNode*)malloc(sizeof(DNode));
s->
date=i+1;
next=NULL;
if(i==0)
head=s;
q=head;
else
q->
next=s;
q=q->
next;
q->
next=head;
q=head;
while(q->
next!
=q)
counter++;
if(counter==m-1)
t=q->
next=t->
counter=0;
free(t);
q=q->
q->
date);
}
DLinkList*Created()
intnum=0;
DLinkList*head;
DLinkList*p1,*p2;
p1=p2=(DLinkList*)malloc(sizeof(DLinkList));
p1->
head=NULL;
while(p1->
date!
=0)
num++;
if(num==1)
head=p1;
else
p2->
next=p1;
p1->
prev=p2;
p2=p1;
p1=(DLinkList*)malloc(sizeof(DLinkList));
p2->
return(head);
voidprinted(DLinkList*head)
DLinkList*p=head;
while(p!
=NULL)
p->
p=p->
DLinkList*Locate(DLinkList*L,intx)
{
DLinkList*p=L->
DLinkList*q;
while(p&
&
(p->
=x))
if(!
p)returnNULL;
p->
freq++;
q=p->
prev;
while((q!
=L)&
(q->
freq)<
(p->
freq))
if(q!
=p->
prev)
{
p->
prev->
next=p->
if(p->
next)
p->
next->
prev=p->
prev=q;
next=q->
q->
next=p;
prev=p;
returnp;
}
voidLocateLine()
DLinkList*p,*head;
head=(DLinkList*)malloc(sizeof(DLinkList));
head->
date=0;
输入链表各个结点的值(数字0代表结束):
p=Created();
p->
prev=head;
printed(head);
intnum;
输入要访问的元素(数字0代表访问结束):
for(;
i!
=0;
)
i=num;
p=Locate(head,num);
根据访问频度重新排序后的链表变为:
printed(head->
next);
voidmain()
intn;
Sqlisthead1,head2;
DNode*head3;
************************************************************\n"
0.退出程序。
1.删除两个链表中的不同元素。
2.猴子选大王的问题.\n"
3.带有表头结点的非循环双向链表问题。
while(n!
请选择:
n);
switch(n)
case0:
printf("
退出系统!
exit(0);
break;
case1:
CreateSame(head1,head2);
break;
case2:
Chooseking(head3);
case3:
LocateLine();
1.4运行结果
程序执行后出现下图样式的菜单:
新建顺序表:
删除顺序表中所要求的元素:
拆分顺序表:
判别括号是否配对:
正确的匹配:
建立一个循环队列:
向循环队列中插入元素:
从循环队列中删除元素:
退出操作:
2.1实验名称
单链表的基本运算
2.2实验内容
(1)假设有两个按元素值递增次序排列的线性表A和B,均以单链表形式存储,里面的大部分元素对应相等,请删除一些元素(A中有而B中没有,或B中有而A中没有),使得两个有序表中保留下来的元素对应相等。
比如,A中元素为(1,3,5,8,10,13,18),B中元素为(1,3,6,8,9,10,13,15),则删除元素后A、B里的元素为(1,3,8,10,13)。
(2)猴子选大王。
n只猴子围成一圈,从1到m报数,报m的猴子出局。
余下的猴子从第m+1只开始继续从1到m报数,报m的猴子出局。
第n只猴子报数后,第1只猴子接着报数(因为围成了圈)。
待整个圈只剩下一只猴子时,该猴子即为大王。
n和m由用户输入,请输出当选大王的猴子的编号。
(3)设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prev(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。
在链表被起用前,其值均初始化为零。
每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。
试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。
(4)在主函数中设计一个简单的菜单,分别调试上述算法。
2.3实验代码
printf
("
2.4运行结果
删除两个链表中的不同元素:
猴子选大王问题:
当所报号码为1时:
非循环双向链表的访问频度排序:
实验二栈与队列的基本运算
一、实验内容:
(1)任意输入一个字符串,按反序输出。
要求字符串从键盘随机输入,字符长度不做具体限制。
实现时,以链栈为手段。
(1)设计一个算法,判定一个字符串是否是对称字符串。
若是,则返回1,否则返回0。
(2)括号配对检查。
试设计一个程序对任意输入的语句或数学表达式,判断其符号是否匹配。
若匹配,则返回1;
否则返回0。
(3)编写递归和非递归程序,计算下列表达式的值
1n=0
2xn=1
n>
1
(5)舞伴问题。
假设在周末舞会上,男士和女士各自组成一排,跳舞开始的时候,依次从男队和女队上各出一人配成舞伴。
若两队初始人数不相同,则较长的那一队中未匹配对者等待下一轮舞曲。
现要求写一篇算法模拟上述舞伴配对的问题。
二、程序代码:
1
malloc.h>
typedefcharElemType;
typedefstructsnode{
ElemTypedata;
structsnode*next;
}LinkSTACK;
voidInitStack(LinkSTACK**top)
{*top=(LinkSTACK*)malloc(sizeof(LinkSTACK));
(*top)->
intpush(LinkSTACK**top,ElemTypex)
{LinkSTACK*s;
s=(LinkSTACK*)malloc(sizeof(LinkSTACK));
s->
data=x;
next=(*top)->
next=s;
return1;
intEmpty(LinkSTACK**top)
return((*top)->
next==NULL?
1:
0);
intPop(LinkSTACK**top,ElemType*x)
LinkSTACK*s;
if(Empty(top)){
Stackisfree!
return0;
s=(*top)->
*x=s->
data;
next=s->
{charch;
LinkSTACK*top;
InitStack(&
top);
请输入一字串"
while((ch=getchar())!
='
\n'
)push(&
top,ch);
while(!
Empty(&
top)){
Pop(&
top,&
ch);
%c"
ch);
2
#include<
string.h>
#defineMAXSIZE40
typedefstruct{
ElemTypedata[MAXSIZE];
inttop;
}STACK;
voidInitStack(STACK*S)
{S->
top=-1;
intPush(STACK*S,ElemTypex)
{if(S->
top==MAXSIZE-1){
St
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告