:返回L中第1个与e满足关系compare()的数据元素的位序。
若这样的数据元素不存在,则返回值为ERROR*/
Status LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{
int i=0;
LinkList p=L->next->next; //p指向第一个结点
while(p!=L->next)
{
i++;
if(compare(p->data,e)) //满足关系
return i;
p=p->next;
}
return 0;
}
求前驱结点
/*初始条件:单循环链表L存在*/
/*操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱;
否则,操作失败,pre_e无定义*/
Status PriorElem(LinkList L,ElemType cur_e,ElemType &pre_e)
{
LinkList q;
LinkList p=L->next->next; //p指向第一个结点
q=p->next;
while(q!=L->next) //p没到表尾
{
if(q->data==cur_e)
{
pre_e=p->data;
return TRUE;
}
p=q;
q=q->next;
}
return FALSE; //操作失败
}
求结点后继
/*初始条件:单循环链表L存在*/
/*操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继;
否则,操作失败,next_e无定义*/
Status NextElem(LinkList L,ElemType cur_e,ElemType &next_e)
{
LinkList p=L->next->next; //p指向第一个结点
while(p!=L) //p没有到达链表尾
{
if(p->data==cur_e)
{
next_e=p->next->data;
return TRUE;
}
p=p->next;
}
return FALSE; //操作失败
}
链表中插入新结点
/*初始条件:单循环链表L存在*/
/*操作结果:在L的第i个位置之前插入元素e*/
Status ListInsert(LinkList &L,int i,ElemType e)
{
LinkList s;
LinkList p=L->next; //p指向头结点
int count=0;
if(i<0||i>ListLength(L)+1) //无法在第i个元素前插入
return ERROR;
while(count
next;
count++;
}
s=(LinkList)malloc(sizeof(LNode)); //生成新结点
s->data=e; //插入L中
s->next=p->next;
p->next=s;
if(p==L) //改变尾结点
L=s;
return OK;
}
链表中删除结点
/*初始条件:单循环链表L存在*/
/*操作结果:删除L的第i个元素,并由e返回其值*/
Status ListDelete(LinkList &L,int i,ElemType &e)
{
LinkList p=L->next,q; //p指向头结点
int count=0;
if(i<=0||i>ListLength(L)) //第i个元素不存在
return ERROR;
while(count
next;
count++;
}
q=p->next; //q指向删除结点
p->next=q->next;
e=q->data;
if(L==q) //删除的是表尾元素
L=p;
free(q);
return OK;
}
依次查看结点元素
/*初始条件:单循环链表L存在*/
/*操作结果:依次对每个数据元素调用函数visit()*/
void ListTraverse(LinkList L,void(*visit)(ElemType))
{
LinkList p=L->next->next; //p指向第一个结点
while(p!=L->next) //p不指向头结点
{
visit(p->data);
p=p->next;
}
printf("\n");
}
嗯下面就是在VC中的测试
//单循环链表
#include
#include
#include
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; Status compare(ElemType e1,ElemType e2) { if(e1==e2) return 0; else if(e1>e2) return 1; else if(e1<e2) return="" -1;="" }="" status="" equal(elemtype="" c1,elemtype="" c2)="" {="" if(c1="=c2)" true;="" else="" error;="" void="" visit(elemtype="" e)="" printf("%d="" \n",e);="" print(elemtype="" c)="" ",c);="" *操作结果:构造一个