北理工数据结构作业5.docx

上传人:b****5 文档编号:6430956 上传时间:2023-01-06 格式:DOCX 页数:9 大小:135.78KB
下载 相关 举报
北理工数据结构作业5.docx_第1页
第1页 / 共9页
北理工数据结构作业5.docx_第2页
第2页 / 共9页
北理工数据结构作业5.docx_第3页
第3页 / 共9页
北理工数据结构作业5.docx_第4页
第4页 / 共9页
北理工数据结构作业5.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

北理工数据结构作业5.docx

《北理工数据结构作业5.docx》由会员分享,可在线阅读,更多相关《北理工数据结构作业5.docx(9页珍藏版)》请在冰豆网上搜索。

北理工数据结构作业5.docx

北理工数据结构作业5

第九章作业

1、分别画出在线性表(a,b,c,d,e,f,g)中进行折半查找,以查关键字等于e、f和g的过程。

(1)查e

1):

abcdefg

↑low↑mid↑high

此时d

说明d若存在,必在区间[mid+1,high]

令low=mid+1;

2):

abcdefg

↑↑↑

lowmidhigh

此时f>e

说明d若存在,必在区间[low,mid-1]

令high=mid–1;

3):

abcdefg

high↑low

↑mid

此时mid指向的元素为e,查找成功;

(2)查f

1):

abcdefg

↑low↑mid↑high

此时d

说明f若存在,必在区间[mid+1,high]

令low=mid+1;

2):

abcdefg

↑↑↑

lowmidhigh

此时mid指向的元素为f,查找成功;

(3)查g

1):

abcdefg

↑low↑mid↑high

此时d

说明g若存在,必在区间[mid+1,high]

令low=mid+1;

2):

abcdefg

↑↑↑

lowmidhigh

此时f

说明g若存在,必在区间[mid+1,high]

令low=mid+1;

3):

abcdefg

high↑low

↑mid

此时mid指向的元素为g,查找成功;

2、请将折半查找的算法改写为递归算法。

intBinSearch(SSTables;intlow,inthigh;keyTypeK)

{

if(low>high)return0;

else{

mid=(low+high)/2;

switch{

cases.elem[mid].key

returnBinSearch(s,mid+1,high,K);

break;

cases.elem[mid].key==K:

returnmid;

break;

cases.elem[mid].key>K:

returnBinSearch(s,low,mid-1,K);

break;

default:

;

}//switch

}//else

}//BinSearch

3、编写判别给定二叉树是否为二叉排序树的算法。

假设此二叉树是以二叉链表的形式存储的,且树中关键字均不同。

typedefstructBiTNode{

TElemTypedata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

intflag=1,last=0;

intBiSortTree(BitreeT)//判断二叉树T是否二叉排序树,是则返回1,否则返回0

{

if(T->lchild&&flag)BiSortTree(T->lchild);

if(T->datadata与其中序前驱last比较大小

last=T->data;

if(T->rchild&&flag)BiSortTree(T->rchild);

returnflag;

}//BiSortTree

实验四

输入10个数,从插入排序、快速排序、选择排序三类算法中各选一种编程实现。

程序如下(均为.cpp)

插入排序:

#include

#defineMAXSIZE100

#defineERROR0

typedefstruct{

intR[MAXSIZE+1];

intlength;

}SqList;

voidInsertSort(SqList&L)

{//对顺序表L作直接插入排序

inti,j;

for(i=2;i<=L.length;++i)

if(L.R[i]

{

L.R[0]=L.R[i];

L.R[i]=L.R[i-1];

for(j=i-2;L.R[0]

L.R[j+1]=L.R[j];

L.R[j+1]=L.R[0];

}

}

main()

{

inti,n;

SqListL;

printf("inputtotalnumberofthesequence:

\n");

scanf("%d",&n);

if(n<=0||n>MAXSIZE)

{

printf("nmustmorethan0andlessthan%d.\n",MAXSIZE);

returnERROR;

}

L.length=n;

printf("inputtheelements:

\n");

for(i=1;i<=n;i++)

scanf("%d",&L.R[i]);

InsertSort(L);

printf("\nSequenceaftersort:

\n");

for(i=1;i<=n;i++)

printf("%4d",L.R[i]);

}

快速排序:

#include

#defineMAXSIZE100

#defineERROR0

typedefstruct{

intR[MAXSIZE+1];

intlength;

}SqList;

intPartition(SqList&L,intlow,inthigh){

intp;

L.R[0]=L.R[low];

p=L.R[low];

while(low

while(low=p)

--high;

L.R[low]=L.R[high];

while(low

++low;

L.R[high]=L.R[low];

}

L.R[low]=L.R[0];

returnlow;

}

voidQSort(SqList&L,intlow,inthigh){

intp;

if(low

p=Partition(L,low,high);

QSort(L,low,p-1);

QSort(L,p+1,high);

}

}

voidQuickSort(SqList&L){

QSort(L,1,L.length);

}

main()

{

inti,n;

SqListL;

printf("inputtotalnumberofthesequence:

\n");

scanf("%d",&n);

if(n<=0||n>MAXSIZE)

{

printf("nmustmorethan0andlessthan%d.\n",MAXSIZE);

returnERROR;

}

L.length=n;

printf("inputtheelements:

\n");

for(i=1;i<=n;i++)

scanf("%d",&L.R[i]);

QuickSort(L);

printf("\nSequenceaftersort:

\n");

for(i=1;i<=n;i++)

printf("%4d",L.R[i]);

}

 

选择排序:

#include

#defineMAXSIZE100

#defineERROR0

typedefstruct{

intR[MAXSIZE+1];

intlength;

}SqList;

voidSelectSort(SqList&L)

{

inti,j,k;

for(i=1;i

{

k=i;

for(j=i+1;j<=L.length;j++)

if(L.R[j]

k=j;

if(k!

=i)

{

L.R[0]=L.R[i];L.R[i]=L.R[k];L.R[k]=L.R[0];

}

}

}

main()

{

inti,n;

SqListL;

printf("inputtotalnumberofthesequence:

\n");

scanf("%d",&n);

if(n<=0||n>MAXSIZE)

{

printf("nmustmorethan0andlessthan%d.\n",MAXSIZE);

returnERROR;

}

L.length=n;

printf("inputtheelements:

\n");

for(i=1;i<=n;i++)

scanf("%d",&L.R[i]);

SelectSort(L);

printf("\nSequenceaftersort:

\n");

for(i=1;i<=n;i++)

printf("%4d",L.R[i]);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1