#include "global.h"
typedef
struct
LNode
{
ElemType
data;
struct
LNode
*next;
}
LNode
,*
LinkList
;
Status GetElem_L(
LNode
L
,
int
i
,
ElemType
&
e
)
//L为带头结点的单链表的头指针
{
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
int
j=1;
LNode
*p=
L
.next;
while
(j<
i
&& p)
//j++不能写在while语句里面 否则当i==1时会造成 return ERROR
{
++j;
p=p->next;
}
if
(!p || j>
i
)
//j>i是为了排除i小于1的情况
return
ERROR
;
else
e
=p->data;
return
OK
;
}
Status
ListInsert_L(
LinkList
L
,
int
i
,
ElemType
e
)
//在线性表第i个位置前插入元素e
{
int
j=0;
LNode
*p=
L
;
while
(j<
i
-1 && p)
//j++不能写在while语句里面 否则当i==1时会造成 return ERROR
{
j++;
p=p->next;
}
if
(!p || j>
i
-1)
//i小于1或者大于表长加1
return
ERROR
;
LNode
*q;
q=(
LinkList
)malloc(
sizeof
(
LNode
));
if
(!q)
return
OVERFLOW
;
q->data=
e
;
q->next=p->next;
p->next=q;
return
OK
;
}
Status
InitList_L(
LinkList
L
)
{
L
->next=
NULL
;
return
OK
;
}
Status
Listdisplay_L(
LNode
L
)
{
int
i=1;
LNode
*p=
L
.next;
while
(p)
{
printf(
"%3d "
,p->data);
p=p->next;
if
(i++%10==0)
putchar(
'\n'
);
}
return
OK
;
}