1.单链表的存储结构
struct LNode{
ElemType date;
LNode *next;
};
typedef LNode *LinkList;
2.构建一个空的线性表 L
void InistList(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
if(L == NULL)
exit (OVERFLOW);
L -> next = NULL;
}
3.销毁线性表 L
void DestoryList(LinkList &L)
{
LinkList q;
while(L)
{
q = L -> next;
free(L);
L = q;
}
}
4.将表 L 设置为空表
void ClearList(LinkList L)
{
LinkList p = L -> next;
L -> next = NULL;
DestoryList(p);
}
5.判断表 L 是否为空
Static isEmpty(LinkList L)
{
if(L -> next == NULL)
return FALSE;
else
return true;
}
6.求表 L 的长度
int getLength(LinkList L)
{
int len=0;
LinkList p = L->next;
while(p)
{
len++;
p = p->next;
}
return len;
}
7.取出第 i 个元素
ElemType getElem(LinkList L, int i,ElemType &e)
{
LinkList p = L->next;
int j=1;
while(p&&j<i)
{
j++;
p=p->next;
}
if(!p||j>i)
return ERROR;
e=p->date;
return OK;
}
8.找出元素 e 在表中的位置
int getLocation(LinkList L,ElemType e)
{
int i=0;
LinkList p = L -> next;
while(p)
{
i++;
if(p->date == e)
return i;
p = p -> next;
}
return 0;
}
9.找出元素 e 在表中前一个元素
Static getPrior(LinkList L,ElemType e,ElemType &pre_e)
{
LinkList q,p=L->next;
while(p->next)
{
q=p->next;
if(q->date== e)
{
pre_e=p->date;
return OK;
}
p=q;
}
return ERROR;
}
10.找出元素 e 在表中后一个元素
Static getNext(LinkList L,ElemType e, ElemType &next_e)
{
LinkList p=L->next;
while(p->next)
{
if(p->date == e)
{
next_e = p->next->date;
return OK;
}
p=p->next;
}
return ERROR;
}
11.在表中第 i 个位置插入元素 e
Static ListInsert(LinkList L,int i,ElemType e)
{
LinkList p=L;
int count=0;
while(count<i-1&&p)
{
p=p->next;
count++;
}
if(count > i-1||!p)
return ERROR;
LinkList q = (LinkList)malloc(sizeof (LNode));
q->date=e;
q->next=p->next;
p->next=q;
return OK;
}
12.在表中第 i 个位置删除元素 e
Static ListDelete(LinkList L,int i,ElemType &e)
{
LinkList q,p=L;
int count=0;
while(count<i-1&&p->next)
{
p=p->next;
count++;
}
if(count>i-1||!p->next)
return ERROR;
q=p->next;
e=q->date;
p->next=q->next;
free(q);
return OK;
}
13.打印表
void visitList(LinkList L)
{
LinkList p=L->next;
while(p)
{
printf("%d\n",p->date);
p=p->next;
}
putchar('\n');
}