关于严蔚敏C语言版数据结构算法2-4的疑问

关于严蔚敏C语言版数据结构算法2-4的疑问,第1张

1、newBase

=

(ElemType

*)

realloc

(L.elem,

(L.listsize

+

LISTINCREMENT)

*

sizeof(ElemType))

//为初始

顺序表

以LISTINCREMENT

大小

重新增加存储空间,如果去掉L.elem,则新增

空间

的对象不明。

2、增加分配的

代码

意思是,在当前分配空间不足时加ListIncrement大小的空间,不够再加,一直加到空间够用为止,于是就保证了分配的空间足够用了。3、顺序表是从0号位置开始计数的,所以

长度

为Length顺序表最后一位为Length-1,同样,第i个

元素

的位置也就为[i-1]了。4、

源代码

段寻找位置的

原理

是先让一个

指针

q指向要插入数的位置,指针p指向表尾[Length-1],然后比较p,q的值,如果p>=q,就把p指向的元素向后挪一位[Length](也就是表长加1了),P就指向倒数第二个[Length-2]位置;再用p,q做个比较,如果p仍然大于或等于q,那么继续吧p指向的数向后挪一位[Length-1],p又指向下一个数[Length-3],以此内推,

直到最后

p指向第[i-2]那位,此时第[i-1]就为空的,正好把要插入的数插进去。你所给的

算法

,首先把位置和长度都搞错了,你的意思可能是这样的吧:for(p=&L.elem[i-1]p<=&L.elem[L.length-1]++p)

{

*(p+1)=*p

Length++}如果是这样的话,那不仅你要插的元素插不进去,反而把从[i-1]位置开始后面所有的元素都被复制成了L.elem[i-1]相同的元素了。

数据结构(C语言版)》(严蔚敏)电子书网盘下载免费在线阅读

资源链接:

链接:https://pan.baidu.com/s/1BmtD5k3mLtJZO36Xw_Hq3w

密码:5dfz  

书名:数据结构(C语言版)

作者:严蔚敏

豆瓣评分:6.1

出版社:清华大学出版社

出版年份:2012-5

页数:335

内容简介:

《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。

本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。其内容和章节编排1992年4月出版的《数据结构》(第二版)基本一致,但在本书中更突出了抽象数据类型的概念。全书采用类C语言作为数据结构和算法的描述语言。

本书概念表述严谨,逻辑推理严密,语言精炼,用词达意,并有配套出版的《数据结构题集》(C语言版),便于教学,又便于自学。

本书后附有光盘。光盘内容可在DOS环境下运行的以类C语言描述的“数据结构算法动态模拟辅助教学软件,以及在Windows环境下运行的以类PASCAL或类C两种语言描述的“数据结构算法动态模拟辅助教学软件”。

本书可作为计算机类专业或信息类相关专业的本科或专科教材,也可供从事计算机工程与应用工作的科技工作者参考。

作者简介:

严蔚敏 清华大学计算机系教授,长期从事数据结构教学和教材建设,和吴伟民合作编著的《数据结构》曾获“第二届普通高等学校优秀教材全国特等奖”和“1996年度国家科学技术进步奖三等奖”。

吴伟民 广东工业大学计算机学院副教授,硕士生导师。广东省计算机学会图像图形分会秘书长。长期从事数据结构教学和系列教材建设。主要研究领域:数据结构和算法、可是计算、编译和虚拟机技术、智能系统等。和严蔚敏合作编著的《数据结构》曾获“第二届普通高等学校优秀教材全国特等奖”和“1996年度国家科学技术进步奖三等奖”。

这就是简单的两路归并(merge),要深入学习多百度一下。算法导论有清晰的图解。

归并La,Lb,我自己的代码如下。

void MyMerge(int La[],int len_a,int Lb[],int len_b,int Lc[])

{

    //len_a,len_b是两个数组长度

    int i=0,j=0,k=0

    while(i<len_a && j<len_b)

    {

        if(La[i]<L[j])  //La中比Lb小,则把La中赋给Lc,然后比较下一个i

        {

            Lc[k]=La[i]

            i++

            k++

        }

        else            //La中不比Lb小,则把Lb中赋给Lc,然后比较下一个j

        {

            Lc[k]=Lb[j]

            j++

            k++

        }

    }

    if(i<len_a)         //La长度比较长

    {

        while(i<len_a)  //把La中余下的赋给Lc

        {

            Lc[k]=La[i]

            k++

            i++

        }

    }

    if(j<len_b)         //Lb长度比较长

    {

        while(j<len_b)  //把Lb中余下的赋给Lc

        {

            Lc[k]=Lb[j]

            k++

            j++

        }

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7758822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存