数据结构与算法线性表练习题Word下载.docx

上传人:b****6 文档编号:16016159 上传时间:2022-11-17 格式:DOCX 页数:58 大小:76.02KB
下载 相关 举报
数据结构与算法线性表练习题Word下载.docx_第1页
第1页 / 共58页
数据结构与算法线性表练习题Word下载.docx_第2页
第2页 / 共58页
数据结构与算法线性表练习题Word下载.docx_第3页
第3页 / 共58页
数据结构与算法线性表练习题Word下载.docx_第4页
第4页 / 共58页
数据结构与算法线性表练习题Word下载.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

数据结构与算法线性表练习题Word下载.docx

《数据结构与算法线性表练习题Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法线性表练习题Word下载.docx(58页珍藏版)》请在冰豆网上搜索。

数据结构与算法线性表练习题Word下载.docx

六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数:

voidMerge(cursorM,cursorN);

合并的方法是将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中。

1、定义静态链表的结点的结构以及结点的型SPACE以及位置(position)和游标(cursor)的型。

2、定义静态链表的基本操作:

voidInitialize();

初始化,将所有存储池中的结点设置为空闲;

cursorGetNode();

从空闲链中获取一个结点;

voidFreeNode(cursorq);

将结点q加入到空闲链;

voidInsert(elementtypex,positionp,cursorM);

在链表M中的位置为p的元素后面添加一个值为x的结点;

voidDelete(cursorM,positionp);

在链表M中删除位置为p的元素的后一个元素。

3、在1、2的基础上完成本题。

先构建一个存储池,然后在该存储池中创建两个静态表,最后将这两个静态表合并。

七、利用指针表示的线性表(链表)表示一个多项式,并实现两个多项式的相加和相乘运算。

假设多项式形式为:

其中,系数ai≠0,指数ei满足em>

em-1>

…>

e2>

e1>

=0。

1、定义多项式每一项的结构。

2、定义两个多项式的相加和相乘运算函数。

3、在main函数中,构建两个多项式,并测试相加和相乘运算。

八、试编写一个整数进制转换的通用函数convert(intnum,STACKS,intn),要求将整数m转换为n进制数,n进制数的各位依次存放在栈S中。

并在主函数中进行测试。

1、定义栈以及栈的型。

2、定义栈的各种操作。

3、实现函数convert。

4、在main函数中,通过调用函数convert将num的n进制数存放到一个栈中,并通过出栈的方法输出该n进制数

九、设有一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的计数器count,试写出相应的判断队列空、判断队列满、出队算法和入队算法。

1、定义相应的循环队列的型(只有头指针,没有尾指针,但有一个元素个数的计数器);

2、定义该队列的四个算法:

判断队列空、判断队列满、出队算法和入队算法;

3、在main函数验证算法的正确性。

十、设主串T=“abcaabbabcabaacbacba“,模式为p=“abcabaa”。

1、计算模式p的nextval函数值

2、不写算法,只画出利用KMP算法进行模式匹配时,每一趟的匹配过程。

1、写出模式p的nextval值;

2、画出KMP算法的每一趟匹配过程(可参照教材P61从第8行开始的内容);

3、不需要编写程序。

十一、假设表达式中允许包含三种括号:

圆括号、方括号和大括号。

设计一个算法采用顺序栈(用数组表示的栈)判断表达式中的括号是否正确配对。

1、定义栈以及栈的型,栈中所存放元素的类型为字符型,定义枚举类型Boolean,其中两个元素分别为TRUE和FALSE。

3、定义函数Booleancheck(char*s);

判断s中的括号是否正确配对,如果正确配对,返回TRUE,否则返回FALSE。

4、在主函数中验证所编写函数的正确性。

十二、设有一个带头结点的双向链表h,设计一个算法用于查找第一个元素之为x的结点,并将其与其前驱结点进行交换。

1、定义带头结点的双向链表的型DLIST。

2、定义双向链表DLIST的基本操作。

3、定义函数intsx,DLIST&

