@bluebelief 发表于 2016-5-31 12:41:34

线性表问题

望大神解释一下

不知道叫什么 发表于 2016-5-31 13:19:03

第一个问题linklist CreateLinkList()
{
    linklist head = NULL;//这里初始化头指针
    linklist s, r;
    int i;

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

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

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

      r = s;
    }

    r->next = head;

    return head;
}
第二个问题不太懂在问啥……
r=head;//这句是把r指向头指针
head->next=s;/*这句是用头插法把结点插入链表*/
原来的代码是用r作遍历,不断向后插入结点,到最后r指向的是插入的最后一个结点,r->next=head是把这个链表写成循环链表。
要是你写的那种头插法的话你的r一直都指向的是头结点,head也一直都指向的头结点,那尾部的结点貌似就没办法链接了……

fanzhihao 发表于 2016-10-20 12:35:42

链表插入有两种,头插法和尾插法;
楼上说的没错,头插法简单:不用r,每次循环直接head->next=s;s->next=head->next;就行了!
尾插法必须引入新变量;
有那个判断语句,意思是也要给头节点head初始化即分配内存,数据为空等等。S=head,意思就是S就是头节点开始了。
如果不要这个判断,head定义之后,也应该分配内存malloc,S直接赋值,S就是首节点开始(首节点:第一个存储数据的结点)。
你这个链表就是全部为0了;

fanzhihao 发表于 2016-10-20 12:36:57

说错了。应该先s->next=head->next;head->next=s;对不对?

geekerr 发表于 2017-2-8 12:44:30

楼主,能给清楚点的吗
页: [1]
查看完整版本: 线性表问题