第七章·线性表运算术式·单链表·其三

"对了查尔,你对昨天弗洛特术师的两个问题有思路吗?","有是有,但是时间太短了...根本不够准备的嘛",查尔沮丧到。"长话短说吧,想不想要那个面授机会?","傻子都想!",查尔脱口而出。查尔开玩笑道:"怎么,难道你解出来了?","略懂一二~","???",查尔的脸上写满了怀疑。"那么这样吧,我来帮你获得这个机会,但是你得帮我个忙"。

查尔看着我自信的样子道:"如果你真的做出来了,也不是不可以,在我所能范围之内我都会尽力帮你","那么我也选择相信你,这是题解..."。
PS:如果没看到之前的点击这里

"az,你竟然真的...,可你不想和弗洛特术师当面学习吗?","emmm怎么说呢,算了你还是不知道为好,现在是另一个问题,能帮我解决一下...住宿费的问题吗...刚来的本地,钱也用光了orz","额...,我猜你暂住在因特的旅馆吗?","?","考虑到你是外来的人,以及相遇的位置,差不多也就是那里了。对了,因特先生是我的舅舅,关于住宿费的问题,嘿嘿","..."(不可描述的心情),"那么就这么说定了~,快走吧,不然一会又没地方了","..."。

(快进到开始),"还好赶上了","...","你怎么不说话了?难道是想到什么不好的事情了吗?","没什么...我想静静...",”emmmm"。

(查尔回答的过程)"现在也没什么事干,不如把剩下的一块整理完吧",我翻开了书。

"那么下来是插入术式:

...
int insert(slink *head,int i,ElemType x){
首先是定义
slink *p,*q;
int j=0;
日常判断
if(i<1)return 0;
准备开始
p=head;
开始循环,和之前一样,条件略有变化
while (p!=NULL&&j<i-1)
{
    p=p->next;
    j++;
}
接着是未找到的判断
if(p==NULL)return 0;
下来就是分配空间了
q=(slink*)malloc(sizeof(slink));
写入
q->data=x;
修改
q->next=p->next;
连接
p->next=q;
返回结果
return 1;
}

”我对这个大概的思路是:首先建立ElemType类型的x,让q指向它。先是对位置合理性的判断。然后找到head上的第i-1个位置,让p指向它,之后在p指向的位置后插入q,具体操作分别对应术式中的 修改 和 连接,对于这个术式,其速度花费主要在查找上,故其速度类似O(n),图示如下:


单链表插入图示

emmm,还差一个输出?:

void lists(slink *head){
    cout<<endl;
    slink *p=head->next;
while (p!=NULL)
{
    cout<<p->data<<endl;
    p=p->next;
}
cout<<endl;
}

这个就简单多了,我对其的思路如下:从head的第一个位置开始,按照顺序往下走,直到终点为止。就先记到这里吧。"我合上了书,抬起头刚好看到弗洛特术师和查尔在交流些什么。

不过一会,查尔满脸激动的向我跑来。我已经猜到了结果。"你猜怎么着?",查尔兴奋到。
(跳过xxxxxxxxxxx)
"那么今天的宣讲就到这里了,这也是最后一次宣讲,希望诸位有所收获,早日晋升术师。",接着弗洛特术师又是一样的离去方式。

(中午)
"那没什么事情的话我就先回去了","今天多谢你了","...再(zhua)见(ba)","嗯,再见!"。

(回到旅馆)

//下来就是循环链表了,很快就到栈和队列了-2021.1.2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容