文档库 最新最全的文档下载
当前位置:文档库 › 数据结构第三章

数据结构第三章

数据结构第三章
数据结构第三章

二、简述栈和线性表的区别。

答:线性结构的特点是在数据元素的非空有限集中,存在惟一的一个被称为“第一个”的数据元素;存在惟一的一个被称做“最后一个”的数据元素;除第一个之外,集合中的每个数据元素均只有一个前驱;;除最后一个之外,集合中每个数据元素均只有一个后继。

线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。线性表是一个相当灵活的数据结构,它的长度可根据需要增长或缩短,即对线性表的数据元素不仅可以访问,还可在在任意位置进行插入和删除操作等。

栈是一种特殊的线性结构,从数据的逻辑结构角度来看,栈是线性表,从操作的角度来看,栈的基本操作是线性表操作的子集,是操作受限制的线性表,其特点是栈限定仅在表尾进行插入和删除操作的线性表,它的存取特征是后进先出。

三、写出下列程序段的输出结果(栈的元素类型Selem Type为char)。

Void main( )

{stack s ;

Char x,y;

Initstack(s);

x =’c’;y=’k’;

Push(s,x);push(s,’a’);push(s,y);

Pop(s,x);push(s,’t’);push(s,x);

Pop(s,x);push(s,’s’);

While(!stackempty(s)) {pop(s,y);printf(y);}

Printf(x);

}

输出结果:stack

四、简述以下算法的功能(栈的元素类型Selem Type为int)。

1、status algol(stack s)

{

Int I,n,A[255];

n=0;

while(!stackempty(s)) {n++;pop(s,A[n]);}

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

push(s,A[i]);

}

答案:对栈中元素进行反序入栈。

2、status algo2(stack S,int e)

{ stack T;int d;

Initstack(T);

While(!stackempty(s))

{ pop(s,d);

If(d!=e) push(T,d);

}

While(!stackempty(T))

{ pop(T,d);

Push(S,d);

}

}

答案:利用栈T辅助将栈S中所有值为e的数据元素删除。

二十八、.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的置空队、判队空、入队和出队等算法。

【分析】带头结点的循环链表表示的队列如图3-7所示,仅有队尾指针rear,但可通过rear->next找到头结点,再通过头结点找到队头,即rear->next->next。

头结点

图3-7 带头结点的循环链表队列

【算法】

①置空队

LinkList SetNull(){

LinkList rear;

rear=new LNode;

rear->next=rear;

return rear;

}

②判队空

int Empty(LinkList rear){

if (rear->next==rear)

return 1; //若队列为空返回1

else

return 0; //否则返回0

}

③入队

LinkList ENQUEUE(LinkList rear,DataType x){

LinkList p;

p=new LinkList;

p->data=x;

p->next=rear->next; //将p插入到rear->next之后

rear->next=p;

rear=p;

return rear; //返回新的队尾指针

}

④出队

LinkList DEQUEUE(LinkList raer,DataType *x){

LNode *p,*q;

if (rear->next==rear) //若队空,则输出队空信息

cout<<“EMPTY”;

else{

q=rear->next;

p=q->next;

} //否则q指向头结点,p指向队头

if (p==rear)

rear=q; //若队中仅有一个元素,则将rear指向头结点 q->next=p->next; //将p所指结点出队

*x=p->data;

delete p; //将对头结点的值赋给形参*x

return rear; //返回队尾指针

}

二十九、如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分,尾指针和头指针值相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队列和出队列的算法。

解:Status EnCyQueue(CyQueue &Q,int x)//带tag域的循环队列入队算法

{

if(Q.front==Q.rear&&Q.tag==1) //tag域的值为0表示"空",1表示"满"

return OVERFLOW;

Q.base[Q.rear]=x;

Q.rear=(Q.rear+1)%MAXSIZE;

if(Q.front==Q.rear) Q.tag=1; //队列满

}//EnCyQueue

Status DeCyQueue(CyQueue &Q,int &x)//带tag域的循环队列出队算法

{

if(Q.front==Q.rear&&Q.tag==0) return INFEASIBLE;

Q.front=(Q.front+1)%MAXSIZE;

x=Q.base[Q.front];

if(Q.front==Q.rear) Q.tag=1; //队列空

return OK;

}//DeCyQueue

三十、假设循环队列中只设rear和length 来分别指示队尾元素的位置和队中元素的个数,试给出判别此循环队列的队满条件,并写出相应的入队和出队算法,要求出队时需返回队头元素。

解:

根据题意,可定义该循环队列的存储结构:

#define QueueSize 100

typedef char Datatype ; //设元素的类型为char型

typedef struct {

int length;

int rear;

Datatype Data[QueueSize];

}CirQueue;

CirQueue *Q;

循环队列的队满条件是:Q-> length ==QueueSize