h),查找第一个元素之为x的结点,如果在链表中存在元素值为x的结点,并其与其前驱结点进行交换,并返回1,否则返回0。

4、在主函数中测试所编写函数的正确性。

十三、试编写一个求三元组顺序表示的稀疏矩阵对角线元素之和的算法

十四、当具有相同行值和列值的稀疏矩阵A和B均以三元组顺序表方式存储时,试写出矩阵相加的算法,其结果存放在以行逻辑链接顺序表方式存储的矩阵C中。

十五、设有一个稀疏矩阵:

1、写出三元组顺序表存储表示

2、写出十字链表存储的顺序表示

十六、画出广义表LS=((),(e),(a,(b,c,d)))的头尾链表存储结构(类似于教材P70图2-27.9)。

按照教材中的事例画出相应的图形,不需要编程。

其中第一个节点如下:

十七、试编写求广义表中原子元素个数的算法。

1、定义广义表的节点的型;

2、定义广义表的基本操作;

3、定义本题要求的函数intelements(listpointerL);

函数返回值为广义表中原子的个数。

例如,广义表(a,b,c,d)原子的个数为4,而广义表(a,(a,b),d,e,((i,j),k))中院子的个数为3。

提示:

先利用基本操作Cal(L)获得表头,判断表头是不是原子,再利用基本操作Cdr(L)获得除第一个元素外的其他元素所形成的表L1,利用递归的方法求L1中原子的个数。

1、上述作业要求在单独完成;

2、完成后,于规定期限内提交到ftp服务器的相应目录中中,注意,在提交时将所编写的程序统一拷贝到一个Word文件中,文件名格式为“学号+姓名”

三(数组表示)

#include<

iostream>

usingnamespacestd;

#definemaxlength100

typedefintposition;

typedefintElementtype;

structLIST{

Elementtypeelements[maxlength];

intlast;

};

positionEnd(LISTL)//线性表长度

{

return(L.last+1);

}

voidInsert(Elementtypex,positionp,LIST&

L)

positionq;

if(L.last>

=maxlength-1)

cout<

<

"

listisfull"

endl;

elseif((p>

L.last+1)||(p<

1))

positiondoesnotexit"

else

{

for(q=L.last;

q>

=p;

q--)

{

L.elements[q+1]=L.elements[q];

}

L.last=L.last+1;

L.elements[p]=x;

}

}

voidDelete(positionp,LIST&

if((p>

L.last)||(p<

positiondoesnotexist"

L.last=L.last-1;

for(q=p;

q<

=L.last;

q++)

L.elements[q]=L.elements[q+1];

positionLocate(Elementtypex,LISTL)

for(q=1;

if(L.elements[q]==x)

returnq;

return(L.last+1);

voidmerge(LIST&

L,LIST&

L1,LIST&

L2)

positionp=0,p1,p2;

positionlen1=End(L1);

positionlen2=End(L2);

L.last=len1+len2-1;

for(p1=0;

p1<

End(L1);

p1++)

L.elements[p]=L1.elements[p1];

p++;

}

p--;

for(p2=0;

p2<

End(L2);

p2++)

L.elements[p]=L2.elements[p2];

p--;

voidread(LIST&

cout<

请输入线性表长度"

cin>

>

L.last;

for(inti=0;

i<

i++)

cin>

L.elements[i];

voidwrite(LIST&

for(inti=0;

cout<

L.elements[i]<

\t"

;

intmain()

LISTL,L1,L2;

read(L1);

write(L1);

read(L2);

write(L2);

merge(L,L1,L2);

write(L);

数据结构三(指针)

structcelltype{

Elementtypeelement;

celltype*next;

typedefcelltype*LIST;

typedefcelltype*position;

positionEnd(LISTL)

positionp;

p=L;

while(p->

next!

=NULL)

p=p->

next;

returnp;

voidInsert(Elementtypex,positionp)

q=newcelltype;

q->

element=x;

next=p->

p->

next=q;

voidDelete(positionp)//删除p的下一个节点

if(p->

q=p->

p->

nex

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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