数据结构-顺序表

237 阅读1分钟

一.插入

1.指定位置插入

在i处插入一个元素x:

for(j=n-1;j>=i;j--)     //定义j为最有一个元素,逐步递减,直至j=i
    a[j+1] = a[j];      //右移,空出a[i]
a[i] = x;               //插入x
n++;                    //表长增加1

注:插入a[i]需要移动n-i个元素,故T(n)=n-i。

二、删除

1.指定位置删除

删除元素第i个位置的a[i]:

for(j=i;j<n-1;j++)       //注意j≠i+1
    a[j] = a[j+1];      //左移,覆盖a[i]
n--;                    //表长减一

注:共移动n-i-1个元素 三、查找

1.顺序查找

从左往右:

for(i=0;i<n;i++)
    if(a[i] == x)
        return(i);
return(-1);

从右往左:

for(i=n-1;i>=0;i--)
    if(a[i] == x)
        return(i);
return(-1);

注:T(n)=O(n)

监督元:在查找终点预留一个存储结点
int SQsearch(int a[],int x,int n){
    int i;
    i = n;      //查找起点
    a[0] = x;   //预置监督元
    while(a[i]!=x)
        i--;
    return i;
}

注:0为无效地址

2.二分查找

①递归算法:

int binary_search(int a[],int x,int left,int right){
    int mid;
    if(left>right)
        return -1;
    mid = (left+right)/2;       //定义mid的值
    if(x==a[mid])
        return mid;
    if(x<a[mid])
        return binary_search(a,x,left,mid-1);       //x的值在左端
    else
        return binary_search(a,x,mid+1,right);
}

②非递归算法:

int binary_search(int a[],int x,int n){
    int left,right,mid;
    left = 0;
    right = n-1;
    whlie(left<=right){
        mid = (left+right)/2;
        if(x==a[mid])   
            return mid;
        if(x<a[mid])
            right = mid-1;
        else
            left = mid+1;
    }
    return -1;
}

注:T(n)=O(logn)