Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e)
{
LinkList q, p=L->next;
while(p && p->next)
{ q=p->next;
if(q->data==cur_e)
{ pre_e=p->data;
return OK;
}
p=q;
}
return ERROR;
}
Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e)
{
LinkList p=L->next;
while(p && p->next)
{ if(p->data==cur_e)
{ next_e=p->next->data;
return OK;
}
p=p->next;
}
return ERROR;
}
高一凡代码
下面比较csdn上链式存储直接插入排序中pre指针使用
void zhijiecharusort(LinkList& l)//直接插入排序
{// 使用指针p先保存下L中未排序元素(无序区中)的信息
使用指针p先保存下L中未排序元素(无序区中)的信息
LinkList p = l->next->next;//第一个节点有序
l->next->next = NULL;
// 由于为了构造有序区,已经将待排序元素的第一个元素放在有序区中了,
// 所以从第二个元素开始遍历,也就是p = L->next->next。
while (p)//p指向无序区
{
// 每循环一次p后移一位,直至p == NULL.
// 进行插入有序区的操作时会改变p->next的值所以需要选保存一下
LinkList q = p->next;
// 为方便比较,用一个指针pre,指向有序区。(重点)
LinkList pre = l;//为什么不能等于l->next
// 遍历有序区中的所有元素,直至有序区末尾或者找到:
// p所指的元素 大于 pre的next所指的元素为止,
while (pre->next != NULL && pre->next->data < p->data)//pre->next->data < p->data一旦不符合这个条件就成:pre->data < p->data&&pre->next->data > p->data
pre = pre->next; //pre->next == NULL跳出循环,即pre是有序区最后一个节点
// 找到比p大的节点后,执行插入操作,因为插入操作需要用到
// 被插入节点的前驱节点,所以在比较时,用了pre->next来和p比较
p->next = pre->next;
pre->next = p;
// 用q把p的值恢复过来,使得循环继续指向无序区的下一个节点
p = q;//往后移动1位因为:LinkList q = p->next;
}
}
LinkList pre = l;//为什么不能等于l->next
// 遍历有序区中的所有元素,直至有序区末尾或者找到:
// p所指的元素 大于 pre的next所指的元素为止,
while (pre->next != NULL && pre->next->data < p->data)//pre->next->data < p->data一旦不符合这个条件就成:pre->data < p->data&&pre->next->data > p->data
pre = pre->next; //pre->next == NULL跳出循环,即pre是有序区最后一个节点