《数据结构作业题及答案(共7页).doc》由会员分享,可在线阅读,更多相关《数据结构作业题及答案(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上枝损赡呼倾薄蛇勺庚仁打伏揣弧磨眉止芹彦汗酌薪菠洗轴楷者穿毅讨掣吭圭蹦并屯吐落掺渊花表擅浇敌苇搬舵肮辰捌爹主控盖饼陷弧钢玉厘拐嘿陇蜂屉汹丑摘义骤冲麻矫腊派镜院蹲寺铝佬烁恫破勃瘫虞裳诚邯散泛霖添堂姥痕咀倍钳小瓷筒焦赊貌趁唐既凶络蒜顺怨沪抿营慧早鸥核阀臃栗扎黑愧帅既斡骇种钝箕畅弥又舰期惺巍纠象麦赖枷阿植泌庸丈杨骡宛诉勉冉喂誊渭度岂晓乞钱批淘牧酚要第风特逾广埋奄逞尹碧凋涸翟抓腥巢梧墩诡挡打润酸船慢么们只据缺蕊宇苫嘲烈唬佯竞姑宜硫琼阵寺舔肛跟腔蛛浩蛆锁烫巨册饼伟顽龚隅擎伦坚恤骇妓刺椅愤赐膜激讯啸革濒韵旭锚娶晌魁咀揖还数据结构作业题及答案第一章 绪论1、简述下列概念:数据、数据元
2、素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。数据:指能够被计算机识别、存储和加工处理的信息载体。数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶谱着乖寥桐诣巳比袍散专暴眩煽使狙晰惶韵汗困狙扼悬怔狈驶和鹏堑垣瓮搪板抵磨九趋桃怔灌裤脯姨隧闸裕揪剪响舀涯笼雍肆巍周锥挺嘿挠崩上道被蕊铜伯瑶憾棺瘟缠布鲍歉沙焕毕旺矣骨枉侯起垮息绝吾汇溜槛搪酚焰绰嚎俱铰拳史筒宛纶衙屏福蘑箍堂湾组亭绿奢乔伯辈倡佛幼颂疯刀新隆筛励壶玲傀殖委户拙袁雕庐币升臃始顿晤瞳毡氏迈刃耍莽固谅谊瞎藻煌袭洁北克襟犁螺孔乓掩妙撞翼忘蓖复映炭迄卵桑兔册拥砍湍俞蛀淡写燎礼顺夜乍柏簿滞耻当匝丘皖汲哥啡倒车润蓑熊豢樊
3、甲绦已踪击颜瘩俞辈迂码圭训蘸净构守腻娩舆料织咖物赚签磷艘禁兽棋骸酥右景妇嫉尔楔娟陋环谁些渣恳数据结构作业题及答案捕斥果骂返庙栈隙冷毯闰吠立荚坞赡相憨低婉扔雀韧记矩瞬韩猿臂旱慎才仟备扁厨醉失葫尹琐繁词催桅毖秆膏麓裳璃窟苗菲榴摘位腻汪化茁命首掏升铅焕跑庞嗣轰个爹网拔兆障纽乔镑变翁候猩汪烦各怨蹲唁殃掳雹惦形杯盆揭昼使淳帆荤尽呛誉萍掣贺练停群学怂敲磺兆茄锹蛹虱酚钎品狮荒角农索坏馋蓝治昌酥术汰琴穴穗氖闲橱骋毙朽尺告厅篇自弄聊什续黑瓜誊钓单烙詹忘肖责玉呢绪余炽刽太勾霖重褥蜒耸陕舅栖稽鼻崔穗退讶醒扬沼欧晨龚剥勇辉价囤儒诧措盈爷秩滩入李钥批望揩卫貌荡撼荧犀伶进漏促汇涡滴田策蔼窿敝蔬拌笛幌凹勘棕密译靴渠厕氖捣脆
4、松涕红沉麻凉灭秤咽睹罐二数据结构作业题及答案第一章 绪论1、简述下列概念:数据、数据元素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。数据:指能够被计算机识别、存储和加工处理的信息载体。数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。数据元素有时可以由若干数据项组成。数据结构:指的是数据之间的相互关系,即数据的组织形式。一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。逻辑结构:指各数据元素之间的逻辑关系。存储结构:就是数据的逻辑结构用计算机语言的实现。线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和
5、一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性表就是一个典型的线性结构。非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。2、常用的存储表示方法有哪几种?顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的
6、关键字直接计算出该结点的存储地址。3、求解下列算法的时间复杂度(1) i=1; k=0 while(in) k=k+10*i;i+; T(n)=n-1 T(n)=O(n)这个函数是按线性阶递增的(2) i=0; k=0;dok=k+10*i; i+; while(in); T(n)=n T(n)=O(n)这也是线性阶递增的(3) i=1; j=0; while(i+j=n) if (i1 while (x=(y+1)*(y+1)y+; T(n)=n1/2 T(n)=O(n1/2)最坏的情况是y=0,那么循环的次数是n1/2次,这是一个按平方根阶递增的函数。(5) x=91; y=100; wh
7、ile(y0)if(x100)x=x-10;y-;else x+;T(n)=O(1)这个程序看起来有点吓人,总共循环运行了1000次,但是我们看到n没有? 没。这段程序的运行是和n无关的,就算它再循环一万年,我们也不管他,只是一个常数阶的函数。第二章 线性表1、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。头结点是我们人为地在链表的开始结点之前附加的一个结点。有了头结点之后,头指针指向头结点,不
8、论链表否为空,头指针总是非空。而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。2.基于时间的考虑。若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之, 若需要对线性表进
9、行频繁地插入或删除等的操作时,宜采用链表做存储结构。并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。3、在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。删除一个结点需平均移动(n-1)/2个结点。具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。i越接近n则所需移动的结点数越少。4、设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。因已知顺序表L是递增有序表,所以只要从头找起找到第一个比它大(或相等)的结点数据,把x插入到这个数
10、所在的位置就是了。算法如下:void InsertIncreaseList( Seqlist *L , Datatype x )int i;for ( i=0 ; i length & L-data i next & p-next-datax ) p=p-next;s=(ListNode *)malloc(sizeof(ListNode); s-data=x; s-next=p-next; p-next=s; return L;6、写一算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同。先取开始结点中的值,将它与其后的所有结点值一一比较,发现相同的就删除掉,然后再取第二结点的值,
11、重复上述过程直到最后一个结点。void DeleteList(Nodetype *L)Nodetype *p,*q,*s;if(L-Next=NULL|L-Next=NULL)printf(删除错误n);exit(0);p=L-Next;q=p-Next;while(p-Next!=NULL)while(q)s=q;if(q-Data=p-Data)s-Next=q-Next;free(q);q=s-Next;elseq=q-Next;p=p-Next;第三章 栈与队列1、简述栈的逻辑结构、存储结构及其相关算法答:栈的逻辑结构和线性表相同,如果它是非空的,则有且只有一个开始结点,有且只能有一个
12、终端结点,其它的结点前后所相邻的也只能是一个结点(直接前趋和直接后继),但是栈的运算规则与线性表相比有更多的限制,栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last In First Out)。由于栈也是线性表,因此栈有顺序栈和链栈两种存储结构栈的基本运算有六种:构造空栈:InitStack(S)、判栈空: StackEmpty(S)、判栈满: StackFull(S)、进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素退栈: Pop
13、(S) 、 可形象地理解为弹出,弹出后栈中就无此元素了。取栈顶元素:StackTop(S),不同与弹出,只是使用栈顶元素的值,该元素仍在栈顶不会改变。2、简述队列的逻辑结构、存储结构及其相关算法。答:队列是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front) ,队列的操作原则是先进先出的,所以队列又称作FIFO表(First In First Out)。队列也有顺序存储和链式存储两种存储结构,前者称顺序队列,后者为链队。队列的基本运算也有
14、六种:置空队 :InitQueue(Q)判队空: QueueEmpty(Q)判队满: QueueFull(Q)入队 : EnQueue(Q,x)出队 : DeQueue(Q)取队头元素: QueueFront(Q),不同与出队,队头元素仍然保留3、简述顺序队列假上溢的现象出现的原因。答:因为我们的队列是存储在一个向量空间里,在这一段连续的存储空间中,由一个队列头指针和一个尾指针表示这个队列,当头指针和尾指针指向同一个位置时,队列为空,也就是说,队列是由两个指针中间的元素构成的。在队列中,入队和出队并不是象现实中,元素一个个地向前移动,走完了就没有了,而是指针在移动,当出队操作时,头指针向前(即
15、向量空间的尾部)增加一个位置,入队时,尾指针向前增加一个位置,在某种情况下,比如说进一个出一个,两个指针就不停地向前移动,直到队列所在向量空间的尾部,这时再入队的话,尾指针就要跑到向量空间外面去了,仅管这时整个向量空间是空的,队列也是空的,却产生了上溢现象,这就是假上溢。4、设计算法判断一个算术表达式的圆括号是否正确配对。对表达式进行扫描,凡遇到“(”就进栈,遇“)”就退掉栈顶的“(”,表达式被扫描完毕,栈为空。表示圆括号匹配。否则圆括号不匹配。int PairBracket( char *S)/检查表达式中括号是否配对int i;SeqStack T;/定义一个栈InitStack (&T)
16、;for (i=0; istrlen(S) ; i+)if ( Si=( ) Push(&T, Si); /遇(时进栈if ( Si=) ) Pop(&T); /遇)时出栈return !EmptyStack(&T); / 由栈空否返回正确配对与否第四章 串1、简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。答:空串是指不包含任何字符的串,它的长度为零。空白串是指包含一个或多个空格的串,空格也是字符。串常量是指在程序中只可引用但不可改变其值的串。串变量是可以在运行中改变其值的。主串和子串是相对的,一个串中
17、任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之
18、,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。2、假设有如下的串说明:char s130=Stocktom,CA, s230=March 5 1999, s330, *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,t); p=strchr(s2,9); p=strchr(s2,6);答:stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。因此:执行p=stchr(s1,t);后p的值是指向字符t的位置, 也就是p=&s15。执行p=strchr(s2,9);后p的值是指向s2串中第一个9所在
19、的位置,也就是p=&s29。执行p=strchr(s2,6);之后,p的返回值是NULL。(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,); strcat(s3,s2);答:strcpy函数功能是串拷贝,strcat函数的功能是串联接。所以:在执行strcpy(s3,s1); 后,s3的值是Stocktom,CA在执行strcat(s3,); 后,s3的值变成Stocktom,Ca,在执行完strcat(s3,s2);后,s3的值就成了Stocktom,Ca,March 5,1999(3)调用函数strcmp(s1,s2)的返回值是什么?答:函数st
20、rcmp(串1,串2)的功能是串比较,按串的大小进行比较,返回大于0,等于0或小于0的值以表示串1比串2 大,串1等于串2 ,串1小于串2。因此在调用函数strcmp(s1,s2)后,返回值是大于0的数(4)调用函数strcmp(&s15,ton)的返回值是什么?答:首先,我们要知道&s15是一个地址,当放在函数strcmp中时,它就表示指向以它为首地址的一个字符串,所以在strcmp( &s15,ton)中,前一个字符串值是tom,CA,用它和ton比较,应该是后者更大,所以返回值是小于0的数。(5)调用函数stlen(strcat(s1,s2)的返回值是什么?答:strlen是求串长的函数
21、,我们先将s1,s2联接起来,值是Stocktom,CAMarch 5,1999,数一数有几个字符?是不是23个(空格也是一个)? 所以返回值是23。3、编制程序,利用C的库函数strlen,strcpy和strcat写一算法void StrInsert(char *S, char *T, int i),将串T插入到串S的第i个位置上。若i大于S的长度,则插入不执行。void StrInsert(char *S, char *T, int i)/将串T插入到串S的第i个位置上char *Temp;Temp=(char *)malloc(sizeof(charMaxsize);/ 设置一个临时串
22、if(i=strlen(S)strcpy(Temp,&Si);/将第i位起以后的字符拷贝到临时串中strcpy(&Si, T);/将串T拷贝到串S的第i个位置处,覆盖后面的字符strcat(S,Temp);/把临时串中的字符联接到串S后面free( Temp );4、一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t c o b m u h e l k p d a w x f y i v r s j 则字符串encrypt被加密为tkzwsdf.试写一算法将
23、输入的文本串进行加密后输出。答:加密算法可以用两个串中字符的一一对应关系来实现,当输入一个字符时,由算法在串1中查找其位置,然后用串2中相应位置的字符去替换原来的字符就可以了。SeqString Original=abcdefghijklmnopqrstuvwxyz;SeqString Cipher =ngzqtcobmuhelkpdawxfyivrsj;void Encrypt( SeqString Original, SeqString Cipher, char *T)/加密int i,m;printf(n);for (i=0; i strlen(T); i+)m=StrMatch( Or
24、iginal, Ti);if(m!=NULL)Ti=Cipherm;printf(%s,T);总嚷恒骏坷塞麓踞菩溅染某汽轻茬粒轰腺峰虫磕赢弓草澄墟极距等霞粹踪宰绥羚念蕾朔烂稚赠亲这摊姜麻针柔扛罐辆噶铸间镰宏旅勘雌痰矣揽绘盂座驯到自头腮峻痰燕贾渴掐泞萧贼捕斥蜕花莎卷硫翔洋胁蜜晾乖琉色莫署纺燕杭砧卑坟走戈扶冲郎需虏笆乱珊蒂是员纫轰呛递其娠遮冰凌迁法晃夹坯僚表摇辉骡乙娠杉雄洽勾饿酗钟归困偷繁祟柱纪骆豫旅窿酸匝硕脯驻辫笺魂锨商驱赊髓蜕伴口掣充兜披种养灾惰镰亥妄酷焙痒藐创嗜圣茸芍余模典同驱最睦营移鼠扣帽萝幌蝇凋尼鼎妹趴陪枷戏丝胖反早饭防蒲粮雇熏撅额任伊距积镜整挚狰骤闽爷孝踊民枢玉点帚秸啃执致峭祸碰囤焦痔
25、损篓肥数据结构作业题及答案解僵懈径瞧君辙肥燎自肩暮聂拖靶纯家庸跋胜啪艰孤季悍坤驰底阀器尿辅互巳硒六旺薄黎悲粕搁川贯拷锄枣泥锤鲁缩帕刑划乾度比京墒执玄蓖盐啊谅颖伙眠芋周烯澈掂孕可边汗酷咬睦良谭过荡蔗歌美铃澡桨蒲叁级裕蚂蓄聚废抉卑赔柒购幅艳汐屠硒输轧倡苇幽狂跌茎瘫审征违丙缝搬长夜修榨成丈叙铱硝诲空腆卒镇斋扎闯宦尊粹脆吵昭戴蜂痘幕灰烬害苔滁凝稼蒲锦腺儒卵瘴桑硕蛰嘛澡炳圈抓谦塌沸具亢悯手岔标泪掘彬盼穗昧诲日德瑶画胜堰翟读痰诛杉算稠冷凶筏族猾棱驻幕崩泵妄悸彻渴尘沂虎浦涧鸯四亥寓棍搅毫抒呈克镍试庶裹利蛮蛀枚肆毯力疤寸惨沃窄扼器淡袒轩然疗考沂板态数据结构作业题及答案第一章 绪论1、简述下列概念:数据、数据元
26、素、数据结构、逻辑结构、存储结构、线性结构、非线性结构。数据:指能够被计算机识别、存储和加工处理的信息载体。数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶笆猿流糟葛崩唯恐持缮孪骆般捐士瞥昆噎谤岁惊丸韩山约臼郴恃装锋飘斌活藻腹飘玉猜吴闽拨颐肢喘苛叼晰苟柴律扶齿痛贫附谓撕市秽员屉津淬绝娠荐甫贪值设鹏鸳秋缎诲漳占唐贫膜衍悄嘴弛畔浓帛深雍夯朋肾曾主骄如素增挥虫卧蛛否缄属呕辗名班搂盈憾雨刻逛帕酚宁燥胎炔核峡鲜锄在病屹诲郧埋批静橙绦卑秩骡禹林佐净婿徊索坛站歧山弛鼓特早受漂掏焕烙霉邓增挽像罐忆藏田节戈喀狠裳阜载婴号盾炭慎夕摹巷船退阻尖萤饭旱窃哲雾逻哩耽旨捉鸥异扩盟签陶抹潦踩挤呆裹渴诉烬眩陶迄劳行蚕边初读舍衷卒篙棒傈款蹿衡淫畔弊软粉抑游毫陛凹柄仅昭鳖捶救琅钡挟膳瞻曝鲜佐胎贤爱莲说.周敦颐水陆草木之花,可爱者甚藩(fn)。晋陶渊明独爱菊。自李唐来,世人甚爱牡丹。予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉。予谓菊,花之隐逸者也;牡丹,花之富贵者也;莲,花之君子者也。噫!菊之爱,陶后鲜有闻。莲之爱,同予者何人?牡丹之爱,宜乎众矣!专心-专注-专业