数据结构尾插法怎么变成头插法?删除数据元素要不要跟着改? 5
boolListInsert(LinkList*&L,inti,ElemTypee)//插入数据元素{intj=0;LinkList*p=L,*s;//p指向头节点,j置...
bool ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0;
LinkList *p=L,*s; //p指向头节点,j置为0(即头节点的序号为0)
while (j<i-1 && p!=NULL) //查找第i-1个节点
{ j++;
p=p->next;
}
if (p==NULL) //未找到第i-1个节点,返回false
return false;
else //找到第i-1个节点*p,插入新节点并返回1
{ s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; //创建新节点*s,其data域置为e
s->next=p->next; //将*s插入到*p之后
p->next=s;
return true;
}
}
bool ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0;
LinkList *p=L,*q; //p指向头节点,j置为0(即头节点的序号为0)
while (j<i-1 && p!=NULL) //查找第i-1个节点
{ j++;
p=p->next;
}
if (p==NULL) //未找到第i-1个节点,返回false
return false;
else //找到第i-1个节点*p
{ q=p->next; //q指向第i个节点
if (q==NULL) //若不存在第i个节点,返回false
return false;
e=q->data;
p->next=q->next; //从单链表中删除*q节点
free(q); //释放*q节点
return true; //返回true表示成功删除第i个节点
}
} 展开
{
int j=0;
LinkList *p=L,*s; //p指向头节点,j置为0(即头节点的序号为0)
while (j<i-1 && p!=NULL) //查找第i-1个节点
{ j++;
p=p->next;
}
if (p==NULL) //未找到第i-1个节点,返回false
return false;
else //找到第i-1个节点*p,插入新节点并返回1
{ s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; //创建新节点*s,其data域置为e
s->next=p->next; //将*s插入到*p之后
p->next=s;
return true;
}
}
bool ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0;
LinkList *p=L,*q; //p指向头节点,j置为0(即头节点的序号为0)
while (j<i-1 && p!=NULL) //查找第i-1个节点
{ j++;
p=p->next;
}
if (p==NULL) //未找到第i-1个节点,返回false
return false;
else //找到第i-1个节点*p
{ q=p->next; //q指向第i个节点
if (q==NULL) //若不存在第i个节点,返回false
return false;
e=q->data;
p->next=q->next; //从单链表中删除*q节点
free(q); //释放*q节点
return true; //返回true表示成功删除第i个节点
}
} 展开
1个回答
展开全部
尾插法删除节点一样的,找到要删除的那个节点跟它的前一个节点,删除即可。
头插法:
bool ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0;
LinkList *p=L,*s; //L是头节点
if(L->next == NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; //创建新节点*s,其data域置为e
s->next=p->next; //将*s插入到*p之后
s->next=NULL;
L->next = s;
return true;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->next = L->next; //头插法将要插入的元素放在头节点后面
L->next = s;
}
头插法:
bool ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0;
LinkList *p=L,*s; //L是头节点
if(L->next == NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; //创建新节点*s,其data域置为e
s->next=p->next; //将*s插入到*p之后
s->next=NULL;
L->next = s;
return true;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->next = L->next; //头插法将要插入的元素放在头节点后面
L->next = s;
}
追问
输出线性表也要改
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询