[TOC]
带头结点的单向链表
typedef struct LNode{
ElemYype data;
struct LNode *next;
}LNode,*LinkList;
获取元素
GetElem_l(LinkList L,int i,ELemtype &e)
//带头结点,返回第I个元素,并赋值给e,成功返回1,失败返回-1
{
p = L-next;j=1;
while(p&&j<i){
p = p->next;j++;
}
if(!p||j>i) return -1;
e = p->data;
return 1;
}
指定位置插入一个结点
int ListInsert_l(LinkList &L,int i,Elemtype e)
{
p = L;j=0;
while(p&&j<i-1)
{
p = p->next;
j++;
}//寻找第i-1个结点
if(!p||j>i-1) return -1;
s = (Linklist)malloc(sizeof(LNode));
s->data = e;s->next = p->next;
p->next =s;
return 1;
}
指定删除一个结点
int ListDelete_l(LinkList &l,int i,ElemType &e)
{ //提取删除的第一个元素在e中,成功返回1,失败-1
p =L;i=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!(p->next)||j>i-1) return -1;
q = p->next;p->next = q->next;
e = q->data;free(q);
return 1;
} //ListDelete_l
循环双向链表
定义
typedef struct DulNode{
ElemType data;
struct DulNode *prior;
struct DulNode *next;
}DuLNode,*DulLinkList;
指定位置插入结点
int ListInsert_dul(DuLinkList &L,int i,ElemType e)
{//成功返回1,失败-1
int j=0;
DuLinkList p = L;
while(p&&j<i){
p= p->next;j++;
}
if(!p ||j>i)
return -1;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return -1; //申请内存失败
s->data = e;
s->prior = p->prior;p->prior->next = s;
s->next = p; p->prior =s;
return 1;
}
指定位置删除结点
int ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i)))
return -1;
e = p->data;
p->prior->next = p->next;
p->next->prior = p->prior; // 这两句话应该是可以调换的,因为p一直都存在
free(p);
return 1;
}
中间的结点变量很重要应该要首先赋值.
网友评论