《计算机软件技术基础》课后题答案 - 图文(5)
r=q; //r总是指向B链表的最后—·个结点 p=p—>next; //p指向原链表A中的奇数序号的结点 }
r—>next=NULL; //将生成B链表中的最后一个结点的next域置为空 }
9.假设以两个元素值递增有序排列的线性表A、B分别表示两个集合,要求另辟空间构造一个线性表C,其元素为两集合的交集,且表C中的元素值也递增有序排列。用顺序表实现并写出C的算法。
答:分析:用三个变量i、j、k分别指示A、B、C三个顺序表的当前位置,若A、B表中当前元素值相同,则写入C中,并使i、j、k值增1;若A表元素值较小,则使i增1;若B表元素值较小,则使j增1,直到有一个表先结束。 SeqLiSt *intersection(SeqList A,SeqList B,SeqList *C) {//求元素依值递增有序排列的顺序表A、B的交集C i=0; j=0;k=0;
while((i<=A.length-1)&&(j<=B.length-1))
{if(A.data[i]==B.data[j]) //找到值相同的元素 {C->data[k]=A.data[i]; //相同元素写入C表中 k++;i++;j++; } else
if(A.data[i] else j++; } C->length=k; return C; } 11.假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指向链表 21 中某个结点的指针,试编写算法删除结点*s的直接前驱结点。 答:分析:因为既不知道此单循环链表的头指针,也不知道其尾指针,所以找s的前驱就只能从s开始,顺次向后寻找。 void DeletePre(Linkedlist *s) {//删除单循环链表中结点s的直接前驱 p=s; while(p—>next—>next!=s) p=p—>next; //找到s的前驱的前驱p q=p—>next; //q是p的后继,即s的前驱 p—>next=s; //将q删除 free(q); } 12.计算带头结点的循环链表的结点个数。 答:int number(Linkedlist *head) {//计算单循环链表中结点的个数 p=head—>next; i=0; while(p!=head) {i++;p=p->next;} return i; } 13.已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法构造三个以循环链表表示的线性表,使得每个表中只含有同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。 答:分析:p指向待处理的单链表的首元结点,构造三个空的单循环链表,分别存储三类字符,其中一个表可使用原来的单链表。q指向p的下一个结点,根据*p的数据域的值将其插入到不同的链表上。再把q的值给p,处理下一个结点。 void change(LinkedList *L,LinkedList *pa,LinkedList *pb,LinkedList 22 *pc) {//分解含有三类字符的单链表为三个以循环链表表示的线性表,使其分别含有三类字符 p=L—>next; pa=L; pa—>next=pa; //分别构造三个单循环链表 pb=(LinkedList*)malloc(sizeof(LinkedList)); pc=(LinkedList*)malloc(sizeof(LinkedList)); pb—>next=pb;pc—>next=pc; while(p!=L) {q=p—>next;· //q记下L中下一个结点的位置 if(p—>data<=’z’&&p—>data>=’a’) //链接到字母链表的头部 {p—>next=pa—>next;pa—>next=p;} else if (p—>data<=’9’ &&(p—>data>=’0’) //链接到数字链表的头部 {p—>next=pb—>next;pb—>next=p;} else{p->next=pc->next;pc->next=p;}//链接到其他字母链表的头部 p=q; } } 14、己知A、B和C为三个递增有序的线性表,现要求对A表进行如下操作:删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法(注:题中未特别指明同一表中的元素值各不相同)。 答:分析:先从B和C中找出共有元素,记为same,再在A中从当前位置开始,凡小于same的元素均保留(存到新的位置),等于same的就跳过,到大于same时就再找下一个Same 23 SeqList IntersectDelete(SeqList *A,SeqList B,SeqList C) {//对顺序表A删去那些既在B表中出现又在C表中出现的元素 i=0;j=0;k=0;m=0; //i指示A中元素原来的位置,m为移动后的位置 while(ilength&&i else {same=B.data[j]; //找到了相同元素same while(B.data[j]==same) j++; while(C.data[k]==same) k++; /j、k后移到新的元素 while(ilength&&A->data[i] A->data[m++]=A->data[i++];//需保留的元素移动到新位置 while(i1ength&&A->data[i]==same; i++;//跳过相同的元素 } } while(ilength) A->data[m++]=A->data[i++]; //A的剩余元素重新存储 A->1ength=m; } 15.双循环链表中,设计满足下列条件的算法。 (1)在值为x的结点之前插入值为y的结点。(2)删除值为x的结点。 答:分析:在双循环链表中插入和删除结点要注意修改双向的指针。 typedef struct Node {DataType data; struct Node *prior,*next;}DLNode,*DLinkedList; void DLinsertl(DLinkedList L,int x,int y) 24 { //在双循环链表中插入结点 p=L->next; while(p!=L&&p->data!=x) p=p->next; //在链表中查找值为x的结点 if(p->data==x) //找到值为x的结点 {q=p->prior; //q指向值为x的结点的前驱 s=(DLinkedList)malloc(sizeof(DLNode)); s->data=y; s->next=p; s->prior=q; //将y插入到q与p指向的结点之间 p->prior=s;q->next=s; } else{printf(”没有值为x的结点”);exit(0);} } void DLDelete(DLinkedList L,int x) {//在双循环链表中删除结点 p=L->next; while(p!=L&&p->data!=x)p=p->next; if(p->data==x) {p->prior->next=p->next;p->next->prior=p->prior;free(p);} else{printf(”没有值为x的结点”);exit(0);} } 16.设有一个双循环链表,其中有一结点的指针为p,编写算法将p与其右边的一个结点进行交换。 答:typedef struct Node {DataType data; struct Node *prior,*next;}DLNode,*DLinkedList; void DLchange(DLinkedList p) {//将双循环链表中p指向的结点与其右边的一个结点进行交换 25
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




