[TOC]
帶頭結(jié)點(diǎn)的單向鏈表
typedef struct LNode{
ElemYype data;
struct LNode *next;
}LNode,*LinkList;
獲取元素
GetElem_l(LinkList L,int i,ELemtype &e)
//帶頭結(jié)點(diǎn),返回第I個(gè)元素,并賦值給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;
}
指定位置插入一個(gè)結(jié)點(diǎn)
int ListInsert_l(LinkList &L,int i,Elemtype e)
{
p = L;j=0;
while(p&&j<i-1)
{
p = p->next;
j++;
}//尋找第i-1個(gè)結(jié)點(diǎn)
if(!p||j>i-1) return -1;
s = (Linklist)malloc(sizeof(LNode));
s->data = e;s->next = p->next;
p->next =s;
return 1;
}
指定刪除一個(gè)結(jié)點(diǎn)
int ListDelete_l(LinkList &l,int i,ElemType &e)
{ //提取刪除的第一個(gè)元素在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
循環(huán)雙向鏈表
定義
typedef struct DulNode{
ElemType data;
struct DulNode *prior;
struct DulNode *next;
}DuLNode,*DulLinkList;
指定位置插入結(jié)點(diǎn)
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; //申請(qǐng)內(nèi)存失敗
s->data = e;
s->prior = p->prior;p->prior->next = s;
s->next = p; p->prior =s;
return 1;
}
指定位置刪除結(jié)點(diǎn)
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; // 這兩句話應(yīng)該是可以調(diào)換的,因?yàn)閜一直都存在
free(p);
return 1;
}
中間的結(jié)點(diǎn)變量很重要應(yīng)該要首先賦值.