鱼C论坛

 找回密码
 立即注册
查看: 3521|回复: 4

线性表问题

[复制链接]
发表于 2016-5-31 12:41:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

大神解释一下

大神解释一下
望大神解释一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-31 13:19:03 | 显示全部楼层
第一个问题
  1. linklist CreateLinkList()
  2. {
  3.     linklist head = NULL;//这里初始化头指针
  4.     linklist s, r;
  5.     int i;

  6.     r = head;r指向头指针指向的地方

  7.     for(i=1; i <= CardNumber; i++)
  8.     {
  9.         s = (linklist)malloc(sizeof(sqlist));//为结点分配空间
  10.         s->data = 0;//初始化节点的data域,赋值为0

  11.         if(head == NULL)//第一次做for循环时,头节点指向为空,所以执行head头指针指向s这个结点
  12.             head = s;
  13.         else
  14.                         //第二次再执行for循环,head已经指向s这个结点,不为空,所以进行判断是因为要把两种情况分开
  15.                         //1、head指向第一个结点时
  16.                         //2、head指向不为空的时候
  17.             r->next = s;

  18.         r = s;
  19.     }

  20.     r->next = head;

  21.     return head;
  22. }
复制代码

第二个问题不太懂在问啥……
  1. r=head;//这句是把r指向头指针
  2. head->next=s;/*这句是用头插法把结点插入链表*/
复制代码

原来的代码是用r作遍历,不断向后插入结点,到最后r指向的是插入的最后一个结点,r->next=head是把这个链表写成循环链表。
要是你写的那种头插法的话你的r一直都指向的是头结点,head也一直都指向的头结点,那尾部的结点貌似就没办法链接了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-20 12:35:42 | 显示全部楼层
链表插入有两种,头插法和尾插法;
楼上说的没错,头插法简单:不用r,每次循环直接head->next=s;s->next=head->next;就行了!
尾插法必须引入新变量;
有那个判断语句,意思是也要给头节点head初始化即分配内存,数据为空等等。S=head,意思就是S就是头节点开始了。
如果不要这个判断,head定义之后,也应该分配内存malloc,S直接赋值,S就是首节点开始(首节点:第一个存储数据的结点)。
你这个链表就是全部为0了;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-20 12:36:57 | 显示全部楼层
说错了。应该先s->next=head->next;head->next=s;对不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 12:44:30 | 显示全部楼层
楼主,能给清楚点的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表