知道了尾指针和元素个数,当然就能计算出队头元素的位置。算法如下:

(1)判断队满

int FullQueue( CirQueue *Q)

{//判队满,队中元素个数等于空间大小

return Q-> length ==QueueSize;

}

(2)入队

void EnQueue( CirQueue *Q, Datatype x)

{// 入队

if(FullQueue( Q))

Error("队已满,无法入队");

Q->Data[Q->rear]=x;

Q->rear=(Q->rear+1)%QueueSize;//在循环意义上的加1

Q-> length ++;

}

(3)出队

Datatype DeQueue( CirQueue *Q)

{//出队

if(Q-> length ==0)

Error("队已空,无元素可出队");

int tmpfront; //设一个临时队头指针

tmpfront=(QueueSize+Q->rear - Q->quelen+1)%QueueSize;//计算头指针位置

Q-> length --;

return Q->Data[tmpfront];

}

三十一、回文是指正读和反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。

解:

#include "stdio.h"

#define stacksize 100

typedef char datatype;

typedef struct

{ datatype data[stacksize];

int top;

}seqstack;

stacknull(seqstack *p)

{p->top=-1;}

Int stackfull(seqstack *p)

{

return p->top==stacksize-1;

}

tackempty(seqstack *p)

{

if(p->top==-1) return 1;

else return 0;

}

push(seqstack *p,datatype x)

{

if(stackfull(p))

{printf("it is wrong.");exit(0);}

p->top++;

p->data[p->top]=x;

}

pop(seqstack *p)

{

if(stackempty(p))

{ printf("error");exit(0);}

return(p->data[p->top--]);

}

main()

