数据结构精品案例推荐5篇修改版文档格式.docx
《数据结构精品案例推荐5篇修改版文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构精品案例推荐5篇修改版文档格式.docx(54页珍藏版)》请在冰豆网上搜索。
BiTreecreate(){BiTreeT;
chari;
i=getchar();
if(i=='
#'
)T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->
data=i;
T->
lchild=create();
rchild=create();
}return(T);
}
voidoutput(BiTreeT)
{
if(T!
=NULL)
output(T->
lchild);
printf("
%c\t"
T->
data);
rchild);
}
BiTreechange(BiTreeT){
BiTreep;
if(T!
{if((T->
lchild!
=NULL)||(T->
rchild!
=NULL))
p=T->
lchild;
lchild=T->
rchild;
rchild=p;
change(T->
return(T);
intdepth(BiTreeT){
intdl,dr,d;
if(T==NULL)d=0;
else
dl=depth(T->
dr=depth(T->
if(dl>
dr)
d=dl+1;
d=dr+1;
return(d);
voidprint(BiTreeT){if(T!
=NULL){
if((T->
lchild==NULL)&
&
(T->
rchild==NULL))
{print(T->
print(T->
}}
main(){inta;
BiTreeT,F;
T=create();
printf("
theoutput\n"
);
output(T);
a=depth(T);
\nthedepthofBiTreeis:
%d"
a);
\ntheleavesofBiTree:
\n"
print(T);
\ntheresultofBiTreechanging:
output(F);
after
第二篇:
数据结构
实验:
线性表的基本操作
【实验目的】
学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。
对顺序表建立、插入、删除的基本操作,对单链表建立、插入、删除的基本操作算法。
【实验内容】
1.顺序表的实践
1)建立4个元素的顺序表s=sqlist[]={1,2,3,4,5},实现顺序表建立的基本操作。
2)在sqlist[]={1,2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在sqlist[]={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践
3.1)建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链表建立的基本操作。
2)将该单链表的所有元素显示出来。
3)在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插入的基本操作。
4)在一个包括头结点和5个结点的(5,4,3,2,1)的单链表的指定位置(如i=2)删除一个结点,实现单链表删除的基本操作。
5)实现单链表的求表长操作。
【实验步骤】
1.打开VC++。
2.建立工程:
点File->
New,选Project标签,在列表中选Win32ConsoleApplication,再在右边的框里为工程起好名字,选好路径,点OK->
finish。
至此工程建立完毕。
3.创建源文件或头文件:
New,选File标签,在列表里选C++SourceFile。
给文件起好名字,选好路径,点OK。
至此一个源文件就被添加到了你刚创建的工程之中。
4.写好代码
5.编译->链接->调试
【实验心得】
线性是我们学习数据结构中,碰到的第一个数据结构。
学习线性表的重点掌握顺序表和单链表的各种算法和时间性能分析。
线性表右两种存储方式即顺序存储结构和链式存储结构。
通过学习我知道了对线性表进行建立、插入、删除,同时单链表也是进行建立、插入、删除。
而对于顺序表的插入删除运算,其平均时间复杂度均为0(n).通过这次的学习,掌握的太熟练,主要是课本上的知识点没有彻底的理解,回去我会多看书,理解重要的概念。
总之,这次实验我找到了自己的不足之处,以后会努力的。
实验二:
栈的表示与实现及栈的应用
(1)掌握栈的顺序存储结构及其基本操作的实现。
(2)掌握栈后进先出的特点,并利用其特性在解决实际问题中的应用。
(3)掌握用递归算法来解决一些问题。
【实验内容】
1.编写程序,对于输入的任意一个非负十进制整数,输出与其等值的八进制数。
2.编写递归程序,实现N!
的求解。
3.编写递归程序,实现以下函数的求解。
n,n=0,1ì
Fib(n)=í
î
Fib(n-1)+Fib(n-2),n>
1
4.编写程序,实现Hanoi塔问题。
【实验步骤】1.打开VC++。
通过这次的学习我掌握了栈这种抽象数据类型的特点,并能在相应的应用任务中正确选用它;
总的来说,栈是操作受限的线性表,是限定仅在表尾进行插入或删除操作的线性表。
因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(botton);
栈又称为后进先出(LastInFirstOut)的线性表,简称LIFO结构,因为它的修改是按后进先出的原则进行的。
加上这个实验,我已经学了线性表(顺序表,单链表)和栈,知道它们都是线性表,而且对以后的学习有很大的作用,可以说这是学习以后知识的总要基础。
实验三:
二叉树的建立及遍历
(1)掌握利用先序序列建立二叉树的二叉链表的过程。
(2)掌握二叉树的先序、中序和后序遍历算法。
1.编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。
如:
输入先序序列abc###de###,则建立如下图所示的二叉树。
并显示其先序序列为:
abcde中序序列为:
cbaed后序序列为:
cbeda【实验步骤】1.打开VC++。
这次试验是关于二叉树的常见操作,主要是二叉树的建立和遍历,在这次实验中我按先序方式建立二叉树的,而遍历方式则相对要多一些,有递归的先序、中序、后序遍历,和非递归的先序、中序、后序遍历,此外还有层次遍历.二叉树高度和叶子个数的计算和遍历相差不大,只是加些判断条件,总体来说,本次试验不太好做,期间出现了很多逻辑错误,变量初始化的问题等,不过经过仔细排查最后都一一解决了。
实验四:
查找与排序
(1)掌握折半查找算法的实现。
(2)掌握冒泡排序算法的实现。
1.编写折半查找程序,对以下数据查找37所在的位置。
5,13,19,21,37,56,64,75,80,88,922.编写冒泡排序程序,对以下数据进行排序。
49,38,65,97,76,13,27,49【实验步骤】1.打开VC++。
(1)查找算法的代码如下所示:
#include"
stdio.h"
malloc.h"
#defineOVERFLOW-1#defineOK1#defineMAXNUM100#defineN10typedefintElemtype;
typedefintStatus;
typedefstruct{
Elemtype*elem;
intlength;
}SSTable;
StatusInitList(SSTable&
ST){inti,n;
ST.elem=
(Elemtype*)
malloc(Elemtype));
if(!
ST.elem)return(OVERFLOW);
输入元素个数和各元素的值:
"
scanf("
%d\n"
&
n);
for(i=1;
i
(MAXNUM*sizeof
ST.elem[i]);
ST.length=n;
returnOK;
}intSeq_Search(SSTableST,Elemtypekey){
inti;
ST.elem[0]=key;
for(i=ST.length;
ST.elem[i]!
=key;
--i);
returni;
}intBinarySearch(SSTableST,Elemtypekey){
intmid,low,high,i=1;
low=1;
high=ST.length;
while(low
mid=(low+high)/2;
if(ST.elem[mid]==key)
returnmid;
elseif(key
high=mid-1;
return0;
}voidmain(){SSTableST;
InitList(ST);
Elemtypekey;
intn;
key="
key);
\n\n"
/*printf("
AfterSeqSearch:
:
"
n=Seq_Search(ST,key);
positionisin%d\n\n"
n);
*/
AfterBinarySearch:
n=BinarySearch(ST,key);
low=mid+1;
if(n)printf("
else
}实验结果如下所示:
(2)排序算法的代码如下所示:
ST)printf("
notin\n\n"
{inti,n;
ST.elem(Elemtype));
}voidSort(SSTableST){
inti,j,t;
for(j=i+1;
j
if(ST.elem[i]>
ST.elem[j]){t=ST.elem[i];
=
malloc
}ST.elem[i]=ST.elem[j];
ST.elem[j]=t;
voiddisplay(SSTableST){inti;
%d
ST.elem[i]);
}voidmain(){
SSTableST;
beforesort:
display(ST);
Sort(ST);
\naftersort:
}实验结果如下所示:
通过这次实验,我明白了程序里的折半查找和冒泡查找.其实排序可以有很多种,但是其目的应该都是为了能够在海量的数据里迅速查找到你要的数据信息,折半查找是种比较快的方式,但前提是要是有序的排序才可以。
对于有序表,查找时先取表中间位置的记录关键字和所给关键字进行比较,若相等,则查找成功;
如果给定值比该记录关键字大,则在后半部分继续进行折半查找;
否则在前半部分进行折半查找,直到查找范围为空而查不到为止。
折半查找的过程实际上死先确定待查找元素所在的区域,然后逐步缩小区域,直到查找成功或失败为止。
算法中需要用到三个变量,low表示区域下界,high表示上界,中间位置mid=(low+high)/2.而冒泡查找则是从小到大的排序.
第三篇:
数据结构】二叉排序树的建立,查找,插入和删除实践题/*sy53.c*/
typedefintKeyType;
typedefstructnode{
KeyTypekey;
structnode*lchild,*rchild;
}BSTNode;
typedefBSTNode*BSTree;
BSTreeCreateBST(void);
voidSearchBST(BSTreeT,KeyTypeKey);
voidInsertBST(BSTree*Tptr,KeyTypeKey);
voidDelBSTNode(BSTree*Tptr,KeyTypeKey);
voidInorderBST(BSTreeT);
main()
{BSTreeT;
charch1,ch2;
KeyTypeKey;
建立一棵二叉排序树的二叉链表存储\n"
T=CreateBST();
ch1='
y'
;
while(ch1=='
||ch1=='
Y'
)
{printf("
请选择下列操作:
1------------------更新二叉排序树存储\n"
2------------------二叉排序树上的查找\n"
3------------------二叉排序树上的插入\n"
4------------------二叉排序树上的删除\n"
5------------------二叉排序树中序输出\n"
6------------------退出\n"
\n%c"
ch2);
switch(ch2)
{case'
1'
break;
case'
2'
\n请输入要查找的数据:
\n%d"
Key);
SearchBST(T,Key);
查找操作完毕。
3'
\n请输入要插入的数据:
InsertBST(&
T,Key);
插入操作完毕。
4'
\n请输入要删除的数据:
DelBSTNode(&
删除操作完毕。
5'
InorderBST(T);
\n二叉排序树输出完毕。
6'
n'
default:
}
BSTreeCreateBST(void)
T=NULL;
请输入一个关键字(输入0时结束输入):
scanf("
while(Key)
{InsertBST(&
请输入下一个关键字(输入0时结束输入):
returnT;
voidSearchBST(BSTreeT,KeyTypeKey)
{BSTNode*p=T;
while(p)
{if(p->
key==Key)
已找到\n"
return;
p=(Keykey)?
p->
lchild:
p->
没有找到\n"
voidInsertBST(BSTree*T,KeyTypeKey)
{BSTNode*f,*p;
p=(*T);
树中已有Key不需插入\n"
f=p;
p=(Keykey)?
p=(BSTNode*)malloc(sizeof(BSTNode));
key=Key;
lchild=p->
rchild=NULL;
if((*T)==NULL)(*T)=p;
elseif(Keykey)f->
lchild=p;
elsef->
}/*InsertBST*/
voidDelBSTNode(BSTree*T,KeyTypeKey)
{BSTNode*parent=NULL,*p,*q,*child;
p=*T;
key==Key)break;
parent=p;
p){printf("
没有找到要删除的结点\n"
q=p;
if(q->
lchild&
q->
rchild)
for(parent=q,p=q->
parent=p,p=p->
child=(p->
lchild)?
parent)*T=child;
else{if(p==parent->
lchild)
parent->
lchild=child;
elseparent->
rchild=child;
if(p!
=q)
q->
key=p->
key;
free(p);
voidInorderBST(BSTreeT){if(T!
=NULL)
{InorderBST(T->
%5d"
InorderBST(T->
}
第四篇:
数据结构讲稿
云淡风清
第1章数据结构概述
1.1概述
以下为某市部分院校的交通地图情况,要求找出从出发点到目的地之间的最短路径及其长度。
对于此问题,如果手工去做,速度慢(特别地,现实中实际地图信息要比此例复杂许多),还容易出错,此时可借助于计算机完成。
计算机进行此类信息的处理时,涉及到两个问题:
一是现实当中的信息在计算机中如何表示,二是如何对信息进行处理。
信息的表示和组织又直接关系到处理信息的程序的效率。
随着应用问题不断复杂化,导致信息量剧增与信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构