2.单链表各种基本操作(函数原型)

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);
}

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页