又是新的一天,我看向了窗子-从阳光的角度来看现在还很早。
那么趁着现在,康康后续的还有什么,我翻开了书。"让我康康,嗯,链表",那么来解析一下
此句的含义在于便于修改类型
typedef int ElemType;
...
typedef struct node{
那么,这个就是数据域了
ElemType data;
这个是定义指针域
struct node *next;
...
}slink;
"看起来也就emmm,比顺序表少一个结构体?!","那么它的作用是在...某个'数据元素'附属国之后..."(常用操作为:在某个单元(结点)后插入一个新结点,删除某一个结点的后继的结点)
"那么按照之前的样子,先是建立:
slink *createslink(int n){
slink *head,*p,*s;
if(n<1)
return NULL;
p=head=(slink*)malloc(sizeof(slink));
for(int i=1;i<=n;i++){
s=(slink*)malloc(sizeof(slink));
cin>>s->data;
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
//dalao们要是已经看懂的话建议下面的可以跳了,后面的是对代码的注释和解析
//这个p->next=s;p=s;我实在是...之后会做详细补充说明,我真聪(fei)明(wu)QWQ-2020.12.31
好吧我放弃..."(停止思考.jpg)。那么之后是:
int getLenS(slink *head){
slink *p;
int n=0;
p=head->next;
while(p!=NULL){
n++;
p=p->next;
}
return n;
}
"...,沐露,这...","ez,看好了,以创建术式为例:
创建n个
slink *createslink(int n){
先是定义
slink *head,*p,*s;
之后是对创建数目的判断
if(n<1)
return NULL;
接下来,是对区域的划分,head作为起点,然后p作为"使者"
p=head=(slink*)malloc(sizeof(slink));
接着是按照先前来建立整个联系
for(int i=1;i<=n;i++){
首先是建立第一个区域
s=(slink*)malloc(sizeof(slink));
在这个区域内xxxxx
cin>>s->data;
之后开始交替
p->next=s;
p=s;
}
在最后时,p-next仍然是自己,那么清空它
p->next=NULL;
最后把结果传上去
return head;
}
那么下来是统计:
...
int getLenS(slink *head){
首先是定义
slink *p;
int n=0;
p=head->next;
那么下来让p进行统计
while(p!=NULL){
n++;
交替
p=p->next;
}
最后把结果传上去
return n;
}
"原来如此,那么该去吃早饭了...算了,可能来不及了,直接去和查尔会面吧
(下楼)(打招呼)(赶路)
//下来是对上述算法的解析分析
以我的理解,图如下所示:
由于是对head进行操作,head身为头指针,并无数据域所以应该从L->next开始。
关于p->next=s;p=s;我的理解如下:
按照我的理解,这是一个循环,每次将当前操作的复制完成后,将指针再指向自己,也就相当于初始化,然后开始下一次,直到最后结束后,p->next=NULL;用来标记结束。
//之后应该会有添加-2020.12.31
//那么今年就更新到这里了,祝大家在新的一年里()XD