天任考研小編為大家整理了“2023考研計算機模擬試題(3)”相關內容,為報考計算機專業的考生們提供指導。更多有關計算機考研干貨可關注考研備考欄目。
2023考研計算機模擬試題(3)
(15) 在雙向循環鏈表中,在p指針所指的結點后插入q所指向的新結點,其修改指針的操作是( )。
A.p->next=q; q->prior=p; p->next->prior=q; q->next=q;
B.p->next=q; p->next->prior=q; q->prior=p; q->next=p->next;
C.q->prior=p; q->next=p->next; p->next->prior=q; p->next=q;
D.q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;
答案:C
2.算法設計題
(1)將兩個遞增的有序鏈表合并為一個遞增的有序鏈表。要求結果鏈表仍使用原來兩個鏈表的存儲空間, 不另外占用其它的存儲空間。表中不允許有重復的數據。
[題目分析]
合并后的新表使用頭指針Lc指向,pa和pb分別是鏈表La和Lb的工作指針,初始化為相應鏈表的第一個結點,從第一個結點開始進行比較,當兩個鏈表La和Lb均為到達表尾結點時,依次摘取其中較小者重新鏈接在Lc表的后。如果兩個表中的元素相等,只摘取La表中的元素,刪除Lb表中的元素,這樣確保合并后表中無重復的元素。當一個表到達表尾結點,為空時,將非空表的剩余元素直接鏈接在Lc表的后。
[算法描述]
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{//合并鏈表La和Lb,合并后的新表使用頭指針Lc指向
pa=La->next; pb=Lb->next;
//pa和pb分別是鏈表La和Lb的工作指針,初始化為相應鏈表的第一個結點
Lc=pc=La; //用La的頭結點作為Lc的頭結點
while(pa && pb)
{if(pa->datadata){pc->next=pa;pc=pa;pa=pa->next;}
//取較小者La中的元素,將pa鏈接在pc的后面,pa指針后移
else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}
//取較小者Lb中的元素,將pb鏈接在pc的后面,pb指針后移
else //相等時取La中的元素,刪除Lb中的元素
{pc->next=pa;pc=pa;pa=pa->next;
q=pb->next;delete pb ;pb =q;
}
}
pc->next=pa?pa:pb; //插入剩余段
delete Lb; //釋放Lb的頭結點
}