1-1对于顺序存储的长度为的线性表,访问结点和增加结点的时间复杂度分别对应为和。
(2分)作者DS课程组单位浙江大学1-1答案正确(2 分)
1-2对于顺序存储的长度为的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为和。
(2分)作者徐镜春单位浙江大学1-2答案正确(2 分)
1-3循环链表不是线性表。
(2分)作者李廷元单位民用航空飞行学院1-3答案正确(2 分)
1-4顺序存储的线性表可以随机存取。
(2分)作者李廷元单位民用航空飞行学院1-4答案正确(2 分)
1-5链式存储的优点是插入、删除元素时不会引起后续元素的移动,缺点是只能顺序访问各元素。
(2分)作者DS课程组单位临沂大学1-5答案正确(2 分)2-1在个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
(2分)作者DS课程组单位浙江大学2-1答案正确(2 分)
2-2若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?
(2分)作者DS课程组单位浙江大学2-2答案正确(2 分)
2-3下面的叙述正确的是( )。
(2分)作者DS课程组单位临沂大学2-3答案正确(2 分)
2-4设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:
(2分)作者DS课程组单位浙江大学2-4答案正确(2 分)
2-5带头结点的单链表h
为空的判定条件是:
(2分)作者DS课程组单位浙江大学2-5答案正确(2 分)5-1合并两个排序的整数数组A和B变成一个新的数组。例如,给出A={1,2,3,4},B={2,4,5,6},则合并后的数组为 {1,2,2,3,4,4,5,6}。
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
/**
* @param A and B: sorted integer array A and B.
* @return: A new sorted integer array
*/
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
vector<int> result;
int lena = A.size();
int lenb = B.size();
int ia = 0, ib = 0;
while (ia < lena && ib < lenb)
{
int val_a = A[ia];
int val_b = B[ib];
int val;
if (val_a <= val_b) {val = val_a; ia++;}
else {val = val_b; ib++;} 4分;
}
while (ia < lena)
{
result.push_back(A[ia]); 3分;
}
while (3分)
{
result.push_back(B[ib]);
ib++;
}
return result;
}
};
作者李廷元单位民用航空飞行学院时间限制400 ms内存限制64 MB5-1答案正确(10 分)
5-2下列代码的功能是返回带头结点的单链表L
的逆转链表。
List Reverse( List L )
{
Position Old_head, New_head, Temp;
New_head = NULL;
Old_head = L->Next;
while ( Old_head ) {
Temp = Old_head->Next; 3分;
New_head = Old_head;
Old_head = Temp;
} 3分;
return L;
}
作者DS课程组单位浙江大学时间限制400 ms内存限制64 MB已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列的中位数指的值,即第个数(为第1个数)。
输入格式:
输入分三行。第一行给出序列的公共长度N(0N100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的并集序列的中位数。
输入样例1:
5
1 3 5 7 9
2 3 4 5 6
输出样例1:
4
输入样例2:
6
-100 -10 1 1 1 1
-50 0 2 3 4 5
输出样例2:
1
作者DS课程组单位浙江大学代码长度限制16 KB时间限制200 ms内存限制64 MB#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> C;
vector<int> p;
int n,data1,data2;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>data1;
C.push_back(data1);
}
for(int i=0; i<n; i++)
{
cin>>data2;
C.push_back(data2);
}
sort(C.begin(),C.end());
cout<<C[n-1];
}
对于顺序存储的长度为的线性表,访问结点和增加结点的时间复杂度分别对应为和。
对于顺序存储的长度为的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为和。
循环链表不是线性表。
顺序存储的线性表可以随机存取。
链式存储的优点是插入、删除元素时不会引起后续元素的移动,缺点是只能顺序访问各元素。
在个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?
下面的叙述正确的是( )。
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:
带头结点的单链表h
为空的判定条件是:
合并两个排序的整数数组A和B变成一个新的数组。例如,给出A={1,2,3,4},B={2,4,5,6},则合并后的数组为 {1,2,2,3,4,4,5,6}。
#include <stdio.h> #include <iostream> #include <vector> using namespace std; class Solution { public: /** * @param A and B: sorted integer array A and B. * @return: A new sorted integer array */ vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) { vector<int> result; int lena = A.size(); int lenb = B.size(); int ia = 0, ib = 0; while (ia < lena && ib < lenb) { int val_a = A[ia]; int val_b = B[ib]; int val; if (val_a <= val_b) {val = val_a; ia++;} else {val = val_b; ib++;} 4分; } while (ia < lena) { result.push_back(A[ia]); 3分; } while (3分) { result.push_back(B[ib]); ib++; } return result; } };
下列代码的功能是返回带头结点的单链表L
的逆转链表。
List Reverse( List L ) { Position Old_head, New_head, Temp; New_head = NULL; Old_head = L->Next; while ( Old_head ) { Temp = Old_head->Next; 3分; New_head = Old_head; Old_head = Temp; } 3分; return L; }
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列的中位数指的值,即第个数(为第1个数)。
输入格式:
输入分三行。第一行给出序列的公共长度N(0N100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的并集序列的中位数。
输入样例1:
5 1 3 5 7 9 2 3 4 5 6
输出样例1:
4
输入样例2:
6 -100 -10 1 1 1 1 -50 0 2 3 4 5
输出样例2:
1
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> C; vector<int> p; int n,data1,data2; cin>>n; for(int i=0; i<n; i++) { cin>>data1; C.push_back(data1); } for(int i=0; i<n; i++) { cin>>data2; C.push_back(data2); } sort(C.begin(),C.end()); cout<<C[n-1]; }