数据结构课程设计实验报告信息安全111班游宇豪09Word格式文档下载.docx
《数据结构课程设计实验报告信息安全111班游宇豪09Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告信息安全111班游宇豪09Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
);
return0;
intmain()
inti,m,n,x;
dlnode*);
crtlink(&
getchar();
print(0;
}程序结果:
2、插入:
intinsertdl(dlnode*."
return0;
s=(dlnode*)malloc(sizeof(dlnode));
s->
data=x;
prior=p->
prior;
p->
prior->
next=s;
prior=s;
print()
intdeletedl(dlnode*."
s=p;
next=p->
next;
next->
free(s);
print(top==0;
voidpush(inte);
voidpop(int&
e);
voiddisplay();
};
intsqstack:
:
length()
returntop;
voidsqstack:
push(inte)
{elem[top++]=e;
pop(int&
e)
{if(!
empty())
{e=elem[--top];
;
display()
for(inti=top-1;
i>
=0;
i--)
cout<
<
elem[i]<
"
"
;
endl;
{inti,x,e;
sqstacka(100);
请输入要建立栈的长度:
cin>
>
x;
for(i=1;
i<
=x;
{cout<
请输入要入栈的"
个数据:
e;
a.push(e);
显示队栈中的元素为:
a.display();
请输入出栈元素个数:
出栈元素为:
{a.pop(e);
e<
显示栈中的剩余元素为:
}运行结果:
实验三
——数制转换
数制转换。
利用栈结构的先进后出的具有特性来实现数制转换。
用栈结构实现数制转换。
#include<
{szzh*p;
inta;
while(m!
=0)
a=m%n;
if(a<
16&
&
a>
9)
a=other(a);
p=(szzh*)malloc(sizeof(szzh));
p->
data=a;
next=s->
next;
s->
next=p;
m=n;
intPop(szzh*s)
{charx;
szzh*p;
p=s->
printf("
\n"
转换后的结果:
while(p!
=null){
next=p->
x=p->
data;
if(x<
10)
x);
elseprintf("
%c"
printf("
╰┳uu┳╯谢谢您的使用!
是否继续?
┃︻︻┃\n"
intother(inti)
switch(i)
case10:
return65;
break;
case11:
return66;
case12:
return67;
case13:
return68;
case14:
return69;
case15:
return70;
intChoose(inti)
{intj,x,c;
while(i){
if(i==1)
{printf("
\n~(^_^)进入成功!
~(^_^)\n"
\n输入您想要转换的十进制数:
x);
if(x!
=0)
{
\n输入您要转换成的进制:
c);
Push(&
sq,x,c);
Pop(&
sq);
}
else
printf("
\n0不能转制\n"
\n~~~~~~~~~~\n"
}
else
exit(0);
1.继续Y(^_^)Y\n"
2.退出(^_^)~~\n"
输入您的选择:
scanf("
i);
{inta;
initStack(&
\n欢迎使用本程序,您有如下两个选择:
\n1.开始数制转换\n"
\n2.退出\n"
\n输入您的选择:
a);
Choose(a);
}
运行结果:
实验四
---迷宫求解
熟悉二维数组,并走出迷宫。
用二维数组建立迷宫并输出所有路径。
利用二维数组先建立迷宫,然后用递归输出所有的路径。
stdio.;
maze[i][j]=5;
if(i==endI&
j==endJ)
\n其路径为:
for(m=0;
m<
=M+1;
m++)
{
for(n=0;
n<
=N+1;
n++)
{
if(maze[m][n]==1)
printf("
■"
elseif(maze[m][n]==5)
通"
elseif(maze[m][n]==0)
□"
elseif(maze[m][n]==7)
}
}
if(maze[i][j+1]==0)visit(i,j+1);
if(maze[i+1][j]==0)visit(i+1,j);
if(maze[i][j-1]==0)visit(i,j-1);
if(maze[i-1][j]==0)visit(i-1,j);
maze[i][j]=0;
}
voidshow()
{system("
cls"
inta,b,s;
请输入迷宫行数:
M);
请输入迷宫列数:
N);
输入迷宫(1表示墙0表示通):
if(M==0||N==0)
此迷宫为空!
for(a=1;
a<
=M;
a++)
for(b=1;
b<
=N;
b++)
maze[a][b]);
显示迷宫:
for(a=0;
a++)
{
for(b=0;
if(a==0||b==0||a==M+1||b==N+1)
maze[a][b]=7;
if(maze[a][b]==1)
elseif(maze[a][b]==0)
elseif(maze[a][b]==7)
}
\n输入迷宫的入口(坐标表示):
%d,%d"
startI,&
startJ);
\n输入迷宫的出口(坐标表示):
endI,&
endJ);
if(maze[endI][endJ]==1||maze[startI][startJ]==1)
此迷宫不可通过!
else
visit(startI,startJ);
{ints;
欢迎进入迷宫求解系统\n"
\n"
1.生成迷宫\n"
2.退出\n"
请输入您的选择:
s);
switch(s){
case1:
show();
case2:
exit
(1);
运行结果:
实验五
——求子串、判断两串是否相等、合并串
了解串的概念和线性表之间的关系,掌握串的存储结构及串的基本运算
1、在顺序结构下,求主串s中从第i个字符起,长度为k的子串;
2、将两串连接成一个新串
3、判断两串是否相等
串是由一个或多个字符组成的有限序列。
主串s中从第i个字符起,长度为k的子串;
判断两个串是否相等,首先判断长度,若等,再依次比较每个字符。
1.合并串:
#definemax100
stdio.()
strTypes,l,t;
inti=0,j=0;
charch;
请输入串1,s="
while((ch=getchar())!
='
\n'
s.str[i++]=ch;
s.length=i;
请输入串2,l="
l.str[j++]=ch;
l.length=j;
concat(s,l,t);
2.判断两串是否相等
#definemax40
stdio.0;
for(i=0;
=s.length;
if(s.str[i]!
=p.str[i])
return0;
return1;
strTypes1,s2;
inti=0,j=0,m;
请输入串s1:
s1.str[i++]=ch;
s1.length=i-1;
请输入串s2:
s2.str[j++]=ch;
s2.length=j-1;
if((m=equal(s1,s2))!
两串相等!
两串不等!
3.顺序串的字串
#definemax10
n=s.length;
if(i>
=0&
=n-1&
k>
0&
k<
=n-1)
for(j=0;
j<
k;
j++)
t.str[j]=s.str[i+j];
s.str[k]='
\0'
t.length=k;
returnt;
k==0)
子串为空!
t.str[0]='
t.length=0;
strTypes,l;
inti=0,j,k;
strTypesubString();
输入主串s:
输入子串位置i="
和子串长度k="
k);
l=subString(s,i,k);
if(l.length==0)
i,kiswrong!
输出子串l:
printf("
l.str[j]);
程序结果:
实验六
------用递归算法遍历二叉树
了解二叉树遍历及递归定义,掌握二叉树各种遍历方法和基本操作算法.
建立一颗排序二叉树,并用递归算法分别用前序,中序和后序遍历之
二叉树的遍历是指按照某种顺序访问二叉树中的每个节点,使每个节点被访问一次且只被访问一次.
stdio.(p);
bnode*ins_lc(bnode*p,intx)
bnode*q;
if(p==null)
Illegalinsert."
q=(bnode*)malloc(sizeof(bnode));
q->
data=x;
lc=null;
rc=null;
if(p->
lc!
=null)
rc=q->
lc;
lc=q;
bnode*ins_rc(bnode*p,intx)
rc!
lc=q->
rc;
rc=q;
voidprorder(bnode*p)
return;
%d\t%u\t%d\t%u\t%u\n"
++counter,p,p->
data,p->
lc,p->
rc);
if(p->
prorder(p->
lc);
voidpreorder(bnode*p)
if(p==null)
%d\t"
p->
if(p->
lc!
=null)
preorder(p->
lc);
rc!
rc);
voidinorder(bnode*p)
inorder(p->
voidpostorder(bnode*p)
{
postorder(p->
intChoose()
bnode*bt,*p,*q;
intx,j;
请输入节点,以-1结束:
p=creat(x,null,null);
bt=p;
while(x!
=-1)
p=bt;
while(x!
=p->
data&
q!
p=q;
if(x<
data)
q=p->
lc;
else
rc;
if(x==p->
数据输入有误!
return0;
if(x<
*ins_lc(p,x);
ins_rc(p,x);
}system("
p=bt;
排序二叉树的结构:
序号\t地址\t节点\t左孩子\t右孩子\n"
prorder(p);
while(j){
\n请输入你要的功能\n"
1:
前序遍历二叉树\n"
2:
中序遍历二叉树\n"
3:
后序遍历二叉树\n"
0.退出\n"
j);
switch(j){
case1:
先序遍历次序:
preorder(p);
case2:
中序遍历次序:
inorder(p);
case3:
后序遍历次序:
postorder(p);
case0:
}}
intj;
while(