单链表操作
#icnlud
>
usnigna mspeae cstd;
#dfiee OK 1n
#de
fie EnRROR0
#d
feine OERFVLOW-
2
typdeefi ntSt auts ; /S/ttasu 函数返是回类值型,值其是数函果状态结代。码
ypedef tit nlEmeyTep //E;lemTpye 为可义的定数据型,类此设为it类n
型
tpydeef structLN oe
d{
EemTlpy edtaa ; //结 点数据域
s的turct LNod *enext; /结点/指针域
的}
NodeL*Li,kLnist ; /L/iknist为指向结L构体LNoed指针的型
类
tStaus IitniLstL_L(nikist &L){L / 算/2.6 单链法的初始表
化
/构/一个空的单链表造
LL
=ewnLNode ; / /成生结新作为点结点头用头,针L指指头结向
点
L->nxet=UNL;L // 结头的点指域置针空
r
eutnrOK
;
}
Sta
tu GstElemeL_LinkL(istL,in i,EtemTlyp e&e{) //算 法2.7 按序号查找单,链的表值
取
//在头带点结的链表单中查找L第个元i
素
nit ;j
LNode* p;
p
=->nextL;=j;1 // 初化,始p向第一指个点结,j计数为器
w
ihel(j
为p=p>n-xte++;;
}
ji
(!f p| j|i>)r turneE RRR;O /第/个元素不存在
i=e-pd>ta; a /取第i/个素元
reutrn O;K
} //eGEtlme_L
L
ode *LNoatceEle_LmL(nikiLs L,EltemTpyee) { /算法2./8按值 找查
//在带结点头单链的L表中找查值为e的素
元NodeL*p;
=L->penxt;
hwile(&p&-p>ada!=e)
p=tp>-nxe; t // 找满寻足件条的点
结erutrnp ; /返回L/的值中e为数据元素的的置,位找失查败回返UNLL
}
// ocaLtElem_L
e
taSus tiLtDslete_eLLin(kLst &Li,nt i,iElmeTpe y&){ /e算/法.10 2单链表的除
删//
在头结点带的单链L表,中除第删个位i,置由e并回值
返
NLod *pe*,;
inqt j
;p
L;==j0;
w
ilh(pe->entx&& j iextn++j;}; / 寻/找i-第个结1
点if
!((-p>next)|| j>i-1) r etur ERnRRO;// 大于i长+1表或者于1小
q
=->pnet; x /临时/保存删被结点的址以备地释
p-放>ext=qn>ne-tx ;/ 改变删除/点结前结点的指驱针
域=e-qd>taa ; // 存删除结保点数据域的
dele
t e; q //释 删放结除点空间的
retur
n KO;
} / /isLDeltteeL
_
v
iodC erateiLt_FsL(nikLits &L,int n{ ) / 算法/2.1 1前插创法单建表
//逆链序位入n输个素元值的建,立到结头点的链单L表
NoLed* p;
L
=nw LeodN;e
L->
extnNUL=; L //先立一个建头带点结的空链表
ocu
fo
r(inti= ;n>i0--i;{)
=pew LnNode ; //生 成结点
新c
i>>p->datna ; //输元入素
值
->pnxet=->LenxtL-;>ext=n;p //插入 到表头
}
}
//rCeateiLstF
_
v
odi CerteLiastL_(Liknist LL&i,ntn {) //算法2.12 后插法建创链表
单//正位
输序n入个元素值的,立到建结头点单链的表
LL
oNe *r,*pd
;L=new
NLdoe;
-Lne>x=NtLU; L //建立一先带个结点的头链表空
r=L
; /尾/针r指指头向结
点c
otu
;
or(iftn i=;i0n;i+
pne= LNodw; e /生/新成结点
c
n>>pi>d-taa; / 输入元素值
/p->
enxtNU=L;rL>-enxtp;= //插 入到表
尾
r=p ; // 指r新的向尾结
点}
}
tStas LusitnIest(LrnkiiLts&L, niti,E lemyTe ep)
{LN
od *pe*,s;sne= wNoLde;
p=;Lint =0j;
whi
l(ep&&j(i-1
){=p->pexnt;++j;
}if(p|!j|>-i) ret1unr ERORR
;s
=nw LNedo;
e
s>da-t=a;e
s>nex-tp=>next-
;
->penxt=;s
retur
On;K
}
/C/reaetistLL_
int
mina)
({
int re
,s,a,cbohse;
oLodNe* ,*p;
cLuo
c;out
;cou
t
c
ut
c;ou
入cuo
;c
uto
cou
cho
oes-1=;
w
hie(cholose=!0)
{
cut
;ci>nc>hoso;e
sw
ith(ccohose)
{
caes1 : //建立 个单链表一
f(initList_ILL)(
)cuo
br
ek;a
cas
2e : / 使/后用插法建单创表链
C
reteLaitsL_L(10),;
c
uot
"
braek
;cas
e3: //单链表按序的查找号
oct
ci
>>a;
nif(G
tElem_eL(La,,res))
c
uto
nel
s
ec
out
brek;
acae s:4 //单链的按值查找
表co
u
;
cin>b;>
i
f(LoatcElem_eL(,L)!b=UNLL)
ocut
ele
sc
uto
br
ake
;
case 5:
oct
:
ic>n>>ab;
>
f(LisiInterts(,a,b))
coLt
;
esel
c
uot
"
rbea;
k
asc e6 : /单链表的删/
除cou
"in>>a;
cfiListDele(teL_L,(ar,se))
c
otu
els;
ceotu
rbaek
c;as e7 : /单链/表输的
出c
uto
\p=-L>exn;t
w
hiel(p)
{
ocuadta
ex;
t}
c
out
;
rebak
;
}
}
re
urtn0;
}