- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                9. 向线性表中按给定条件插入一个元素
存在三种情况:
1)当该函数的pos参数为0时,则需要实现在有序表上的插入,并且要保证插入新元素后仍为一个有序表。
2)当该函数的pos参数等于-1,要求把item插入到线性表的表尾,即第L.size+1的元素位置上。
    3)当该函数的pos参数为大于等于1,同时小于等于线性表长度加1时,则直接把item插入到线性表的第pos个元素的位置上。
注意事项:
在线性表的第pos个元素的位置插入一个新元素前,还要检查存储线性表的动态数组空间是否具有空闲位置,若没有,则要扩大原有的空间。
为了实现在第pos个元素的位置插入新元素,还要把从该位置开始的其后所有元素均后移一个位置,以便空出第pos个元素的位置,用于写入新元素。
完成插入后,要使线性表的长度域增1,然后返回真结束算法。
    根据以上分析编写出此算法如下:
        bool InsertList(List L, ElemType item, int pos)
        {
          //检查pos值是否有效,若无效则无法插入,返回假
            if(pos-1 || posL.size+1) {
                coutpos值无效!endl; return false;
            }
          //求出按值有序插入时item的插入位置,使之保存到pos中
            int i;
            if(pos==0) {
                for(i=0; iL.size; i++)
                    if(itemL.list[i]) break;
                pos=i+1;
            }
          //得到表尾插入位置,被保存在pos中
            else if(pos==-1) pos=L.size+1;
          //若线性表存储空间用完,则重新分配大一倍的存储空间
            if(L.size==L.MaxSize) {
                int k=sizeof(ElemType);  //计算每个元素存储空间的长度
                L.list=(ElemType*)realloc(L.list, 2*L.MaxSize*k);
                    //线性表动态存储空间扩展为原来的2倍,原内容不变
                if(L.list==NULL) {
                    cout动态可分配的存储空间用完,退出运行!endl;
                    exit(1);
                }
                L.MaxSize=2*L.MaxSize; //把线性表空间大小修改为新的长度
            }
          //待插入位置及所有后续位置元素,从后向前依次后移一个位置
            for(i=L.size-1; i=pos-1; i--)
                L.list[i+1]=L.list[i];
          //把item的值赋给已空出的、下标为pos-1的位置,它为第pos个元素位置
            L.list[pos-1]=item;
            L.size++;  //线性表长度增1
            return true;   //返回真表示插入成功
        }
    10. 从线性表中删除符合给定条件的第一个元素
    此算法同上面插入元素的算法类似,具体描述如下:
        bool DeleteList(List L, ElemType item, int pos)
        {
          //检查线性表是否为空,若是则无法删除,返回假
            if(L.size==0) {
                cout线性表为空,删除无效!endl;
                return false;
            }
          //检查pos值是否有效,若无效则无法删除,返回假
            if(pos-1 || posL.size) {
                coutpos值无效!endl; return false;
            }
      
                 原创力文档
原创力文档 
                        

文档评论(0)