更多"【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。"的相关试题:
[多项选择]【说明】
本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:
creatList( ): 创建从小到大的有序链表。
multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。
print( ): 打印链表。
【C++代码】
#include <iostream>
using namespace std;
class List;
class Node
friend class List;
public:
Node(int data)
(1) ;
private:
int data;
Node *next;
;
class List
public:
List( )list=NULL;
void multiplyList(List L1, List L2);
void creatList( );
void print( );
private:
Node *list;
;
void List::creatList( )
Node *p, *u, *pre;
int dara;
list=NULL;
wbile(1)
cout<<"输入链表的一项: (小于零,结束链表) "<<endl;
cin>>data;
if(dara<0)break;//小于零,结束输入
p=list;
while(p !=NULL && dara>p->data)//查找插入点
pre=p;
p=p->next;
u= (2
[简答题]【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类Node描述,而链表由类List描述。类List的成员函数有以下几个。
①createList( ):创建从小到大的有序链表。
②multiplyList(List L1,List L2):将链表L1和链表L2合并。
③print( );打印链表。
# include <iostream.h>
class List;
class Node
friend class List;
public:
Node(int data)
(1) ;
private:
int data;
Node *next;
;
class List
public:
List( ) list = NULL;
void multiplyList(List L1, List L2);
void createList( );
void print( );
private:
Node *list;
;
void List::createList( )
Node *p, *u, *pm;
int data;
list = NULL;
while (1)
cout<<"输入链表的一项: (小于零,结束链表)"<<end1;
cin >> data;
if(data<0)break; //小于零,结束输入
p = list;
while (p != NULL && data > p->data) //查找插入点
pre = p;
p = p->next;
u= (2) :
if(p==list)
lis
[简答题]【说明】
本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:
creatList( ): 创建从小到大的有序链表。
multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。
print( ): 打印链表。
【C++代码】
#include <iostream>
using namespace std;
class List;
class Node{
friend class List;
public:
Node(int data){
(1) ;
}
private:
int data;
Node *next;
};
class List{
public:
List( ){list=NULL;}
void multiplyList(List L1, List L2);
void creatList( );
void print( );
private:
Node *list;
};
void List::creatList( )
{
Node *p, *u, *pre;
int dara;
list=NULL;
wbile(1){
cout<<"输入链表的一项: (小于零,结束链表) "<<endl;
cin>>data;
if(dara<0)break;//小于零,结束输入
p=list;
while(p !=NULL && dara>p->data){//查找插入点
pre=p;
p=p->next;
}
u= (2) ;
if(p==list)list=u;
else pre->next=u;
(3) ;
}
}
void List::multipl
[填空题]
下面程序的功能是;将两个有序链表(降序捧序)合并为一个有序链表,函数merge(node *h1,node *h2)将由h1和h2分别指向的己排序的两个链表,合并为一个依然有序的链表。注意;对于数据大小相同的结点,都要保留在合并后的链表上。主函数产生两条已降序排序的链表,并输出合并后链表上的数据值.
例如,原链表上各结点的数据依次为;
h1:15,9,8,7,3
h2:15,12,10,7,3,2
合并后得到的新链表为;15,15,12, 10,9,8,7,7,3,3,2
【程序]
#include
struct node{
int data;
node*next;
};
node *merge(node *h1,node *h2)
{
if(h1==NULL) return h2;
if(h2==NULL) return h1;
node *h=NULL;
if(___(1)___){
h=h1;
h1=h1->next;
}
else{
h=h2;
h2=h2->next;
}
node *p=h;
while(___(2)___){
if(h1->data >=h2->data){
p->next=h1;
p=h1;
h1=h1->next;
}
else{
p->next=h2;
p=
[单项选择]将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是 (28) 。
A. n-1
B. n
C. 2n-1
D. 2n
[填空题][说明]
本程序中的函数void first_jnsert(NODE**p,int v)的功能是在已知链表的首表元之前插入一个指定的表元; 函数NODE *reverse_copy(NODE *p)的功能是按已知链表复制出一个新的链表,但新的链表的表元链接顺序与已知链表的表元链接顺序相反; 函数voidprint_link(NODE*p)用来输出链表中各表元的值; 函数void free_link(NODE*p)用来释放链表全部表元空间。
[函数]
#include <stdio.n>
#include <malloc.h>
typedef struct node
int val;
struct node *next;
NODE;
void first_insert (NODE **p,int v)
NODE *q= (NODE *) malloc (sizeof (NODE) ;
q->val=v;
(1) ;
*p= (2) ;
NODE *reverse_copy (NODE *p)
NODE *u;
for (u=NULL; p;p=p->next)
first_insert( (3) );
return u;
void print_link (NODE *p)
for (; (4) ) printf ("%d/t" ,p->val) ;
printf (" /n") ;
void free_link (NODE *p)
NODE *u;
while (p ! =NULL)
u=p->next ;
free (p);
(5) ;
void main ( )
NODE *link1, *link2 ;
int i;
link1=NULL ;
fo
[单项选择]将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较()次。
A. 1
B. n-1
C. n
D. 2n
[填空题]将两个长度分别为m和n的递增有序单链表,归并成一个按元素递减有序的单链表,可能达到的最好的时问复杂度是______。
[简答题]【说明】
本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。
【代码】
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char*replace(char *s1, char *s2,char *s3)
{ char *p, *q, *r, *s; int |2,|3, i=0;
|2=strlen(s2);
|3=strlen(s3);
p=s1;
while((p=strstr(p,s2))!=NULL)
{ i++; /* 统计s2串出现的次数*/
(1) ;
}
i= (2) ;
s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/
p=s1;
while(1)
{ q=strstr(p, s2); /* s2串是否在s1中出现,q是首次出现的位置*/
if(q!=NULL)
{ i=q-p;
(3) ;
r+=i;
(4) ;
r+=|3;
p=q+|2; /*将指向s1串的指针移到s2子串出现的位置后,
为下一次循环做好准备*/
}
else /*q为空,表示剩余的s1串中已经没有s2*/
{ (5) ;
break; /*终止循环*/
}
}
return(s); /*返回指向所形成的新串的指针*/
}
void main( )
{ char *a="sabcababde", *b="ab", *c="efg", *d;
d=replace(a, b, c); printf("result=%s/n", d); free(d);
}
[单项选择]在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是()。
A. O(1)
B. O(n)
C. O(nlogn)
D. O(n2)