{pre=p; p=p->next;} //查找A[i]的插入位置if(p==h || p->data!=A[i]) //重复数据不再输入 {s=(LinkedList)malloc(sizeof(LNode));
s->data=A[i]; pre->next=s; s->next=p;//将结点s链入链表中 }
}//for
return(h); }算法结束
3、设有一组初始记录关键字序列(K1,K2,„,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
void quickpass(int r[], int s, int t) {
int i=s, j=t, x=r[s]; while(iwhile (ix) j=j-1; if (ir[i]=x; }4、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。 29. ①试找出满足下列条件的二叉树
1)先序序列与后序序列相同 2)中序序列与后序序列相同 3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同
5、设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。
6、我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置(下标)。用j记住局部平台的起始位置,用i指示扫描b数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于l时,则修改最长平台的长度k(l=i-j)和其在b中的起始位
置(k=j),直到b数组结束,l即为所求。 void Platform (int b[ ], int N)
//求具有N个元素的整型数组b中最长平台的长度。 {l=1;k=0;j=0;i=0; while(i{while(iif(i-j+1>l) {l=i-j+1;k=j;} //局部最长平台 i++; j=i; } //新平台起点printf(“最长平台长度%d,在b数组中起始下标为%d”,l,k); }// Platform
7、设有一组初始记录关键字序列(K1,K2,„,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
void quickpass(int r[], int s, int t) {
int i=s, j=t, x=r[s]; while(iwhile (ix) j=j-1; if (ir[i]=x; }