当前位置:文档之家› 数据结构习题(有答案)

数据结构习题(有答案)

{ int p=1;
for (int j=1; j<=i; j++) p*=j;
.
s+=p;
}
return s;
}
解:
(1) , T(n)=O(n)
(2) , T(n)=O(n2)
算法设计
;
有3枚硬币,其中有1枚是假的,伪币与真币重量略有不同。如何借用一架天平,找出伪币以流程图表示算法。
上机练习题
要求:给出问题分析、算法描述、源程序及运行截图,在线提交。
}
(2) 编写算法,从串s中删除所有和串t相同的子串。
解:
int SubString_Delete(SString &s, SString t )
,
已知下列字符串
a = 'THIS', f = 'A SAMPLE', c = 'GOOD', d ='NE', b = ' ',
s =StrConcat(a,StrConcat(StrSub(f,2,7),StrConcat(b, StrSub (a,3,2)))),
StrAssign(v, StrSub (u, 6, 3));
StrAssign(w, 'W');
cout<<“'t=”<<t<<endl;
cout<<“v=”<<v;
cout<<“u=”<<StrRep(u, v, w);

}
字符串S=‘aabaabaabaac',P=‘aabaac'
1)给出S和P的next值和nextval值;
1. 试问执行以下函数会产生怎样的输出结果
voiddemonstrate( )
{
StrAssign(s, 'THIS IS A BOOK');
{
StrRep (s, StrSub(s, 3, 7), 'ESE ARE');
StrAssign(t,StrConcat(s, 'S'));
StrAssign(u, 'XYXYXYXYXYXY');
<
串结构定义如下:
struct SString
{
char *data;
};
求:串S所含不同字符的总数和每种字符的个数,不区分英文字母的大小写。

1. 假设有二维数组 A6×8,每个元素用相邻的 6 个字节存储,存储器按字节编址。已知 A 的起始存储位置(基地址)为 1000,计算:
\ห้องสมุดไป่ตู้
x=x+y;
(3)
指出下列个算法的功能,并求其时间复杂度。
(1) int sum1(int n)
{
int p=1,s=0;
for (int i=1;i<=n; i++)

{ p*=i; s+=p;}
return s;
}
(2) int sum2 (int n)
{ int s=0;
for( int i=1; i<=n; i++)
2)若S作主串,P作模式串,试给出KMP算法的匹配过程。
1)S的next与nextval值分别为0和0009,
p的next与nextval值分别为012123和002003

2)利用KMP算法的匹配过程:
第一趟匹配:aabaabaabaac
aabaac(i=6,j=6)
第二趟匹配:aabaabaabaac
(2)(A+B)*D+E/(F+A*D)+C
(3) A&&B||!(E>F)
(1) A-B+C-D+
(2) AB+D*EFAD*+/+C+
(3) AB&&EF ! ||
7.计算后缀表达式:4 5 * 3 2 + - 的值。

解:15
8.将下列递推过程改写为递归过程。
voidrecursion( int n ) {

第1章 绪
有下列几种二元组表示的数据结构,试画出它们分别对应的图形表示,并指出它们分别属于何种结构。
(1) A= ( D,R ),其中,D = { a1,a2,a3,a4}, R={ }
(2) B= ( D,R ),其中,D = { a,b,c,d,e}, R={(a,b),(b,c),(c,d),(d,e)}
t =StrRep(f, StrSub (f,3,6),c),
u =StrConcat(StrSub(c,3,1),d), g = 'IS',
v =StrConcat(s,StrConcat(b,StrConcat(t,StrConcat(b,u)))),
试问: s, t, v, StrLength(s),StrIndex(v,g),StrIndex(u,g) 各是什么
3.编写一个算法,将一个非负的十进制整数N转换为B进制数,并输出转换后的结果。当N=248D,B分别为8和16时,转换后的结果为多少
#include“”
int NumTrans( int N, int B) {
简述栈和队列的逻辑特点,各举一个应用实例。
[
6. 写出下列中缀表达式的后缀表达式。
(1)-A+B-C+D
(3) C= ( D,R ),其中,D = { a,b,c,d,e,f,g}, R={(d,b),(d,g),(b,a),(b,c),(g,e),(e,f)}
(4) K= ( D,R ),其中,D = { 1,2,3,4,5,6}, R={ <1,2>,<2,3>,<2,4>,<3,4>,<3,5>,<3,6>,<4,5>,<4,6>}
template <calss T>
T LinkList<T>::Delete(int i)
template <calss T>
{
T LinkList<T>::Delete(int i){
用教材定义的顺序表的基本操作实现下列操作:
template <calss T>
intDeleteElem(SqListL, Te)
s->next= q->next ; q->next=s;
上机练习题
%
要求:给出问题分析、算法描述、源程序及运行截图,在线提交。
编程实现:删除单链表中值为e的元素。
1. 铁路进行列车调度时, 常把站台设计成栈式结构的站台,如右图所示。试问:若进站的六辆列车顺序如上所述, 那么是否能够得到325641和154623的出站序列, 如果不能, 说明为什么不能; 如果能, 说明如何得到(即写出"进栈"或"出栈"的序列)。
(aa)baac
第三趟匹配:aabaabaabaac
(成功) (aa)baac
3. 算法设计
$
串结构定义如下:
struct SString
{
char *data;
};
(1) 编写一个函数,计算一个子串在一个字符串中出现的次数,如果不出现,则为0。
%
int str_count (SString S, SString T )
1.设a, b, c为3个整数,求其中位于中间值的整数。
(
1. 设计算法:在顺序表中删除值为e的元素,删除成功,返回1;否则,返回0。
int Sqlist<T>::DeleteElem( T e )
{ for (i=1; i<=length; i++)
分析顺序表中元素定位算法 int SqList<T>::Locate ( T e ) 的时间复杂度。
}
(2)statusalgo_2(SqStack S,inte){
SqStack T;
·
int d;
while(!()){
d = ();
if(d!=e ) (d);}
while(!()){
d=();
(d);}
}
$
解:(1) 借助一个数组,将栈中的元素逆置。

(2) 借助栈T,将栈S中所有值为e的数据元素删除之。
4.描述一下三个概念的区别:头指针,头结点,首元结点。并给予图示。

头指针:是一个指针变量,里面存储的是链表中首结点的地址,并以此来标识一个链表。
头结点:附加在第一个元素结点之前的一个结点,头指针指向头结点。
首元结点:指链表中的第一个元素结点。
5. 对于无头结点单链表,给出删除第i个结点的算法描述。

已知:s='(XYZ)+* ',t='(X+Z)*Y'。试利用下列运算,将 s 转化为 t。
联接:StrConcat ( &S,T )
求子串:(char *) StrSub( S, i, len )
置换:StrRep ( &S, T, R )
上机练习题
要求:给出问题分析、算法描述、源程序及运行截图,在线提交。
解:设表长为n,等概率下,每个元素被定位的概率为:p=1/n
定位成功第i个元素,需比较i次
·
3.对于有头结点的单链表,分别写出定位成功时,实现下列定位语句序列。
(1) 定位到第i个结点ai;
相关主题