设有一组初始记录关键字序列(K1,K2,„,Kn),要求设计一个算法能够在O(n)的时间 复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
void quickpass(int r[], int s, int t)
{
int i=s, j=t, x=r[s]; while(i<j){
while (i<j && r[j]>x) j=j-1; if (i<j) {r[i]=r[j];i=i+1;} while (i<j && r[i]<x) i=i+1; if (i<j) {r[j]=r[i];j=j-1;
}
r[i]=x;
}
}r[i]=x;
}
设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表 中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。
参考答案:
typedef char datatype;
typedef struct node {datatype data; struct node *next;}lklist; void split(lklist *head,lklist *&ha,lklist *&hb,lklist *&hc) {
lklist *p; ha=0,hb=0,hc=0; for(p=head;p!=0;p=head) {
head=p->next; p->next=0;
if (p->data>='A' && p->data<='Z') {p->next=ha; ha=p;}
else if (p->data>='0' && p->data<='9') {p->next=hb; hb=p;} else {p->next=hc; hc=p;} } }
本文探讨了两个算法问题,一是如何在O(n)时间复杂度内将线性表按照特定关键字划分成两部分,左半部分元素小于给定值,右半部分元素大于等于给定值。二是如何利用原单链表节点空间,根据字符类型(大写字母、数字和其他字符)创建三个分别只包含同类字符的单链表。提供了详细的算法实现代码。
2858

被折叠的 条评论
为什么被折叠?



