2019-04-04 考研-线性表-顺序表

#include
#define MaxSize 50
typedef int Elemtype;
typedef struct {
    Elemtype data[MaxSize];
    int length;
}SqList;
int main(void)
{
    return 0;
}
*******************************************
#define InitSize 100;
typedef struct {
    ElemType *data;
    int MaxSize,length;
}SqList; 
******************************************* 

bool ListInsert(SqList &L,int i,Elemtype e)
{
    if(i<1 || i>L.length+1) return false;
    if(L.length>=MaxSize) return false;
    for(int j=L.length;j>=i;j--) 
        L.data[j]=L.data[j-1];
    L.data[i-1]=e;
    L.length++;
    return true;    
} 
******************************************** 
bool ListDelete(SqList &L,int i,int e)
{
    if(i<1 || i>L.length) return false;
    e = L.data[i-1];
    for(int j=i;j=t) return false;
    for(int i=0;i=s && L.data[i]==t || L.length==0) return false;
    for(i=0;i=L.length) return false;
    for(j=i;j=t ) return false;
    for(i=0;it)
            L.data[k++]=L.data[i];
    L.length=k;
    return true;
}
答案:
bool Del(SqList&L,Elemtype s,Elemtype t)
{
    int k=0,i=0;
    if( L.length==0 || s>=t ) return false;
    for(int i=0;i=s && L.data[i]<=t ) k++;
        else L.data[i-k]=L.data[i];
    L.length-=k;
    return true;
}
018页6题
void removeRepeat(SqList&L)
{
    int k=1; 
    if(L.length==0) return ;
    for(int i=1;iC.MaxSize) return false;
    //线性表处理需要注意存储空间的大小
    
    int i=0,j=0,k=0; 
    while( i= right || right >= arraySize ) return ;
    int mid = (left+right)/2;
    for(int i=0;i<=mid-left;i++)
    {
        DataType temp = A[left+i];
        A[left+i]=A[right-i];
        A[right-i]=temp;            
    }  
} 
void Exchange(DataType A[],int m,int n,int arraySize)
{
    reverse(A,0,m+n-1,arraySize);
    reverse(A,0,n-1,arraySize);
    reverse(A,n,m+n-1,arraySize);
}
018页9题
//  牢记三要素 
bool find(SqList &L,ElemType x)
{
    if( L.length == 0 ) return false;
    
    int left=0,right=L.length-1;
    //这里考虑复杂了,题目是找到,但是没有要求是第一个的!!!!! 
    while(left<=right)
    {
        int mid=(left+right)/2;
        if(L.data[mid]<=x) L=mid+1;
        if(L.data[mid]>x) R=mid-1;  
    } 
    //这里的思路全部错了,什么垃圾代码,我靠 
    if( L.data[right] == x ) 
    {
        //  如果是最后一个元素 
        if( right==L.length-1)
        {
            return false;
        }
        else 
        {
            //   如果不能继续插入数据 
            if( L.length>=L.MaxSize ) return false;
            else 
            {
                //移动元素 
                for(int i=L.length;i>right;i--) 
                    L.data[i]=L.data[i-1];
                L.data[right]=x;
                L.length++;
            }
        }
    }
    return true;
}
答案:
void SearchExchangeInsert(ElemType A[],ElemType x)
{
    //  这里最好能够有一个参数n 
    int low=0,high=n-1,mid;
    
    while(low<=high)
    {
        mid=(low+high)/2;
        if(A[mid]==x) break;
        else if( A[mid] > x ) low=mid+1;
        else high = mid -1;
    } 
    
    if(A[mid]==x && mid!=n-1)
    {
        ElemType temp=A[mid];
        A[mid]=A[mid+1];
        A[mid+1]=temp;  
    } 
    
    if(low>high)//说明退出while循环不是因为break 
    {
        for(int i=n-1;i>high;i--) A[i+1]=A[i];
        A[i+1]=x;
    }
} 
018页10题
方法一:
bool reverse(ElemType A[],int L,int R)
{
    if( L > R ) return false;
    
    int mid=(L+R)/2;
    for(int i=0;i<=mid-L;i++)
    {
        ElemType tmp;
        tmp = A[left+i];
        A[left+i]=A[right-i];
        A[right-i]=tmp;
    }   
    return true;
} 
void leftp(ElemType A[],int n)
{
    //没有答案那么的方便 
    reverse(A,0,n-1);
    reverse(A,0,n-p-1);
    reverse(A,n-p,n-1);
}
答案:
void reverse(int R[],int from,int to)
{
    int i,temp;
    for(i=0;i<(to-from+1)/2;i++)
    {
        temp=R[from+i],R[from+i]=R[to-i],R[to-i]=temp;
    }
}
void Converse(int R[],int n,int p)
{
    reverse(R,0,p-1);
    reverse(R,p,n-1);
    reverse(R,0,n-1);
}
018页11题
//  时间复杂度0(n) 
bool midNumber(ElemType A[],ElemTypde B[],int m,int n,ElemType& ans)
{
    if( n==0 || m == 0 ) return false;
    int mid = (m+n+1) / 2 , cnt = 0 , i = 0 , j = 0 ;
    while( ib[m2])
        {
            if( (d2-s2)%2 == 0)
            {
                s2=m2;
                d1=m1;  
            } 
            else
            {
                d1=m1;
                s2=m2+1;    
            } 
        }
    }
    return A[s1]n/2) return A[i];
    }
    return -1;
}
答案:
int major(int A[],int n)
{
    int i,c,count=1;
    c=A[0];
    for(i=1;i0) count--;
            else
            {
                c=A[i];
                count=1;
            }
        }
    }
    if(count>0)
    {
        for(i=count=0;in/2) return c;
    return -1;
}

你可能感兴趣的:(2019-04-04 考研-线性表-顺序表)