数据结构与算法线性表练习题docWord文件下载.docx
《数据结构与算法线性表练习题docWord文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法线性表练习题docWord文件下载.docx(45页珍藏版)》请在冰豆网上搜索。
1、定义静态链表的结点的结构以及结点的型SPACE以及.位置邙osition)和游标(cursor)的型。
2、定义静态链表的基本操作:
voidInitialize();
初始化,将所有存储池中的结点设置为空闲;
cursorGetNode();
从空闲链中获取一个结点;
voidFreeNode(cursorq);
将结点q加入到空闲链;
voidInsert(elementtypex,positionp,cursorM);
在链表M屮的位置为p的元素后面添加一个值为x的结点;
voidDelete(cursorM,positionp);
在链表M屮删除位置为p的元素的后一个元素。
3、在1、2的基础上完成本题。
4、在main函数中进行测试:
先构建一个存储池,然后在该存储池中创建两个静态表,最后将这两个静态表合并。
七、利用指针表示的线性表(链表)表示一个多项式,并实现两个多项式的相加和相乘运算。
假设多项式形式为:
M』+仏x%'
+..・+6才|
其中,系数a#0,指数e满足em>
em-i>
・・・>
e2>
ei>
=0o
1、定义多项式每一项的结构。
2、定义两个多项式的相加和相乘运算函数。
3、在main函数中,构建两个多项式,并测试相加和相乘运算。
八、试编写一个整数进制转换的通用函数convert(intnum,STACKS,intn),要求将整数m转换为n进制数,n进制数的各位依次存放在栈S中。
并在主函数中进行测试。
1、定义栈以及栈的型。
2、定义栈的各种操作。
3、实现函数converto
4、在main函数中,通过调用函数convert将num的n进制数存放到一个栈中,并通过出栈的方法输岀该n进制数
九、设有一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的计数器count,试写出相应的判断队列空、判断队列满、出队算法和入队算法。
1、定义相应的循环队列的型(只有头指针,没有尾指针,但有一个元素个数的计数器);
2、定义该队列的四个算法:
判断队列空、判断队列满、岀队算法和入队算法;
3、在main函数验证算法的正确性。
十、设主串T=uabcaabbabcabaacbacba“,模式为p="
abcabaa"
。
1、计算模式p的nextval函数值
2、不写算法,只画出利用KMP算法进行模式匹配时,每一趟的匹配过程。
1>写出模式p的nextval值;
2、画出KMP算法的每-•趟匹配过程(可参照教材P61从第8行开始的内容);
3、不需要编写程序。
十一、假设表达式屮允许包含三种括号:
圆括号、方括号和大括号。
设计一个算法采用顺序栈(用数组表示的栈)判断表达式中的括号是否正确配对。
1、定义栈以及栈的型,栈中所存放元素的类型为字符型,定义枚举类型Boolean,其中两个元素分别为TRUE和FALSEo
2、定义栈的各种操作。
3、定义函数Booleanchcck(char*s);
判断s屮的括号是否正确配对,如果正确配对,返回TRUE,否则返回FALSEo
4、在主函数中验证所编写函数的正确性。
十二、设有一个带头结点的双向链表h,设计一个算法用于查找第一个元素Z为x的结点,并将其与其前驱结点进行交换。
1、定义带头结点的双向链表的型DLISTo
2、定义双向链表DUST的基本操作。
3^定义函数intswap(elementtypex,DLIST&
h),查找第一个元素之为x的结点,如果在链表屮存在元素值为x的结点,并其与其前驱结点进行交换,并返回1,否则返回0。
4、在主函数中测试所编写函数的正确性。
十三、试编写一个求三元组顺序表示的稀疏矩阵对角线元素之和的算法
十四、当具有相同行值和列值的稀疏矩阵A和B均以三元组顺序表方式存储时,试写岀矩阵相加的算法,其结果存放在以行逻辑链接顺序表方式存储的矩阵c中。
卜五、设有一个稀疏矩阵:
1、写出三元组顺序表存储表示
2、写出十字链表存储的顺序表示
十六、画出广义表LS=((),(e),(a,(b,c,d)))的头尾链表存储结构(类似于教材P70图2-27.9)0要求:
按照教材中的事例画出相应的图形,不需要编程。
其中第一个节点如下:
十七、试编写求广义表屮原子元素个数的算法。
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>
usingnamcspaccstd;
#definemaxlength100
typedefintposition;
typedefintElementtype;
structLIST{
Elementtypeclcmcnts[maxlcngth];
intlast;
};
positionEnd(LISTL)〃线性表长度
{
return(L.last+1);
}
voidInsert(Elementtypex,positionp,LIST&
L)
positionq;
if(L」ast>
=maxlcngth・1)
cout«
"
listisfuir'
«
endl;
elseif((p>
L.last+1)||(p<
1))cout«
npositiondoesnotexitH«
else
fbr(q=L.last;
q>
=p;
q-)
{L.elements[q+l]=L.elements[q];
L.last=L」ast+1;
L.elements[p]=x;
voidDclctc(positionp,LIST&
if((p>
L.last)||(p<
l))
npositiondoesnotexistn«
else
L」ast=L.last-l;
for(q=p;
q<
=L.last;
q++)L.elements[q]=L.elements[q+1];
positionLocate(Elementtypex,LISTL)
for(q=l;
q++)if(L.elements[q]==x)
returnq;
retum(L.last+l);
voidmcrgc(LIST&
L丄IST&
L1,LIST&
L2)
positionp=0,pl,p2;
positionlcnl=End(Ll);
positionlen2=End(L2);
L」ast=lenl+len2-l;
for(pl=0;
p1<
End(L1);
p1++)
L.elements[p]=Ll.elements[p1];
p++;
P-;
fbr(p2=0;
p2<
End(L2);
p24-+)
L.elements[p]=L2.elements[p2];
P++;
P-;
voidread(LIST&
coutvv”请输入线性表长度'
end1;
cin»
L.last;
fbr(inti=O;
i<
i++)
L.elements[i];
voidwrite(LIST&
for(inti=O;
{cout«
L.elements[i]«
,\t,t;
}cout«
intmain()
LISTL,L1,L2;
read(Ll);
write(Ll);
read(L2);
vvritc(L2);
merge(L,Ll,L2);
write(L);
数据结构三(指针)
usingnamespacestd;
structcclltypc{
Elementtypeelement;
celltype*next;
};
typedefcelltype*LIST;
typedefcelltype*position;
positionEnd(LISTL)
positionp;
P=L;
vvhile(p->
next!
=NULL)
p=p->
next;
returnp;
voidInscrt(Elcmcnttypcx,positionp)
q=nevvcelltype;
q->
element=x;
ncxt=p->
ncxt;
p->
next=q;
voidDelete(positionp)//删除p的下一个节点{
if(p->
q=p->
next=q->
deleteq;
p=L;
vvhilc(p->
ncxt!