void InsertList(LinkList L,int e) { if(L==NULL) { printf("线性表为空"); return ERROR; } int i=0; Node *s,*p,*ptr; s=(Node *)malloc(sizeof(Node)); p=L; s->data=data; while((p->data<data)&&(p->next!=NULL)) { ptr=p; p=p->next; i++; } if(p->data>=data) { if(p=L) { s->next=p; L->next=s; } else { s->next=p; ptr->next=s; } } else { p->next=s; s->next=NULL; } printf("插入成功"); }
这个是别人的代码 本人着实看不懂是什么意思!
1.while((p->data<data)&&(p->next!=NULL))中p->data<data是什么意思啊?
2.ptr=p;为什么要引入ptr啊?
4.if(p->data>=data)这个又是什么?
然后为什么又要分出来p=L的情况?
好蒙圈 啊 !
10
PS:而且21行少了个=
2
3
你不懂的是p->data < data ? 这句么?
3
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂
p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
3
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
刚才看错了 不是if 语句 是while里面 其实都是一样的 while(表达式){ } 当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环
3
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
刚才看错了 不是if 语句 是while里面 其实都是一样的 while(表达式){ } 当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环
那后面怎么又出来一个p->data>=data呢?是它为假跳出循环时的条件嘛?
根据你这个代码 本人感觉是对一个已有的有序链表进行有序插入, 所以需要对插入数据 进行大小判断。
前面的循环是用来定位当前数据该插入的数据, 例如你对1 3 5 7 9 这个链表要进行插入, 插入数据为6 他就先需要逐一判断
1357然后把数据插入到5和7之间, 最后的那个if 是用来判断链表末尾的,也就是说 假如你插入的数据,比链表里全部的数据都大,则把它放在最后一项。
3
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
楼上正解, data 根本没有被定义, e 也没有被使用, 估计是形参写错了 代码本身有问题。 把e改成data 应该就能看懂了吧
void InsertList(LinkList L,int e)
en 是的 形参本人打错了 但是改成data 还是不太懂p->data < data 就是把你传进来的形参数据 data 和指针p 所指向的 链表中的 数据 进行对比, 假如 p 指向的数据 小于 形参传进来的数据 则进到if语句里面(当然 p->data < data 只是其中一个条件)
刚才看错了 不是if 语句 是while里面 其实都是一样的 while(表达式){ } 当while 小括号里面的表达式 为真时 就会一直循环 直到表达式的值为假时 才会跳出循环
那后面怎么又出来一个p->data>=data呢?是它为假跳出循环时的条件嘛?
根据你这个代码 本人感觉是对一个已有的有序链表进行有序插入, 所以需要对插入数据 进行大小判断。
前面的循环是用来定位当前数据该插入的数据, 例如你对1 3 5 7 9 这个链表要进行插入, 插入数据为6 他就先需要逐一判断
1357然后把数据插入到5和7之间, 最后的那个if 是用来判断链表末尾的,也就是说 假如你插入的数据,比链表里全部的数据都大,则把它放在最后一项。
最后的那个if(p->data >=data) 是在循环外面的 所以不是跳出循环。(循环的有效范围是循环本身的{} )
6