首页 > 其他 > 详细

数据结构_线性表之顺序表(2)

时间:2020-08-11 23:32:02      阅读:97      评论:0      收藏:0      [点我收藏+]

此处记录常见的顺序表题目。

(1)顺序表--对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。

下面给出了C++与C的解法。

算法思想:1.定义i,j变量,i变量用来指示顺序表的下标,用于指示所有元素,j元素用来保存目的顺序表长度,并用来指示下一个可以存储合法数据的位置。

2.遍历顺序表所有元素,当数据不是x时,则把合法数据加入线性表,j变量加1。

3.当遍历到的数据为x时,则不去理会,继续执行下次操作。

总结:简单说,就是合法数据加入顺序表,顺序表长度加一。

例子:

技术分享图片

 

 

 

/*对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素*/
#define MAXSIZE 50
typedef int ElemType;
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}SqList;
//1.C语言
bool Del_x_1(SqList *L,ElemType x){//这里给进结构体的指针,因为要改变原结构体内顺序表的值,给进指针会更方便一些,速度上也会快一些。
    int i,j;
    if(L->length==0)
        return false;
    for(i=0,j=0;i<L->length;i++)
        if(L->data[i]!=x)
            L->data[j++]=L->data[i];//注意这里i不要++,因为i是由循环体控制的
    L->length=j;//length是计算的个数,从1开始算起,所以j++后,作为长度是正好的
    return true;
}
//2.C++语言
bool Del_x_1(SqList &L,ElemType x){//这里给进结构体的指针,因为要改变原结构体内顺序表的值,给进指针会更方便一些,速度上也会快一些。
    int i,j;
    if(L.length==0)
        return false;
    for(i=0,j=0;i<L.length;i++)
        if(L.data[i]!=x)
            L.data[j++]=L.data[i];//注意这里i不要++,因为i是由循环体控制的
    L.length=k;//length是计算的个数,从1开始算起,所以j++后,作为长度是正好的
    return true;
}

 

数据结构_线性表之顺序表(2)

原文:https://www.cnblogs.com/hmy-666/p/13486460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!