数据结构课后习题答案
LB.Find(i,x); if (LA.Search(x)) LC.Insert(LC.Length()+1,x); } cout<<LC; }
数据结构课后习题答案
template <class T> void Difference(SeqList<T> &LA,SeqList<T> &LB) { int m=LA.Length();
O(n)
数据结构课后习题答案
2.5 在类SingleList中增加一个成员函数,将单链表逆置运算, 直接实现该函数并分析其时间复杂度。
template <class T> void SingleList<T>::invert() { Node<T> *p=first,*q;
first=NULL; while (p) { q=p->link;
template <class T> void SeqList<T>::Invert() {
T e; for (int i=0;i<length/2;i++) { e=elements[i];
elements[i]=elements[length-i-1]; elements[length-i-1]=e; } }
SeqList<T> LC(10); T x; for (int i=1;i<=m;i++) { LA.Find(i,x);
if (LB.Search(x)==0) LC.Insert(LC.Length()+1,x); } cout<<LC; }
void main() { SeqList <int> LA(10),LB(10);
{ x++; i=2*i;
} while (i<n);
i k(循环次数) 2*i
11
21<n
22
22<n
2k-1 n
2k<n
2k<n, k<log2n, k=log2n
划线语句的执行次数为 log2n。O(log2n)
(3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++;
while (p && p->data<b) if (p->data<=a) { q=p; p=p->link; } else { q->link=p->link; delete p; p=q->link; }
} 思考结点a和b有没有删除掉?
a=5,b=13
first 2 5 7 9 13 15
数据结构课后习题答案
// 解法2 template<class T> void Merge1(CircularList<T> &a,CircularList<T> &b) { Node<T> *p=b.first->link;
b.first->data=b.first->link->data; b.first->link=a.first->link; a.first->link=p->link; p->link=p; b.first=p; b.length=0; }
while (p->link!=b.first) p=p->link;
p->link=a.first->link; a.first->link=b.first->link; b.first->link=b.first; b.length=0; } // O(b.length) a
b
数据结构课后习题答案
2.8 设有单循环链表类CircularList,要求在类CircularList中增加一个 成员函数,在不增加新结点的情况下,直接实现两个链表合并为一个链表 的算法,并分析其时间复杂度。
// 解法1 template<class T> void Merge(CircularList<T> &a, CircularList<T> &b) { Node<T> *p=b.first;
习题一(第18页)
1.5 确定下列各程序段的程序步,确定划线语句的执行 次数,计算它们的渐近时间复杂度。
(1) i=1; k=0; do { k=k+10*i; i++; } while(i<=n-1)
答: 划线语句的执行次数为 n-1 。O(n)
数据结构课后习题答案
(2)i=1; x=0; do
for (int i=1;i<=8;i++) LA.Insert(i,i); for (i=1;i<=3;i++) LB.Insert(i,i+3); InterSection(LA,LB); Difference(LA,LB); }
数据结构课后习题答案
2.2 (2) 在类LinearList 中增加一个成员函数,将顺序表逆置,实现 该函数并分析算法的时间复杂度。不利用类SeqList 提供的操作直接 实现。
p->link=first; first=p; p=q; } }
数据结构课后习题答案
2.7 单链表中结点按元素值递增链接,在类SingleList中增加一个成员 函数,直接实现删除结点值在a至b之间的结点(ab)。
template <class T> void SingleList<T>::DeleteAb(T a,T b) { Node<T> *p=first,*q=first;
#include <iostream.h> #include "seqlist0.h" #include "conio.h" template <class T> void InterSection(SeqList<T> &LA,SeqList<T> &LB) {
int m=LB.Length(); SeqList<T> LC(10); T x; for (int i=1;i<=m;i++) {
ni
j
1
ቤተ መጻሕፍቲ ባይዱ
i 1 j 1 k 1
划线语句的执行次数为 n(n+1)(n+2)/6 。O(n3)
数据结构课后习题答案
(4)x=n;y=0; while(x>=(y+1)*(y+1)) y++; n>k2
划线语句的执行次数为 n 。O( n )
数据结构课后习题答案
习题二(第37页)
2.1 利用线性表类LinearList提供的操作,实现两个集合的交和差运算。