(3)顺序表的查找
int locatlink(PNODE head,int e,int (*compare)(int ,int )) {//在head中查询第一个满足条件的元素的位置,若不存在,则返回-1 i; while(i<head.length&&!(*compare)(head.elem[i],e)) ++i; if(i<head.length) return i; else return -1; }
有序表的合并
void hebing(PNODE head1,PNODE head2,PNODE head3){ int i=0,j=0,k=0; head3.listsize=head3.length=head1.length+head2.length; head3.elem=(PNODE)malloc(sizeof(NODE)); if(head3.elem==NULL) exit(-1); while(i<head1.length&&j<head2.length)//合并 { if(head1.elem[i]<=head2.elem[j]) { head3.elem[k++]=head1.elem[i++]; } else head3.elem[k++]=head2.elem[j++]; } while(i<head1.length)//插入head1的剩余元素 { head3.elem[k++]=head1.elem[i++]; } while(j<head2.length) { head3.elem[k++]==head2.elem[j++]; } }
插入,删除,查找,合并的算法的时间复杂度
操作 | 元素移动(或比较)最少 | 元素移动(或比较)最多 | 元素移动(或比较)平均 |
插入 | 0 | n | n/2 |
删除 | 0 |
n-1 |
(n-1)/2 |
查找 | 1 | n |
(n+1)/2 |
有序表的合并 |
n1+n2 |
n1+n2 | n1+n2 |
总结~~~~(1)对于顺序表的查找我还是不怎么懂,这一点自己要多看,以下是自己从别的地方找来的,自己可以多理解理解 ~~~需知道节点的位置及地址或者知道这个节点所在链表的序号
时间: 2024-10-26 23:57:52