关于C语言链表删除问题!急求热心的高手帮助!!!!!急急急!!! 10
structstudent*insert(head,stud)structstudent*head,*stud:{structstudent*p0,*p1,*p2;pl=...
struct student *insert(head,stud)
struct student *head,*stud:
{struct student *p0,*p1,*p2;
pl=head;/*使pl指向第一个结点*/
p0=stud;/*p0指向要插入的结点*/
if (head==NULL)/*原来是空表*/
{head=p0;p0一>next=NULL;}
else
{while ((p0一>num>pl一>num)&&(pl一>next!=NULL))
{p2=p1;p1=pl一>next;}
if(p0一>num>pl一>num)&&(pl一>next!=NULL)
{ p2->next=p0;
p0—>next=p1;}
if(p0一>num<pl一>num)
{
head=p0;
p0->next=p1;
}
if(p0一>num>pl一>num)&&(pl一>next=NULL)
{pl一>next=p0;p0一>next=NULL;}
n=n+1;
return(head);
}
问题1:我知道插入的位置有头结点之前,尾结点之后,还有就是两者之间。请问这个想法对不对。
问题2:循环遍历一遍只是对插入两者之间的算法起到作用吗?循环有什么用?
问题3:上面那个算法是我网上找的,但是写的不全,我就按我的思想补充的,可能错误很多,麻烦帮我修改下,要写注释的,要详细些!
最后要真诚的感谢各位了!
是链表插入操作,打错了标题! 展开
struct student *head,*stud:
{struct student *p0,*p1,*p2;
pl=head;/*使pl指向第一个结点*/
p0=stud;/*p0指向要插入的结点*/
if (head==NULL)/*原来是空表*/
{head=p0;p0一>next=NULL;}
else
{while ((p0一>num>pl一>num)&&(pl一>next!=NULL))
{p2=p1;p1=pl一>next;}
if(p0一>num>pl一>num)&&(pl一>next!=NULL)
{ p2->next=p0;
p0—>next=p1;}
if(p0一>num<pl一>num)
{
head=p0;
p0->next=p1;
}
if(p0一>num>pl一>num)&&(pl一>next=NULL)
{pl一>next=p0;p0一>next=NULL;}
n=n+1;
return(head);
}
问题1:我知道插入的位置有头结点之前,尾结点之后,还有就是两者之间。请问这个想法对不对。
问题2:循环遍历一遍只是对插入两者之间的算法起到作用吗?循环有什么用?
问题3:上面那个算法是我网上找的,但是写的不全,我就按我的思想补充的,可能错误很多,麻烦帮我修改下,要写注释的,要详细些!
最后要真诚的感谢各位了!
是链表插入操作,打错了标题! 展开
展开全部
问题1:基本思路正确,但是在实际应用中,头结点head是不存放数据的,因为这样不便于操作,需要额外讨论插入在头结点之前的情况,而且头结点很多时候要用在二维数组上,所以不建议加入数据
问题2:插入到结尾也需要遍历,p1l遍历到尾节点然后pl->next = stud就行了
问题3:首先只需要2个游标指针就够了,分别指向要插入位置的前后节点
以下程序按照头结点无数据来编写:
struct student *insert(head,stud)
{
struct student pl=head, pb;/*使pl指向要插入位置的后一个节点,pb指向要插入的位置的前一个节点*/
int flag = 0; /*判断是不是遍历完还没有插入节点stud*/
while(pl->next != NULL)
{
pb = pl;
pl = pl->next;
if(pl->num > stud->num)//找到插入点
{
pb->next = stud;
stud->next = pl;//形成链pb->stud->pl
flag = 1;
break;
}
}
if(flag != 0)//插入链表末尾
{
pl->next = stud;
stud->next = NULL;
}
问题2:插入到结尾也需要遍历,p1l遍历到尾节点然后pl->next = stud就行了
问题3:首先只需要2个游标指针就够了,分别指向要插入位置的前后节点
以下程序按照头结点无数据来编写:
struct student *insert(head,stud)
{
struct student pl=head, pb;/*使pl指向要插入位置的后一个节点,pb指向要插入的位置的前一个节点*/
int flag = 0; /*判断是不是遍历完还没有插入节点stud*/
while(pl->next != NULL)
{
pb = pl;
pl = pl->next;
if(pl->num > stud->num)//找到插入点
{
pb->next = stud;
stud->next = pl;//形成链pb->stud->pl
flag = 1;
break;
}
}
if(flag != 0)//插入链表末尾
{
pl->next = stud;
stud->next = NULL;
}
展开全部
程序有问题的,注意大括号,if(p0一>num>pl一>num)&&(pl一>next=NULL)中的后一个改为“==”,能看懂吧?呵呵,简写了,相信你能看懂的。
程序的算法是没有问题的,思路就是按这样来的,主要是程序的规范问题,建议你运行下,看出什么错误,然后仔细看看。希望对你有所帮助。
程序的算法是没有问题的,思路就是按这样来的,主要是程序的规范问题,建议你运行下,看出什么错误,然后仔细看看。希望对你有所帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-08-08
展开全部
代码有,完全无误。
可是回答了几个代码问题,没有一个给分和给推荐的!
伤心,失望,木意思……
可是回答了几个代码问题,没有一个给分和给推荐的!
伤心,失望,木意思……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询