数据结构(C语言版)习题及答案第二章

上传人:大米 文档编号:494091998 上传时间:2022-12-31 格式:DOC 页数:10 大小:73.01KB
返回 下载 相关 举报
数据结构(C语言版)习题及答案第二章_第1页
第1页 / 共10页
数据结构(C语言版)习题及答案第二章_第2页
第2页 / 共10页
数据结构(C语言版)习题及答案第二章_第3页
第3页 / 共10页
数据结构(C语言版)习题及答案第二章_第4页
第4页 / 共10页
数据结构(C语言版)习题及答案第二章_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《数据结构(C语言版)习题及答案第二章》由会员分享,可在线阅读,更多相关《数据结构(C语言版)习题及答案第二章(10页珍藏版)》请在金锄头文库上搜索。

1、习 题2.1选择题1、线性表的顺序存储结构是一种( A )的存储结构,线性表的链式存储结构是一种( B )的存储结构。A、随机存取 B、顺序存取 C、索引存取 D、散列存取2、对于一个线性,既要求能够进行较快的插入和删除,又要求存储结构能够反映数据元素之间的逻辑关系,则应该选择( B )。A、顺序存储方式 B、链式存储方式C、散列存储方式 D、索引存储方式3、已知,L是一个不带头结点的单链表,p指向其中的一个结点,选择合适的语句实现在p结点的后面插入s结点的操作( B )。A、p-next=s ; s-next=p-next ; B、s-next=p-next ; p-next=s ;C、p-

2、next=s ; s-next=p ; D、s-next=p ; p-next=s ;4、单链表中各结点之间的地址( C D )。A、必须连续 B、部分地址必须连续C、不一定连续 D、连续与否都可以5、在一个长度为n的顺序表中向第i个元素(0inext= =L)。2.3读下面的程序段,画出执行过程的示意图及所完成的功能。1、 # define N 6void main ( ) ListSq L ; int A N ;int i , elem ;InitList(L); /初始化函数for ( int j=0; jN; j+)scanf(%d,&A j ) ; for ( int m=0; md

3、ata=x;s=malloc(sizeof(Lnode);s-data=y; L-next=s; s-next=NULL;return L;功能:创建一个两个结点的不带头结点的单链表,两个结点的值分别为X和Y,L为单链表的头指针。2.4 算法题1、 编写在两种存储方式下,删除线性表中多余的值相同元素的算法。解:顺序存储方式下:void del(ListSq &L) int i=0; while (iL.len-1) int j=i+1; while (jL.len)if (L.ei= =L.ej) for (int k=j+1;knext; while (p-next!=NULL) Lnode

4、 *q=p-next; Lnode *r=p;while (q!=NULL)if (q-data= =p-data) r-next=q-next; free(q); q=r-next; else r=q; q=q-next; p=p-next;2、已知,顺序表的元素类型为整型,编写将该顺序表分成两个顺序表的算法,一个存放所的奇数元素,另一个存放所的偶数元素。解:void fenSq(ListSq L, ListSq &La, ListSq &Lb ) int j=0,k=0; for (int i=0;inext; int n=0; while(p!=L) n+; p=p-next; retu

5、rn n;4、编写删除有序单链表中元素值大于min并且小于max的全部元素的算法。如果给定的表是无序的,如何改写上面的算法。解:void del4(Lnode *L,Elemtype min , Elemtype max ) Lnode *q,*s,*p ; p=L-next; q=L; while (p!=NULL&p-datenext; if (p!=NULL)/表示存在大于min的结点,最后一个小于等于min的结点为q结点 while (p!=NULL&p-datenext; if (p!=NULL)/ 表示存在大于等于max的结点,既p结点 while (q-next!=p) /删除q

6、的后继结点到p的前驱结点为止的所有结点 s=q-next; q-next=s-next; free(s); else s=q-next; q-next=NULL;/q以后的结点全部要删除 while (s!=NULL) p=s-next; free(s); s=p; 5、用顺序表来求集合的并集、交集和差集,也可以用链表来实现以上操作。(作为上机实践题目)# include typedef int Elemtype ; # define maxlen 100 # define N 30struct ListSqElemtype e maxlen ; int len ; ;/顺序表的创建算法voi

7、d Create_Sq( ListSq &L , Elemtype A , int n ) int i ;for ( i=0 ; in ; i+ )L.ei =Ai; L.len=n ; /顺序表的输出算法void PrintList( ListSq L ) printf(当前集合为:n);for ( int i=0; iL.len; i+)printf(%dt , L.e i ) ; printf ( n ) ;void bingji(ListSq L1,ListSq L2,ListSq &L3)for(int k=0;kL1.len;k+)L3.ek=L1.ek;L3.len=L1.len

8、;for (int i=0;iL2.len;i+)int j=0;while(j=L1.len)L3.eL3.len=L2.ei; L3.len+;void jiaoji(ListSq L1,ListSq L2,ListSq &L3)int k=0;for(int i=0;iL1.len;i+)int j=0;while(jL2.len)&(L1.ei!=L2.ej) j+;if(jL2.len) L3.ek+=L1.ei;L3.len=k;void chaji(ListSq L1,ListSq L2,ListSq &L3)int k=0;for(int i=0;iL1.len;i+)int

9、j=0;while(j=L2.len) L3.ek+=L1.ei;for(int m=0;mL2.len;m+)int n=0;while(n=L1.len) L3.ek+=L2.em;L3.len=k;/主函数void main ( ) ListSq L1,L2,L3 ; L3.len=0;int A N ;int m,n,c;printf(请输入线性表L1的元素个数:n);scanf(%d,&m);printf(请输入线性表L1的元素:n);for ( int j=0; jm; j+)scanf(%d,&A j ) ; Create_Sq( L1 , A , m );PrintList( L1 ) ;printf(请输入线性表L2的元素个数:n);scanf(%d,&n);printf(请输入线性表L2的元素:n);for ( int w=0; wn; w+)scanf(%d,&A w ) ; Create_Sq( L2 , A , n );PrintList( L2 ) ;while(1)printf(请按提示进行输入:n);printf(实现两个集合的并集,请输入1:n); printf(实现两个集合的交集,请输入2:n);printf(实现两个集合的差集,请输入3:n);printf(退出,请输入4:n);scanf(%d,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号