}
// 若 cur_e 是 L 的数据元素,且不是最后一个,则用 next_e 返回它的后继,
// 返回 1;否则操作失败,next_e 无定义,返回—1
int NextElem(LinkList L,ElemType cur_e,ElemType *next_e)
{
LinkList p=L->next; // p 指向第一个结点
while(p—〉next) // p 所指结点有后继
{
if(p—〉data==cur_e)
{
*next_e=p—>next—>data;
return 1;
}
p=p->next;
}
return —1;
}
// 算法 2.9 P30
// 在带头结点的单链线性表 L 中第 i 个位置之前插入元素 e
int ListInsert(LinkList *L,int i,ElemType e)
{
int j=0;
LinkList p=*L,s;
while(p && j〈i-1) // 寻找第 i—1 个结点
{
p=p->next;
j++;
}
if(!p || j〉i-1) // i 小于 1 或者大于表长
return 0;
s=(LinkList)malloc(sizeof(struct LNode)); // 生成新结点
s—〉data=e; // 插入 L 中
s->next=p—〉next;
p-〉next=s;
return 1;
}
// 算法 2.10 P30
// 在带头结点的单链线性表 L 中,删除第 i 个元素,并由 e 返回其值
int ListDelete(LinkList *L, int i,ElemType *e)
{
int j = 0;
LinkList p=*L,q;
while(p-〉next&&j〈i-1) // 寻找第 i 个结点,并令 p 指向其前趋
{
评论0
最新资源