void CreatlistR(LinkNode * & L, ElemType a[], int n) //尾插法插入元素
{
LinkNode *s, *r;
L = new LinkNode;
r = L;
for (int i = 0; i < n; i++) //循环建立数据节点
{
s = new LinkNode;
s->data = a[i]; //创建数据节点s
r->next = s; //将节点s插入到节点r之后
r = s;
}
r->next = NULL;
}
void DispList(LinkNode * L) //输出单链表
{
LinkNode *p = L->next;
while (p != NULL)
{
printf("%c", p->data);
p = p->next; //下一个节点
}
printf("\n");
}
int ListLength(LinkNode * L) // 求单链表长度
{
int n = 0;
LinkNode *p = L; //p指向头节点
while (p->next != NULL)
{
n++;
p = p->next;
}
return n;
}
bool ListEmpty(LinkNode * L) //判断单链表是否为空
{
return (L->next == NULL);
}
bool GetElem(LinkNode * L, int i, ElemType &e) //输出指定位置的元素
{
int j = 0;
LinkNode * p = L;
if (i <= 0)
return false;
while (j < i && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
e = p->data;
return(e);
}
}int LocateElem(LinkNode * L,ElemType e) //查找值为e的元素的位置
{
int i = 1;
LinkNode *p = L->next;
while (p != NULL && p->data != e)
{
p = p->next;
i++;
}
if (p == NULL)
return(0);
else
return i;
}
bool ListInsert(LinkNode * & L, int i, ElemType e) //在指定位置插入元素
{
int j = 0;
LinkNode *p = L,*s;
if (i <= 0)
return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
s = new LinkNode;
s->next = p->next;
p->next = s;
return true;
}
}
bool ListDelete(LinkNode * & L, int i, ElemType e) // 删除指定位置的元素
{
int j = 0;
LinkNode *p = L, *q;
if (i <= 0)
return false;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
q = p->next;
if (q == NULL)
return false;
e = q->data;
p->next = q->next;
free(q);
return true;
}
}
void DestroyList(LinkNode * & L) //释放单链表
{
LinkNode *pre=L, *p = L ->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre ->next;
}
free(pre);
}