数据结构之All In
1.设一棵二叉树的先序序列:A B D F C E G H,中序序列: B F D A G E H C。
(1)画出这棵二叉树
(2)画出这棵二叉树的后序线索树
(3)将这棵二叉树转换成对应的树或森林
用按层次顺序遍历二叉树的方法,统计树中度为1的结点数目
求下列算法的时间复杂度
s=0;
for i=0; i<n; i++)
for(j=0; j<n; j++)
s+=B[i][j];
sum=s;
答案:O(n2)
解释:语句s+=B[i][j];的执行次数为n2。
在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( A )。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点后插入一个新结点(1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
解析:选项A中的读取结点操作通过数组下标直接定位
在一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数( )。
A.8
B.63.5
C.63
D.7
知识点:线性表的插入算法分析 n=127, 移动次数 n/2=63.5
算法设计题:
设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)
void Decompose(LinkList &A,LinkList &B,LinkList &C )
{
B=A;
B->next= NULL; ∥B表初始化
C=new LNode;∥为C申请结点空间
C->next=NULL; ∥C初始化为空表
p=A->next; ∥p为工作指针
while(p!= NULL)
{
r=p->next; ∥暂存p的后继
if(p->data<0)
{
p->next=B->next