1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。
//将合并逆置后的结果放在C表中,并删除B表
StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C)
{
LinkListpa,pb,qa,qb;
pa=A;
pb=B;
qa=pa;//保存pa的前驱指针
qb=pb;//保存pb的前驱指针
pa=pa->next;
pb=pb->next;
A->next=NULL;
C=A;
while(pa&&pb){
if(pa->datadata){
qa=pa;
pa=pa->next;
qa->next=A->next;//将当前最小结点插入A表表头
A->next=qa;
}
else{
qb=pb;
pb=pb->next;
()//将当前最小结点插入B表表头
A->next=qb;
}
}
while(pa){
qa=pa;
pa=pa->next;
qa->next=A->next;
A->next=qa;
}
while(pb){
qb=pb;
pb=pb->next;
qb->next=A->next;
A->next=qb;
}
pb=B;
free(pb);
returnOK;
}
//将合并逆置后的结果放在C表中,并删除B表
StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C)
{
LinkListpa,pb,qa,qb;
pa=A;
pb=B;
qa=pa;//保存pa的前驱指针
qb=pb;//保存pb的前驱指针
pa=pa->next;
pb=pb->next;
A->next=NULL;
C=A;
while(pa&&pb){
if(pa->datadata){
qa=pa;
pa=pa->next;
qa->next=A->next;//将当前最小结点插入A表表头
A->next=qa;
}
else{
qb=pb;
pb=pb->next;
()//将当前最小结点插入B表表头
A->next=qb;
}
}
while(pa){
qa=pa;
pa=pa->next;
qa->next=A->next;
A->next=qa;
}
while(pb){
qb=pb;
pb=pb->next;
qb->next=A->next;
A->next=qb;
}
pb=B;
free(pb);
returnOK;
}
qb->next=A->next
举一反三
- 1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。 //将合并逆置后的结果放在C表中,并删除B表 StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C) { LinkListpa,pb,qa,qb; pa=A; pb=B; qa=pa;//保存pa的前驱指针 qb=pb;//保存pb的前驱指针 pa=pa->next; pb=pb->next; A->next=NULL; C=A; while(pa&&pb){ if(pa->datadata){ qa=pa; pa=pa->next; qa->next=A->next;//将当前最小结点插入A表表头 A->next=qa; } else{ qb=pb; pb=pb->next; ()//将当前最小结点插入B表表头 A->next=qb; } } while(pa){ qa=pa; pa=pa->next; qa->next=A->next; A->next=qa; } while(pb){ qb=pb; pb=pb->next; qb->next=A->next; A->next=qb; } pb=B; free(pb); returnOK; }
- 1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。 //将合并逆置后的结果放在C表中,并删除B表 StatusListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C) { LinkList pa,pb,qa,qb; pa=A; pb=B; qa=pa; //保存pa的前驱指针
- 简述以下算法的功能。void BB (LNode *s. LNode "q){[br][/br]p=s;while (p->next!=q) p=p->next;p->next =s;}//BBvoid AA(LNodc pa, LNode *pb){//pa和 pb分别指向单循环链表中的两个结点BB (pa,pb);BB(pb.pa) ;}//AA
- 某厂商生产两种产品A和B,需求曲线分别为PA=70-0.25Q,PB=60-0.2QB-0.4QA,两种产品的边际成本分别为25和20,企业获得利润最大,A、B产品的定价及产量() A: PA=47.5,PB=30 B: PA=30,PB=47.5 C: QA=50,QB=45 D: QA=QB=50
- 分析下面的程序,下列说法中错误的是 ________ 。 #define NULL 0 #include "conio.h" struct stu { long num; char name[20]; int score; struct stu * next; }; int main() { struct stu *head,*p,*pa,*pb,*pc; pa=(struct stu *)malloc(sizeof(struct stu)); pb=(struct stu *)malloc(sizeof(struct stu)); pc=(struct stu *)malloc(sizeof(struct stu)); scanf("%ld%s%d",&pa->num,pa->name,&pa->score); scanf("%ld%s%d",&pb->num,pb->name,&pb->score); scanf("%ld%s%d",&pc->num,pc->name,&pc->score); head=pa; pa->next=pb; pb->next=pc; pc->next=NULL; p=head; while(p!=NULL) { printf("%ld,%s,%d\n",p->num,p->name,p->score); p=p->next; } }
内容
- 0
【填空题】以下程序的输出结果是 。 main() {int a=10,b=20,*pa=&a,*pb=&b,*p; p=pa;pa=pb;pb=p; printf(“%d,%d”,*pa,*pb);}
- 1
若有语句:int a,b; int *pa,*pb; pa=&a; pb=&b; 正确的输入语句是() A: scanf("%d%d",x, y); B: scanf("%d%d",pa,pb); C: scanf("%d%d",&pa,&pb); D: scanf("%d%d",*pa,*pb);
- 2
voidmain(){inta[10],b'10],*pa,*pb;pa=a;pb=b;for(inti=0;i<3;i++,pa++,pb++){*pa=i;*pb=2*i;}pa=&a[0];pb=&b[0];for(inti=0;i<3;i++){*pa=*pa+i;*pb=*pb+i;cout<<*pa++<<","<<*pb++<<",";}}
- 3
假设有int a=1,*pa=&a; float b=1.2, *pb=&b; 则 pb=pa;是合法的。
- 4
两种液体A(1)和B(l)可以形成理想液态混合物,在相同温度时纯物质的饱和蒸气压pA*>pB*。当液态混合物的组成处于0<XB<1时,混合物的总蒸气压力与P与pA*和pB*的大小关系为 A: P > pA* >pB* B: pA*>P>pB* C: pA*<P<pB* D: P<pA* = pB*