1、 i=1;While(in-1) do k=k+10*i; k=k+10*i; i+; i+; while(inext =rear-next; rear-next =s; rear =s;;删除开始结点的操作顺序为q=rear-next-next=q- delete q; 。1.数据在计算机存储器内表示时物理地址与逻辑地址相同并且是连续的,称之为: C A存储结构 B逻辑结构 C顺序存储结构 D链式存储结构2. 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是: A A 访问第i个结点(1in)和求第i个结点的直接前驱(2in) B 在第i个结点后插入一个新结点(1in)C 删除第i个
2、结点(1in) D 将n个结点从小到大排序3. 线性表L在 B 情况下适用于使用链式结构实现。A 需经常修改L中的结点值 B 需不断对L进行删除插入C L中含有大量的结点 D L中结点结构复杂4. 单链表的存储密度 C A大于1 B等于1 C小于1 D不能确定三. 判断题1. 线性表的逻辑顺序和存储顺序总是一致的。 F 2. 线性表的顺序存储结构优于链接存储结构。3. 设p,q是指针,若p=q,则*p=*q。4. 线性结构的基本特征是:每个元素有且仅有一个直接前驱和一个直接后继。四. 简答题1. 分析下列情况下,采用何种存储结构更好些。(1)若线性表的总长度基本稳定,且很少进行插入和删除操作,
3、但要求以最快的速度存取线性表中的元素。(2)如果n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化。(3)描述一个城市的设计和规划。 应选用顺序存储结构。很少进行插入和删除操作,所以空间变化不大,且需要快速存取,所以应选用顺序存储结构。 应选用链式存储结构。链表容易实现表容量的扩充,适合表的长度动态发生变化。 应选用链式存储结构。因为一个城市的设计和规划涉及活动很多,需要经常修改、扩充和删除各种信息,才能适应不断发展的需要。而顺序表的插入、删除的效率低,故不合适。五. 算法设计1. 已知数组An中的元素为整型,设计算法将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,并要
4、求算法的时间复杂度为O(n)。2. 线性表存放在整型数组Aarrsize的前elenum 个单元中,且递增有序。编写算法,将元素x插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。int insert (datatype A,int *elenum,datatype x)/*设elenum为表的最大下标*/if (*elenum=arrsize-1) return 0;/*表已满,无法插入*/else i=*elenum; while (i=0 & Aix)/*边找位置边移动*/Ai+1=Ai;i-; Ai+1=x;/*找到的位置是插入位的下一位*/ (*elenum)
5、+;return 1;/*插入成功*/O(n)第三章 栈和队列1. 设有一个空栈,栈顶指针为1000H,现有输入序列为1. 2. 3. 4. 5, 经过push,push,pop,push,pop,push,push后,输出序列是 23 ,栈顶指针为 1003H 。2. 栈通常采用的两种存储结构是 顺序栈 、 链栈 ;其判定栈空的条件分别是 TOP=-1 、 TOP=NULL ,判定栈满的条件分别是 TOP=数组长度 、 存储空间满 。3. 栈 可作为实现递归函数调用的一种数据结构。4. 表达式a*(b+c)-d的后缀表达式是 abc+*d- 。1. 若一个栈的输入序列是1,2,3,n,输出序
6、列的第一个元素是n,则第i个输出元素是 D 。A 不确定 B n-i C n-i-1 D n-i+12. 设栈S和队列Q的初始状态为空,元素e1. e2. e3. e4. e5. e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2. e4. e3. e6. e5. e1,则栈S的容量至少应该是 C 。A 6 B 4 C 3 D 23. 一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是 C 。A 54321 B 45321 C 43512 D 12345 三. 判断题 1. 有n个元素依次进栈,则出栈序列有(n-1)/2种。2. 栈可以作为实现过程调用的一种数
7、据结构。 T 3. 在栈满的情况下不能做进栈操作,否则将产生“上溢”。4. 在循环队列中,front指向队头元素的前一个位置,rear指向队尾元素的位置,则队满的条件是 front=rear。1. 设有一个栈,元素进栈的次序为A,B,C,D,E,能否得到如下出栈序列,若能,请写出操作序列,若不能,请说明原因。 C,E,A,B,D C,B,A,D,E不能,因为在C、E出栈后,A一定在栈中,而且在B的下面,不可能先于B出栈可以,设为进栈操作,为入栈操作,则其操作序列为IIIOOOIOIO。2. 在操作序列push(1). push(2). pop. push(5). push(7). pop. p
8、ush(6)之后,栈顶元素和栈底元素分别是什么?(push(k)表示k入栈,pop表示栈顶元素出栈。)栈顶元素为6,栈底元素为1。3. 在操作序列EnQueue(1). EnQueue(3). DeQueue. EnQueue(5). EnQueue(7). DeQueue. EnQueue(9)之后,队头元素和队尾元素分别是什么?(EnQueue(k)表示整数k入队,DeQueue表示队头元素出队)。队头元素为5,队尾元素为9。4. 简述以下算法的功能(栈的元素类型SElemType为int)。 (1) status algo1(Stack S,int e) Stack T; int d;
9、InitStack(T); while(!StackEmpty(S) Pop(S,d); if(d!=e) Push(T,d); StackEmpty(T) Pop(T,d); Push(S,d); /S中如果存在e,则删除它。(2) void algo2(Queue &Q) Stack S; InitStack(S);QueueEmpty(Q) DeQueue(Q, d); Push(S, d);StackEmpty(S) Pop(S, d); EnQueue(Q, d); /队列逆置1. 试写一个判别表达式中开、闭括号是否配对出现的算法BOOL BracketCorrespondency(
10、char a) int i=0; Stack s; InitStack(s); ElemType x; while(ai) switch(ai) case (: Push(s,ai); break;) GetTop(s,x); if(x=) Pop(s,x); else return FALSE; default: if(s.size!=0) return FALSE; return TRUE;2. 假设称正读和反读都相同的字符序列为“回文”,例如,abba和abcba是回文,abcde和ababab则不是回文。试写一个算法判别读入的一个以为结束符的字符序列是否是“回文”。Status Sym
11、metryString(char* p) Queue q; if(!InitQueue(q) return 0; ElemType e1,e2; while(*p) Push(s,*p); EnQueue(q,*p); p+; while(!StackEmpty(s) Pop(s,e1); DeQueue(q,e2); if(e1!=e2) return FALSE; return OK;第四章 串1. 不包含任何字符(长度为0)的串 称为空串;由一个或多个空格(仅由空格符)组成的串 称为空白串。2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”
12、的字符定位的位置为 3 。3. 若n为主串长,m为子串长,则串的经典模式匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m 。1. 串是一种特殊的线性表,其特殊性体现在: ( B )A可以顺序存储 B数据元素是一个字符 C可以链式存储 D数据元素可以是多个字符2. 设有两个串p和q,求q在p中首次出现的位置的运算称作:( B ) A连接 B模式匹配 C求子串 D求串长3. 设串s1=ABCDEFG,s2=PQRST,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1,
13、2, len(s2), subs(s1, len(s2), 2)的结果串是:( D ) A BCDEF B BCDEFG C BCPQRST D BCDEFEF4. 若串S=”software”,其子串的数目是( B )。A 8 B 37 C 36 D 9三. 计算题1. 设s=I AM A STUDENT, t=GOOD, q=WORKER, 求:1)Replace(s,STUDENT,q) 2)Concat(t,SubString(s,7,8)1、 Replace(s,STUDENT,q)I AM A WORKER2、因为SubString(s,7,8) STUDENTConcat(t,S
14、ubString(s,7,8)GOOD STUDENT四. 算法设计1. 利用C的库函数strlen, strcpy(或strncpy)写一个算法void StrDelete(char *S,int t,int m) ,删除串S中从位置i开始的连续的m个字符。若istrlen(S),则没有字符被删除;若i+mstrlen(S),则将S中从位置i开始直至末尾的字符均被删去。提示:strlen是求串长(length)函数:int strlen(char s); /求串的长度strcpy是串复制(copy)函数:char *strcpy(char to,char from); /该函数将串from复
15、制到串to中,并且返回一个指向串to的开始处的指针。void StrDelete(char *S, int i ,int m) /串删除char TempMaxsize;/定义一个临时串if(i+m=strlen(S)& istrlen(S)strcpy(&Si,0);/把位置i的元素置为0,表示串结束第五章 数组和广义表一. 填空1. 假设有二维数组A68,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 ;末尾元素A57的第一个字节地址为 1282 ;若按行存储时,元素A14的第一个字节地址为 1072;若按列存储
16、时,元素A47的第一个字节地址为 1276 。2. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标 、 列下标 和 元素值 。3. 广义表(a), (b),c),(d)的长度是 3 ,深度是 4 ,表头是 (a) ,表尾是(b),c),(d) 。4. 已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是Head(Head(Tail(LS) 。1. 假设有60行70列的二维数组a160, 170以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a32,58的存储地址为 ( A )。(无第0行第0列元素)A 16902 B 16904 C 14454 D 答案A, B, C均不对2. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B 1, n(n-1)/2 中,下三角部分中任一元素ai,j(ij), 在一维数组B中下标k的值是:A i(i-1)/2+j-1 B i(i-1)/2+j C i(i+1)/2+j-1 Di(i+1)/2+j3. 一个n*n的对称矩阵,用压缩存储方法处理其对称性质后存储,则其容量为:( C )。A n*n B n*n/2 C (n+1)*n/2 D (n+1)*(n+1)/2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1