| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 488 人关注过本帖
标题:求助《链表结点插入》
只看楼主 加入收藏
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:3 
求助《链表结点插入》
帮忙讲解下结点插入时指针的移动过程!
#include<stdio.h>
#include<stdlib.h>
#define NEW (SLIST *)malloc(sizeof(SLIST))
typedef struct node
{
 int date;
 struct node *next;
}SLIST;
SLIST *creat_slist()
{
 SLIST *p,*r,*s;
 int c;
 p=NEW;
 r=p;
 printf("请输入数字当输入-1是停止输入!\n");
 scanf("%d",&c);
 while(c!=-1)
 {
  s=NEW;
  s->date=c;
  r->next=s;
  r=s;
  scanf("%d",&c);
 }
 r->next='\0';
 return p;
}
void print_slist(SLIST *h)
{
 SLIST *p;
 p=h->next;
 if(p=='\0') printf("link_slist is null!\n");
 else
 {
  printf("head");
  do
  {printf("->%d",p->date);
  p=p->next;
  }while(p!='\0');
  printf("end\n");
 }
}
void insert_slist(SLIST *head,int x,int y)
{
 SLIST *p,*q,*s;
 s=NEW;
 s->date=y;
 p=head;
 q=head->next;
 while(q!='\0'&&q->date!=x)
 { p=q;q=q->next;}
 s->next=q;            /*请帮忙讲解下这里指针的移动过程*/
 p->next=s;
}
void main()
{
 SLIST *head;
 int x,y;
 printf("请输入查找数;\n");
 scanf("%d",&x);
 printf("请输入要插入的数:\n");
 scanf("%d",&y);
 head=creat_slist();
 print_slist(head);
 insert_slist(head,x,y);
 print_slist(head);
}
搜索更多相关主题的帖子: 链表结点插入 
2010-03-04 12:08
林语
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:184
注 册:2009-8-29
收藏
得分:0 
经过while循环之后q指向date值为x的节点,而p指向q的上一个节点,也就是说现在要在p和q之间插入节点s
s->next=q;    此语句使得要插入节点s的下一个节点是q,(现在p和s所指节点的下一个节点都是q)
p->next=s;    此语句使得p指向的节点的下一个节点是s,(现在p所指节点的下一个节点是s所指节点,而s所指节点的下一节点是去所指节点)这样s就插在了p和q之间,也就是把数y插在了数x的前面
2010-03-04 13:40
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
收藏
得分:0 
回复 2楼 林语
为什么插在p和q之间就是插在值为x之前啊。。要是没有值为x的结点那么值为y的结点还是在插在p和
q之间吗,或者。。。。。。
2010-03-04 18:24
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:20 

while(q!='\0'&&q->date!=x)
{ p=q;q=q->next;}
只有当(1)q->date为x时,或(2)q为NULL时结束循环(链表无节点的值是x)
p是q的前 一个节点
第(1)种情况,将y插入到p q之间,当然就是x之前
第(2)种情况,实际仍然是播放到p q之间。而q是NULL所以就是插入到最后

[ 本帖最后由 cnfarer 于 2010-3-4 19:36 编辑 ]

★★★★★为人民服务★★★★★
2010-03-04 19:35
快速回复:求助《链表结点插入》
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014608 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved