1、在具有n个单元的循环队列中,队满时共有n-1个元素。
2、设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有
① front=11,rear=19;问在这种情况下,循环队列中各有元素8个?
② front=19,rear=11;问在这两种情况下,循环队列中各有元素32个?
3、写出下列程序段的输出结果(队列中的元素类型QElem Type为char)。
void main( ){
Queue Q; Init Queue (Q);
Char x=’e’; y=’c’;
EnQueue (Q,’h’); EnQueue (Q,’r’); EnQueue (Q, y);
DeQueue (Q,x); EnQueue (Q,x);
DeQueue (Q,x); EnQueue (Q,’a’);
while(!QueueEmpty(Q)){ DeQueue (Q,y);printf(y); };
Printf(x);
}
char
4、简述以下算法的功能(栈和队列的元素类型均为int)。
void algo3(Queue &Q){
Stack S; int d;
InitStack(S);
while(!QueueEmpty(Q)){
DeQueue (Q,d); Push(S,d);
};
while(!StackEmpty(S)){
Pop(S,d); EnQueue (Q,d);
}
}
该算法的功能是:利用栈做辅助,将队列中的数据元素进行逆序。
5、队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾,允许插入的一端称为队头。
6、队列的操作原则是先进先出的,所以队列又称作FIFO/先进先出表。
7、队列也有两种存储结构,分别称为顺序队列和链队列。
8、顺序队列会出现"假上溢"的现象。
9、在一个循环队列中,队首指针指向队首元素的前一个位置。
10、从循环队列中删除一个元素时,其操作是先移动队首指针,后取出元素 。
1、栈(Stack)的逻辑结构和线性表相同,如果它是非空的,则有且只有一个开始结点,有且只能有一个终端结点,其它的结点前后所相邻的也只能是一个结点(直接前趋和直接后继),但是栈的运算规则与线性表相比有更多的限制,栈是仅限制在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。
2、栈的修改是按后进先出的原则进行的,我们又称栈为LIFO/后进先出表.
3、通常栈有顺序栈和链栈两种存储结构,这两种存储结构的不同,使得实现栈的基本运算的算法也有所不同。
4、由于栈都是在头部进行操作的,因此链栈不需要在头部附加头结点。
5、向栈中压入元素的操作是先移动栈顶指针,后存入元素。
6、写出下列程序段的输出结果(栈的元素类型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
7、算法填空
// 定义栈类型
define StackSize 100
typedef char Datatype;
typedef struct{
Datatype data[StackSize];
int Top;
} SeqStack;
void Push (SeqStack *S , Datatype x)
{ //进栈
if(FullStack(S))
Error("Stack overflow");
S->data[++S->Top]=x;
}
Datatype Pop(SeqStack *S)
{ // 出栈(退栈)
if (EmptyStack( S) )
Error( “Stack underflow”);
return S->data[S->Top--];
}
8、算法填空
// 定义栈类型
define StackSize 100
typedef char Datatype;
typedef struct{
Datatype data[StackSize];
int Top;
} SeqStack;
Datatype Pop(SeqStack *S)
{ // 出栈(退栈)
if (EmptyStack( S) )
Error( "Stack underflow");
return S->data[S->Top--];
}
1、串就是字符串,是一种特殊的线性表,它的每个结点仅由一个字符组成。
2、空串是指长度为零的串,也就是串中不包含任何字符(结点)。
空白串指串中包含一个或多个空格字符的串。不同与空串,它的结点就是一个空格字符。
3、在一个串中任意个连续字符组成的子序列称为该串的子串,包含子串的串就称为主串。
4、子串在主串中的序号就是指子串在主串中首次出现的位置。
如A="I love you" ,B="love",则B在A中的序号为3。
5、空串是任意串的子串,任意串是他自身的子串。
6、串分为两种:串常量和串变量。串常量在程序中不能改变,串变量则可以。
7、串的顺序存储结构简称为顺序串,它又可按存储分配的不同分为静态存储分配的顺序串和动态存储分配的顺序串。
串的链式存储就是用单链表的方式存储串值,串的这种链式存储结构简称为链串。
8、子串定位运算又称串的模式匹配,就是在主串中查找出子串出现的位置。
9、在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。
10、设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
11、设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第6次匹配成功。
12、若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
13、设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:BCDEFEF
14、设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’,则
Replace(s,’STUDENT’,q)=‘I AM A WORKER’
Concat(SubString(s,6,2), Concat(t,SubString(s,7,8)))=‘A GOOD STUDENT’
1、判定一个队列QU(最多元素为m0)为满队列的条件是A
A、QU->rear - QU->front = = m0
B、QU->rear - QU->front -1= = m0
C、QU->front = = QU->rear
D、QU->front = = QU->rear+1
2、数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为D
A、r-f
B、(n+f-r)% n
C、n+r-f
D、(n+r-f)% n
1、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为C
A、i
B、n=i
C、n-i+1
D、不确定
2、判定一个栈ST(最多元素为m0)为空的条件是B
A、ST->top<>0
B、ST->top=0
C、ST->top<>m0
D、ST->top=m0
1、在表结构中最常用的是线性表,栈和队列不太常用。
答案:错误
2、对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
答案:正确
3、栈和队列是一种非线性数据结构。
答案:错误
4、栈和队列的存储方式既可是顺序方式,也可是链接方式。
答案:正确
5、队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
答案:错误
1、栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
答案:正确
2、栈和链表是两种不同的数据结构。
答案:错误
3、两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
答案:正确
4、一个栈的输入序列是12345,则栈的输出序列不可能是12345。
答案:错误