{

char temp;

int n,i,length=0;

seqstack l;

stacknull(&l);

clrscr();

printf("the top is %d",l.top);

printf("\ninput char:");

printf("\ninput n:");

scanf("%d\n",&n);

for(i=0;i

{

scanf("%c",&l.data[i]);

length++;

}

printf("\n");

length=length-1;

printf("\nthe length is %d",length); for(i=0;i<(length/2);i++)

{

push(&l,l.data[i]);

}

if(length%2==0)

{

for(i;i

if(temp=pop(&l)!=l.data[i])

{ printf("\nit is error.");exit(0);} printf("\nit is true.");

}

else

{

for(i;i

if(temp=pop(&l)!=l.data[i+1])

{printf("\nit is error.");exit(0);}

printf("\nit is true.");

}

补充题:

一、设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

(1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)?

(2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。

(3)请分析 1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。

答:

(1)出栈序列为:1324

(2)不能得到1423序列。因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push (3),Push(4),Pop()。这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。

(3)在1,2 ,3 ,4 的24种排列中,可通过相应入出栈操作得到的序列是:

1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321

不能得到的序列是:

1423,2413,3124,3142,3412,4123,4132,4213,4231,4312

二、链栈中为何不设置头结点?

答:

链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

三、循环队列的优点是什么? 如何判别它的空和满?

答:

循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。

四、设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢?

答:

当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。

五、指出下述程序段的功能是什么?

(1) void Demo1(SeqStack *S){

int i; arr[64] ; n=0 ;

while ( StackEmpty(S)) arr[n++]=Pop(S);

for (i=0, i< n; i++) Push(S, arr[i]);

} //Demo1

(2) SeqStack S1, S2, tmp;

DataType x;

...//假设栈tmp和S2已做过初始化

while ( ! StackEmpty (&S1))

{

x=Pop(&S1) ;

Push(&tmp,x);

}

while ( ! StackEmpty (&tmp) )

{

x=Pop( &tmp);

Push( &S1,x);

Push( &S2, x);

}

(3) void Demo2( SeqStack *S, int m)

{ // 设DataType 为int 型

SeqStack T; int i;

InitStack (&T);

while (! StackEmpty( S))

if(( i=Pop(S)) !=m) Push( &T,i);

while (! StackEmpty( &T))

{

i=Pop(&T); Push(S,i);

}

}

(4)void Demo3( CirQueue *Q)

{ // 设DataType 为int 型

int x; SeqStack S;

InitStack( &S);

while (! QueueEmpty( Q ))

{x=DeQueue( Q); Push( &S,x);}

while (! StackEmpty( &s))

{ x=Pop(&S); EnQueue( Q,x );}

}// Demo3

(5) CirQueue Q1, Q2; // 设DataType 为int 型

int x, i , n= 0;

... // 设Q1已有内容, Q2已初始化过

while ( ! QueueEmpty( &Q1) )

{ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); n++;} for (i=0; i< n; i++)

{ x=DeQueue(&Q2) ;

EnQueue( &Q1, x) ; EnQueue( &Q2, x);}

答:

(1)程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的元素放到栈顶。此栈中元素个数限制在64个以内。

(2)程序段的功能是利用tmp栈将一个非空栈s1的所有元素按原样复制到一个栈s2当中去。

(3)程序段的功能是利用栈T,将一个非空栈S中值等于m的元素全部删去。

(4)程序段的功能是将一个循环队列Q经过S栈的处理,反向排列,原来的队头变成队尾,原来的队尾变成队头。

(5)这段程序的功能是将队列1的所有元素复制到队列2中去,但其执行过程是先把队列1的元素全部出队,进入队列2,然后再把队列2的元素复制到队列1中。

数据结构练习题第三章栈、队列和数组习题与答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”; top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x)

数据结构第三章习题答案

第三章习题 1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答: ⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么? ⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。(即写出 以“S”表示进栈、以“X”表示出栈的栈操作序列)。 2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。如果对这个队列重复执行下列4步 操作: (1)输出队首元素; (2)把队首元素值插入到队尾; (3)删除队首元素; (4)再次删除队首元素。 直到队列成为空队列为止,得到输出序列: (1)A、C、E、C、C (2) A、C、E (3) A、C、E、C、C、C (4) A、C、E、C 3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满? 4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操 作数栈和运算符栈的变化过程: A-B*C/D+E↑F 5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’ 模式的字符序列。其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。 6.假设表达式由单字母变量和双目四则运算算符构成。试写一个算法,将一个通常书写形式且书写 正确的表达式转换为逆波兰式。 7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分 头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

数据结构第三章习题

数据结构第三章习题 3.1 单项选择题 2.一个栈的入栈序列a, b, c, d, e, 则栈的不可能的输出序列是。 A. edcba B. Decba C. Dceab D. abcde 3. 若已知一个栈的入栈序列是1,2,3,………..n, 其输出序列为p1, p2, p3,……,pn, 若p1=n, 则pi为。 A.i. B. n=I C. n- i+1 D.不确定 4.栈结构通常采用的两种存储结构是。 A. 顺序存储结构和链表存储结构 B. 散链方式和索引方式 C.链表存储结构和数组 D. 线性存储结构和非线性存储结构 5.判定一个栈ST(最多元素为m0)为空的条件是。 A. ST->top<>0 B. ST->top=0 C.ST->top<>m0 D.ST->top=m0 6.判定一个栈ST(最多元素为m0)为栈满的条件是。 A. ST->top!=0 B.ST->top==0 C.ST->top!=m0 D.ST->top==m0 7.栈的特点是,队列的特点是。 A先进先出 B. 先进后出 8. 一个队列的入栈序列是1,2,3,4,则队列的输出序列是。 A. 4,3,2,1 B. 1,2,3,4 C. 1,4,3,2 D. 3,2,4,1 9. 判定一个队列QU(最多元素为m0)为空的条件是。 A.QU->rear- QU->front==m0 B.QU->rear- QU->front-1==m0 C.QU->front== QU->rear D. QU->front== QU->rear+1 10.判定一个队列QU(最多元素为m0)为满队列的条件是。 A.QU->rear- QU->front==m0 B.QU->rear- QU->front-1==m0 C.QU->front== QU->rear D.QU->front== QU->rear+1 11. 判定一个循环队列QU(最多元素为m0)为空的条件是。 A. QU->front== (QU->rear+1)%m0 B. QU->front!= (QU->rear+1)%m0 C.QU->front== QU->rear D.QU->front!= QU->rear 12. 判定一个循环队列QU(最多元素为m0)为满队列的条件是。 A. QU->front== (QU->rear+1)%m0 B. QU->front!= (QU->rear+1)%m0 C.QU->front== QU->rear D.QU->front!= QU->rear+1 12. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行。 HS->next=s;

GIS空间数据模型

藿乐威尔田园的真正迷人之处,在我看是:它的遁隐之深,离开村子有两英里, 离开最近的邻居有半英里,并且有一大片地把它和公路隔开了;它傍着河流,据 它的主人说,由于这条河,而升起了雾,春天就不会下霜了。 梭罗在地球表面的任何地方都存在着垂直的和水平的两种关系:垂直关系把同一个地 方的不同要素联结起来,而水平关系则把不同地方的各种因素联结起来。这两种 关系的相对重要性随时代的变化而有所不同…正是这双重的关注,甚而至于这 两种关系的结合,才为地理学提供了独特性和完整性。 R.J.约翰斯顿 第三章空间数据模型 导读:本章描述的是整个GIS理论中最为核心的容。为了能够利用信息系统工具来 描述现实世界,并解决其中的问题,必须对现实世界进行建模。对于地理信息系统 而言,其结果就是空间数据模型。空间数据模型可以分为三种: 场模型:用于描述空间中连续分布的现象; 要素模型:用于描述各种空间地物; 网络模型:可以模拟现实世界中的各种网络; 在各种模型中,又介绍了相关的概念,如空间划分,空间关系,以及拓扑关系的形 式化描述——9交模型等。 最后讲述了普通的二维数据模型在空间上和时间上的扩展,时间数据模型和三维数 据模型。 值得注意的是,本章谈到的场模型和要素模型类同于后面提及的栅格数据和矢量数 据,但是前者是概念模型;后者是指其在信息系统中的实现。 1.空间数据模型的基本问题 人类生活和生产所在的现实世界是由事物或实体组成的,有着错综复杂的组成结构。从系统的角度来看,空间事物或实体的运动状态(在特定时空中的性状和态势)和运动方式(运动状态随时空变化而改变的式样和规律)不断发生变化,系统的诸多组成要素(实体)之间又存在着相互作用、相互制约的依存关系,表现为人口、物质、能量、信息、价值的流动和作用,反映出不同的空间现象和问题。为了控制和调节空间系统的物质流、能量流和人流等,使之转移到期望的状态和方式,实现动态平衡和持续发展,人们开始考虑对其中诸组成要素的空间状态、相互依存关系、变化过程、相互作用规律、反馈原理、调制机理等进行数字模拟和动态分析,这在客观上为地理信息系统提供了良好的应用环境和重要发展动力。 1.1概念 地理数据也可以称为空间数据(Spatial Data)。地理空间是指物质、能量、信息的存在形式在形态、结构过程、功能关系上的分布方式和格局及其在时间上的延续。地理信息系统中的地理空间分为绝对空间和相对空间两种形式。绝对空间是具有属性描述的空间位置的集合,它由一系列不同位置的空间坐标值组成;相对空间是具有空间属性特征的实体的集合,

第三章 空间数据采集与处理练习..

一、单选题 1、对于离散空间最佳的内插方法 是: A.整体内插法 B.局部内插法 C.移动拟合法 D.邻近元法 2、下列能进行地图数字化的设备 是: A.打印机 B.手扶跟踪数字化仪 C.主 机 D.硬盘 3、有关数据处理的叙述错误的 是: A.数据处理是实现空间数据有序化的必要过程 B.数据处理是检验数据质量的关键环节 C.数据处理是实现数据共享的关键步骤 D.数据处理是对地图数字化前的预处理 4、邻近元法 是: A.离散空间数据内插的方法 B.连续空间内插的方法 C.生成DEM的一种方法 D.生成DTM的一种方法 5、一般用于模拟大范围内变化的内插技术是: A.邻近元法 B.整体拟合技术 C.局部拟合技术 D.移动拟合法 6、在地理数据采集中,手工方式主要是用于录入: A.属性数据 B.地图数据 C.影象数 据 D.DTM数据

7、要保证GIS中数据的现势性必须实时进行: A.数据编辑 B.数据变换 C.数据更 新 D.数据匹配 8、下列属于地图投影变换方法的 是: A.正解变换 B.平移变换 C.空间变 换 D.旋转变换 9、以信息损失为代价换取空间数据容量的压缩方法是: A.压缩软件 B.消冗处理 C.特征点筛选 法 D.压缩编码技术 10、表达现实世界空间变化的三个基本要素是。 A. 空间位置、专题特征、时间 B. 空间位置、专题特征、属性 C. 空间特点、变化趋势、属性 D. 空间特点、变化趋势、时间 11、以下哪种不属于数据采集的方式: A. 手工方式 B.扫描方式 C.投影方 式 D.数据通讯方式 12、以下不属于地图投影变换方法的是: A. 正解变换 B.平移变换 C.数值变 换 D.反解变换 13、以下不属于按照空间数据元数据描述对象分类的是: A. 实体元数据 B.属性元数据 C.数据层元数据 D. 应用层元数据 14、以下按照空间数据元数据的作用分类的是: A. 实体元数据 B.属性元数据 C. 说明元数据 D. 分类元数据 15、以下不属于遥感数据误差的是: A. 数字化误差 B.数据预处理误差 C. 数据转换误差 D. 人工判读误差

数据结构第三章栈和队列3习题

第三章栈和队列试题 一、单项选择题 1.栈的插入和删除操作在()进行。 A. 栈顶 B. 栈底 C. 任意位置 D. 指定位置 2.当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时, 首先应执行()语句修改top指针。 A. top++; B. top--; C. top = 0; D. top; 3.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。 A. 3, 2, 1 B. 2, 1, 3 C. 3, 1, 2 D. 1, 3, 2 4.在一个顺序存储的循环队列中,队头指针指向队头元素的()位置。 A. 前一个 B. 后一个 C. 当前 D. 后面 5.当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为()。 A. n-2 B. n-1 C. n D. n+1 6.从一个顺序存储的循环队列中删除一个元素时,需要()。 A. 队头指针加一 B. 队头指针减一 C. 取出队头指针所指的元素 D. 取出队尾指针所指的元素 7.假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front+1 == rear B. rear+1 == front C. front == 0 D. front == rear 8.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front == rear B. front != NULL C. rear != NULL D. front == NULL 9.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想在链式栈的栈顶插入一 个由指针s所指的结点,则应执行操作()。 A. top->link = s; B.s->link = top->link; top->link = s; C. s->link = top; top = s; D. s->link = top; top = top->link; 10.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想摘除链式栈的栈顶结点, 并将被摘除结点的值保存到x中,则应执行操作()。 A. x = top->data; top = top->link; B. top = top->link; x = top->data; C. x = top; top = top->link; D. x = top->data; 11.设循环队列的结构是 #define MaxSize 100 typedef int ElemType;

数据结构课后习题答案第四章

第四章 一、简述下列每对术语的区别: 空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。 答: ●空串是指不包含任何字符的串,它的长度为零。 空白串是指包含一个或多个空格的串,空格也是字符。 ●串常量是指在程序中只可引用但不可改变其值的串。 串变量是可以在运行中改变其值的。 ●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。 ●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。 动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。 ●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。 ●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。 二、假设有如下的串说明: char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p; (1)在执行如下的每个语句后p的值是什么? p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6'); (2)在执行下列语句后,s3的值是什么? strcpy(s3,s1); strcat(s3,","); strcat(s3,s2); (3)调用函数strcmp(s1,s2)的返回值是什么?

数据结构(清华大学出版社)第3章习题

第3章:栈和队列 1.熟练掌握栈的类型定义和操作特点; 填空题: 1、向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素。 2、栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。 3、向栈中压入元素的操作是先移动栈顶指针,后存入元素。 选择题: (B)1、栈中元素的进出原则是() A.先进先出 B.后进先出 C.栈空则进 D.栈满则出 (C)2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…, pn,若p1=n,则pi为() A.i B.n=i C.n-i+1 D.不确定 解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。 (若不要求顺序出栈,则输出序列不确定) (B)3、判定一个栈ST(最多元素为m0)为空的条件是() A.ST->top<>0 B.ST->top=0 C.ST->top<>m0 D.ST->top=m0 4、从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。 设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作。在进栈操作时,按a1、a2、a3、a4次序每次进入一个元素。假设栈初始状态都是空。现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A ,第二次出栈得到的元素是 B ;经操作后,最后在栈中的元素还有 C个。 供选择的答案: A~B:①a1 ②a2 ③ a3 ④a4 C:①1 ②2 ③ 3 ④ 0 答:ABC=2, 4, 2 5、从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。 栈是一种线性表,它的特点是 A 。设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。往栈中推入(PUSH)一个新元素时,变量T的值 B ;从栈中弹出(POP)一个元素时,变量T的值 C 。设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是 D ,变量T的值是 E 。 供选择的答案: A:①先进先出②后进先出③进优于出④出优于进⑤随机进出 B,C:①加1 ②减1 ③不变④清0 ⑤加2 ⑥减2 D:① a,b ②b,c ③c,a ④b,a ⑤ c,b ⑥ a,c E:① n+1 ②n+2 ③ n ④ n-1 ⑤ n-2 答案:ABCDE= 2, 2, 1, 6, 4

数据结构C语言版第四章 串

第四章串 重点难点 理解"串"类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作;掌握串类型的各种存储表示方法;理解串的两种匹配算法。 典型例题 1、简述下列每对术语的区别: 空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;【解】 (1)空串是指不包含任何字符的串,它的长度为零。 空白串是指包含一个或多个空格的串,空格也是字符。 (2)串常量是指在程序中只可引用但不可改变其值的串。 串变量是可以在运行中改变其值的。 (3)主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。 (4)静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。 动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。 2、以HString为存储表示,写一个求子串的算法。 【解】HString 是指以动态分配顺序串为存储表示,其定义为: typedef struct { char *ch; int length; }HString; void *substr( HString *sub,HString *s,int pos,int len) {//用sub返回串s的第pos个字符起长度为len的子串。sub初始时为一空串 //pos的合法位置为0<=pos<=s->length-1 int i; if (pos<0||pos>s->length-1||len<=0) Error("parameter error!");//参数不合法,子串为空串 if (s->lengthlen=s->length-pos;//设置子串的串长 else sub->length=len; //设置子串的串长 sub->ch=(char *)malloc(len*sizeof(char));//为sub->ch申请结点空间 for(i=0;ilength;i++)//将s串中pos位置开始的共sub->length个字符复制到sub串中

数据结构(第二版)习题答案第3章

3.1 选择题 第3章线性表的链式存储 (1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。 A.n B.m C.n? 1D.m + n (2)非空的循环单链表 head 的尾结点(由 p 所指向)满足( C )。 A.p->next==NULL B.p==NULL C.p->next==head D.p==head (3)在带头结点的单链表中查找x应选择的程序体是( C )。 A.node *p=head->next; while (p && p->info!=x) p=p->next; if (p->info==x) return p else return NULL; B.node *p=head; while (p&& p->info!=x) p=p->next; return p; C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p; D.node *p=head; while (p->info!=x) p=p->next ; return p; (4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。 A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以 (5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。 A.O(1) B.O(n)C.O(n2)D.O(n log2n )(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D )。 A.仅修改队头指针 C.队头、队尾指针都要修改B.仅修改队尾指针 D.队头,队尾指针都可能要修改 (7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。 A.O(n)B.O(n2)C.O(n3)D.O(n× log2n)(8)下面哪个术语与数据的存储结构无关(D)。 A.顺序表B.链表C.散列表D.队列 (9)在一个单链表中,若删除 p 所指结点的后续结点,则执行( A )。 A.p->next=p->next->next; B.p=p->next; p->next=p->next->next; C.p->next=p->next; D.p =p->next->next; (10)在一个单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,则执行( B )。 A.s->next=p;p->next=s; B.s->next=p->next;p->next=s; C.s->next=p->next;p=s; D.p->next=s;s->next=p; 3.2 设计一个算法,求一个单链表中的结点个数。 【答】:单链表存储结构定义如下(相关文件:linklist.h)

严蔚敏数据结构c语言版习题集答案第四章串

读书破万卷下笔如有神 《一定能摸到红球吗?》说课稿 林银花 教材说明:一、1、课题:《一定能摸到红球吗?》 2、本节内容的地位和作用 在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是 义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活. 3、教学目标设计: (1)认知目标: (A)经历猜测.实验.收集与分析试验结果等过程 (B)体会事件的发生的不确定性知道事情发生的可能性有多大。 (2)、能力目标: (A)经历游戏等的活动过程,初步认识确定事件和不确定事件 (B)在与其它人交流的过程中,能合理清晰地表达自己的思维过程; (3)、情感目标: (A)通过创设游戏情境,让学生主动参与,做“数学实验”,激发学生学习的热情和兴趣,激活学生思维。 (B)在与他人的合作过程中,增强互相帮助、团结协作的精神。 (C)体会到在生活中我们可以从确定和不确定两方面分析一件事情. 4、本课重点、难点分析: 学习的重点是初步体验事情发生的确定性和不确定性. 学习的难点是确定事件发生的可能性大小. 学习本节知识应注意猜测,试验,收集与分析实验结果,从中体会事件发生的可能性及大小. 二、教学对象分析: 1、初一学生性格开朗活泼,对新鲜事物特别敏感,且较易接受,因此,教学过程中创设的问题情境应较生动活泼,直观形象,且贴近学生的生活,从而引起学生的有意注意。 2、初一学生的概括能力较弱,推理能力还有待不断发展,所以在教学时,可让学生充分试验, 收集,分析,帮助他们直观形象地感知。

第三章 空间数据采集与处理练习

第三章空间数据采集与处理 着重看加粗题目 名词解释 1、数据压缩 2、空间数据的内插 3、空间数据处理 4、误差 5、空间数据 6、类型 7、对象 8、点 9、结点 10、线段11、线 12、弧 13、链 14、多边形 15、格网16、矢量17、栅格18、象元19、栅格对象20、数据精度 简答题 1、基于图像数据的矢量化方法从栅格数据向矢量数据转换的步骤有哪些? 2、从技术角度看,地理信息系统常用的数据采集方法包括哪些? 3、为什么在地理信息系统中使用元数据?元数据有哪些应用? 4、元数据的作用有哪些? 5、元数据的获取分为哪几个阶段?获取方法有哪些? 6、空间数据源的种类有哪些? 7、空间数据的一般性错误有哪些?主要有哪些检查方法? 8、空间数据质量标准要素及其内容如何? 第三章空间数据采集与处理 名词解释 1、所谓数据压缩,指从所取得的某个数据集合S中抽出一个子集A,这个子集作为一个新的信息源,在规定的精度范围内最好地逼近原集合,而又取得尽可能大的压缩比。 2、空间数据的内插可以作如下简单的描述:设已知一组空间数据,它们可以是离散点的形式,也可以是分区数据的形式,现在要从这些数据中找到一个函数关系式,使该关系式最好地逼近这些已知的空间数据,并能根据该函数关系式推求出区域范围内其他任意点或任意分区的值。这种通过已知点或分区的数据,推求任意点或分区数据的方法就称为空间数据的内插。

3、空间数据处理:对采集的各种数据,按照不同的方式方法对数据进行编辑运算,清除数据冗余,弥补数据缺失,形成符合用户要求的数据文件格式。 4、误差误差反映了数据与真实值或者大家公认的真值之间的差异,它是一种常用的数据准确性的表达方式。 5、空间数据:用于确定具有自然特征或者人工建筑特征的地理实体的地理位置、属性及其边界的信息。 6、类型:在元数据标准中,数据类型指该数据能接收的值的类型。 7、对象:对地理实体的部分或整体的数字表达。 8、点:用于位置确定的零维地理对象。 9、结点:拓扑连接两个或多个链或环的一维对象。 10、线段:两个点之间的直线段。 11、线:由相互连接的一系列线段组成的没有分支线段的序列,线可以自身或与其它线相切。 12、弧:由数学表达式确定的点集组成的弧状曲线。 13、链:两个结点之间的拓扑关联。 14、多边形:在二维平面中由封闭弧段包围的区域。 15、格网:组成一规则或近似规则的棋盘状镶嵌表面的格网集合,或者组成一规则或近似规则的棋盘状镶嵌表面的点集合。 16、矢量:有方向线的组合。 17、栅格:同一格网或数字影像的一个或多个叠加层。 18、象元:二维图形要素,它是数字影象最小要素。 19、栅格对象:一个或多个影象或格网,每一个影象或格网表示一个数据层,各层之间相应的格网单元或像元一致且相互套准。 20、数据精度:数据的准确度与精确度的总称。数据的准确度是指结果、计算值或估计值与真实值或者大家公认的真值的接近程度。数据的精密度指数据表示的精密程度,亦即数据表示的有效位数。

《数据结构》习题集:第3章 栈和队列

第3章栈和队列 一、选择题 1.栈结构通常采用的两种存储结构是( A )。 A、顺序存储结构和链表存储结构 B、散列和索引方式 C、链表存储结构和数组 D、线性链表结构和非线性存储结构 2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B ) A、ST.top-ST.base<>0 B、ST.top-ST.base==0 C、ST.top-ST.base<>n D、ST.top-ST.base==n 3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( B ) A、HS->next=s; B、s->next=HS->next;HS->next=s; C、s->next=HS;HS=s; D、s->next=HS;HS=HS->next; 4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行(B ) A 、x=HS;HS=HS->next; B 、HS=HS->next;x=HS->data; C 、x=HS->data;HS=HS->next; D 、s->next=Hs;Hs=HS->next; 5.表达式a*(b+c)-d 的后缀表达式为( B ) A、abcdd+- B、abc+*d- C、abc*+d- D、-+*abcd 6.中缀表达式A-(B+C/D)*E 的后缀形式是( D ) A、AB-C+D/E* B、ABC+D/E* C、ABCD/E*+- D、ABCD/+E*- 7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B ) A、4,3,2,1 B、1,2,3,4 C、1,4,3,2 D、3,2,4,1 8.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队 列为空的条件是( D ) A、Q.rear-Q.front==n B、Q.rear-Q.front-1==n C、Q.front==Q.rear D、Q.front==Q.rear+1 9.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队 列为满的条件是( C ) A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从队列中删除一个元素, 再加入两个元素后,rear 和front 的值分别为( A ) A、1,5 B、2, 4 C、4,2 D、5,1 11.用单链表表示的链式队列的队头在链表的( C )位置 A、链头 B、链尾 C、链中 12.判定一个链队列Q(最多元素为n 个)为空的条件是( A ) A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 13.在链队列Q 中,插入s 所指结点需顺序执行的指令是( B ) A 、Q.front->next=s;f=s; B 、Q.rear->next=s;Q.rear=s; C 、s->next=Q.rear;Q.rear=s; D 、s->next=Q.front;Q.front=s; 14.在一个链队列Q 中,删除一个结点需要执行的指令是( C )

第三章栈和队列习题_数据结构(推荐文档)

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

严蔚敏《数据结构(c语言版)习题集》答案第四章串

《一定能摸到红球吗?》说课稿 林银花 一、教材说明: 1、课题:《一定能摸到红球吗?》 2、本节内容的地位和作用 在现代社会中,人们面临着更多的机会和选择,常常需要在不确定情境中作出合理的决策,概率正是通过对不确定现象和事件发生的可能性的刻画,来为人们更好的制定决策提供依据和建议.本节内容又是义务教育阶段,唯一培养学生从不确定的角度来观察世界的数学内容,让学生了解可能性是普遍的,有助于他们理解社会,适应生活. 3、教学目标设计: (1)认知目标: (A)经历猜测.实验.收集与分析试验结果等过程 (B)体会事件的发生的不确定性知道事情发生的可能性有多大。 (2)、能力目标: (A)经历游戏等的活动过程,初步认识确定事件和不确定事件 (B)在与其它人交流的过程中,能合理清晰地表达自己的思维过程; (3)、情感目标: (A)通过创设游戏情境,让学生主动参与,做“数学实验”,激发学生学习的热情和兴趣,激活学生思维。 (B)在与他人的合作过程中,增强互相帮助、团结协作的精神。 (C)体会到在生活中我们可以从确定和不确定两方面分析一件事情. 4、本课重点、难点分析: 学习的重点是初步体验事情发生的确定性和不确定性. 学习的难点是确定事件发生的可能性大小. 学习本节知识应注意猜测,试验,收集与分析实验结果,从中体会事件发生的可能性及大小. 二、教学对象分析: 1、初一学生性格开朗活泼,对新鲜事物特别敏感,且较易接受,因此,教学过程中创设的问题情境应较生动活泼,直观形象,且贴近学生的生活,从而引起学生的有意注意。 2、初一学生的概括能力较弱,推理能力还有待不断发展,所以在教学时,可让学生充分试验,收集,分析,帮助他们直观形象地感知。 3、初一学生已经具备了一定的学习能力,所以本节课中,应多为学生创造自主学习、

数据结构第3章栈与队列习题

第3章栈与队列 一、单项选择题 1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。 A.A B.B C.C D.D 2.经过以下栈运算后,x的值是。 InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x); A.a B.b C.1 D.0 3.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。 A.push,pop,push,pop,push,pop B.push,push,push,pop,pop,pop C.push,push,pop,pop,push,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。 A.A,B,C,D B.D,C,B,A C.A,C,D,B D.D,A,B,C 5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。 A.edcba B.decba C.dceab D.abcde 6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。 A.i B.n-i C.j-i+1 D.不确定 7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若p1=n,则pi的值。 A.i B.n-i C.n-i+1 D.不确定 8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,p n,若p1=3,则p2的值。 A.一定是2 B.一定是1

C.不可能是1 D.以上都不对 9.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=1,则p1的值。 A.可能是2 B.一定是1 C.不可能是2 D.不可能是3 10.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=3,则p1的值。 A.可能是2 B.一定是2 C.不可能是1 D.一定是1 11.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p n=1,则p i(1≤i≤n-1)的值。 A.n-i+1 B.n-i C.i D.有多种可能 12.判定一个顺序栈S为空的条件为。 A.S.top= =S.base B.S.top!= S.base C.S.top!= S.base+S.stacksize D.S.top= = S.base+S.stacksize 13.判定一个顺序栈S为栈满的条件是。 A.S.top-S.base= =S.stacksize B.S.top= = S.base C.S.top-S.base!=S.stacksize D.S.top!= S.base 14.链栈与顺序栈相比有一个明显的优点,即。 A.插入操作方便B.通常不会出现栈满的情况 C.不会出现栈空的情况D.删除操作更加方便 15.最不适合用作链栈的链表是。 A.只有表头指针没有表尾指针的循环双链表 B.只有表尾指针没有表头指针的循环双链表 C.只有表尾指针没有表头指针的循环单链表 D.只有表头指针没有表尾指针的循环单链表 16.如果以链表作为栈的存储结构,则退链栈操作时。 A.必须判别链栈是否满B.判别链栈元素的类型 C.必须判别链栈是否空D.对链栈不作任何判别

数据结构练习第四章 串

数据结构练习第四章串 一、选择题 1.函数substr(“DATASTRUCTURE”,5,9)的返回值为()。 A. “STRUCTURE” B.“DATA” C. “ASTRUCTUR” D. “DATASTRUCTURE” 2.字符串的长度是指()。 A. 串中不同字符的个数 B. 串中不同字母的个数 C. 串中所含字符的个数 D. 串中不同数字的个数 3.两个字符串相等的充要条件是()。 A. 两个字符串的长度相等 B. 两个字符串中对应位置上的字符相等 C. 同时具备(A)和(B)两个条件 D. 以上答案都不对 4.关于串的叙述中,正确的是() A.空串是只含有零个字符的串 B.空串是只含有空格字符的串 C.空串是含有零个字符或含有空格字符的串 D.串是含有一个或多个字符的有穷序列 5.下面关于串的的叙述中,哪一个是不正确的?() A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 6.设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作( ) A.求子串 B.判断是否相等 C.模型匹配 D.连接 7.若串S=’software’,其子串的数目是( )。 A.8 B.37 C.36 D.9 8.串的长度是指() A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 9.串是一种特殊的线性表,其特殊性体现在( )。 A.数据元素是一个字符 B. 可以顺序存储 C. 数据元素可以是多个字符 D. 可以链接存储 10.下面关于串的的叙述中,哪一个是不正确的(B) A. 串是字符的有限序列 B. 空串是由空格构成的串 C. 模式匹配是串的一种重要运算 D. 串既可以采用顺序存储,也可以采用链式存储 11.若串=‘software’,其非平凡子串(非空且不同于串本身)的数目是(C)A. 8 B. 37 C. 35 D. 9 12.串是一种特殊的线性表,其特殊性体现在(B) A. 可以顺序存储 B. 数组元素是一个字符 C. 可以连续存储 D. 数据元素可以是多个字符 13. 下面关于串的的叙述中,哪一个是不正确的?(B)

相关文档
相关文档 最新文档