美文网首页
线性表算法设计题(九)

线性表算法设计题(九)

作者: 搬砖的猫 | 来源:发表于2019-10-27 19:52 被阅读0次

题目

已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。

算法思想

用k记录顺序表A中不等于item的元素个数,k初始为0.可以采用类似建立顺序表的思想,从前向后遍历顺序表,查找值不为item的元素,如果找到,则利用原表的空间记录值不为item的元素,同时是k增1。遍历结束后,顺序表中前k个元素即为值不为item的元素,最后将顺序表的长度置为k。

完整代码

#include <iostream>
using namespace std;

//已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。

#define MAXSIZE 100
typedef int ElemType;
typedef struct{ 
    ElemType *elem;                 //存储空间的基地址 
    int length;                     //当前长度 
}SqList;                            //顺序表的结构类型为SqList 
 
//创建
void CreateList(SqList &L)
{
    int i;
    L.elem = new ElemType[MAXSIZE];
    if(! L.elem){
        cout << "ERROR!" << endl;
    }
    cout << "请输入线性表的长度:" << endl; 
    cin >> L.length;
    cout << "请依次输入表中元素:" << endl;
    for(i = 0; i < L.length; i ++){
        cin >> L.elem[i];
    }
    //cout<<"创建完成!"<<endl;
}
 
void DeleteItem(SqList &A, ElemType item){
    //删除顺序表A中所有值为item的元素 
    int k = 0;                               //k记录值不等于item的元素个数 
    for(int i = 0; i < A.length; i ++){      //从前向后扫描顺序表 
        if(A.elem[i] != item){               //查找值不为item的元素 
            A.elem[k] = A.elem[i];           //利用原表的空间记录值不为item的元素 
            k ++;                            //不等于item的元素增1 
        }
    }
    A.length = k;                            //顺序表A的长度等于k 
}


//输出表
void display(SqList L)
{
    int i;
    cout << '[';
    for(i = 0; i <L.length; i ++){
        if(i == L.length-1){
            cout << L.elem[i];
        }
        else{
            cout << L.elem[i] << ',';
        }
    }
    cout << ']' << endl;
}

int main(){
    SqList L;
    int item;
 
    CreateList(L);
    cout << "当前线性表为:" << endl;
    display(L);
 
    cout << "请输入需要删除的item值:" << endl;
    cin >> item;
 
    DeleteItem(L,item);
 
    cout << "选择删除后线性表为:" << endl;
    display(L);

    return 0;
}

结果显示

TIM图片20191027195144.png

相关文章

  • 线性表算法设计题(九)

    题目 已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删...

  • 线性表算法设计题(六)

    题目 设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。 算法思想 在遍历的时候利用指针pmax记录值...

  • 线性表算法设计题(七)

    题目 设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复...

  • 线性表算法设计题(八)

    题目 设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,...

  • 线性表算法设计题(五)

    题目 设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而...

  • 线性表算法设计题(二)

    题目 将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的...

  • 线性表算法设计题(三)

    题目 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并存放在A链表中。...

  • 线性表算法设计题(四)

    题目 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的差集(即仅由在A中出现而...

  • 线性表算法设计题(一)

    题目 将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储...

  • 2019-05-26

    今天看数据结构中线性表,还有算法设计与分析,

网友评论

      本文标题:线性表算法设计题(九)

      本文链接:https://www.haomeiwen.com/subject/plsmvctx.html