设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同 )
分别查找第一个值>mink的结点和第一个值 ≥maxk的结点,再修改指针,删除值大于mink且小于maxk的所有元素。
[算法描述]void delete(LinkList &L, int mink, int maxk) {
p=L->next; //首元结点while (p && p->data<=mink)
{ pre=p; p=p->next; } //查找第一个值>mink的结点if (p)
{while (p && p->datanext;// 查找第一个值 ≥maxk的结点
q=pre->next; pre->next=p; // 修改指针while (q!=p)
{ s=q->next; delete q; q=s; } // 释放结点空间}//if
}
[算法描述]void delete(LinkList &L, int mink, int maxk) {
p=L->next; //首元结点while (p && p->data<=mink)
{ pre=p; p=p->next; } //查找第一个值>mink的结点if (p)
{while (p && p->datanext;// 查找第一个值 ≥maxk的结点
q=pre->next; pre->next=p; // 修改指针while (q!=p)
{ s=q->next; delete q; q=s; } // 释放结点空间}//if
}
举一反三
- 一个顺序表元素值有序递增,编写算法,删除顺序表中值相同的多余元素.
- 设计一个算法,从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不相同。
- 【简答题】已知线性表的元素按递增顺序排列,并以带头结点的单链表作存储结构。试编写一个删除表中所有值大于min且小于max的元素(若表中存在这样的元素)的算法
- 已知有两个按元素值递增有序的顺序表A和B(这样的顺序表称递增有序顺序表)。设计一个算法将顺序表A和B的全部元素归并到一个按元素递增有序的顺序表C中。并分析算法的空间复杂度和时间复杂度。
- 假设以两个元素依值递增有序排列的线性表 A 和 B 分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表 C ,其元素为 A 和 B 中元素的交集,且表 C 中的元素也依值递增有序排列。试对顺序表编写求 C 的算法。
内容
- 0
有两个递增有序顺序表A和B,分别含有n和m个整数元素(最大的元素不超过32767),假设这n+m个元素均不相同。设计一个尽可能高效的算法求这n+m个元素中第k小的元素。如果参数k错误,算法返回0;否则算法返回1,并且用参数e表示求出的第k小的元素。
- 1
若有一个无序顺序表R1和递增有序顺序表R2,它们均含有n个元素,且可能存在相同关键字的元素。设计两个算法分别输出R1和R2中第一个关键字为k的元素位置,并分析成功查找的平均查找长度。
- 2
1.假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。
- 3
【其它】对于有 n ( n ≥ 1 )个节点的循环单链表 L ,假设所有节点值是递增有序的,设计一个算法就地删除所有值重复的节点
- 4
已知有两个递增有序顺序表A和B,设计一个算法由顺序表A和B的所有公共元素产生一个顺序表C。