2019-04-04 考研-線性表-順序表

#include<cstdio>
#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<L.length;j++)
        L.data[j-1]=L.data[j];
    L.length--;
    return true; 
}
*******************************************
int LocateElem(SqList L,Elemtype e)
{
    int i;
    for(i=0;i<L.length;i++)
    {
        if(L.data[i]==e) return i+1;    
    }   
    return 0;
} 
******************************************


題目部分:
018頁1題 
bool deleteMin(SqList&L,Elemtype e)//沒有使用引用類型 
{
    if(L.length==0) return false;
    int index=0;
    for(int i=1;i<L.length;i++) 
        if(L.data[i]<L.data[index]) index=i;
    e=L.data[index];
    for(int i=index;i+1<L.length;i++) L.data[i]=L.data[i+1];
    //題目要求是使用最后一個元素填充杨耙,審題嚴重錯誤叹放,粗心 
    L.length--; 
    return true;
}
答案:
bool del_Min(SqList&L,Elemtype &value)
{
    if(L.length==0) return false;
    value = L.data[0];
    int pos=0;
    //這里使用value這個變量進行數(shù)據(jù)暫存可以省略漱逸,使用pos足矣 
    for(int i=1;i<L.length;i++)
        if(L.data[i]<value)
        {
            value = L.data[i];
            pos=i;  
        }
    L.data[pos]=L.data[L.length-1];
    L.length--;
    return true;    
} 
018頁2題
void reverse(SqList&L)
{
    Elemtype temp;
    int len=L.length;
    if(len==0) return ;
    //作為程序已經(jīng)可以藕筋,作為紙質(zhì)的答案,可以參考最簡潔寫法银伟,但差別不大
    for(int i=0;i<=(len-1)/2;i++) 
    {
        temp=L.data[i];
        L.data[i]=L.data[len-i+1];//下標錯誤恭应,fuck 
        L.data[len-i+1]=temp;
    }
} 
答案:
void Reverse(SqList&L)
{
    Elemtype temp;
    for(int i=0;i<L.length;i++) 
    {
        temp = L.data[i];
        L.data[i]=L.data[L.length-i-1];
        L.data[L.length-i-1]=temp;
    }
} 
018頁3題
void deleteX(SqList &L,int n,ElemType x)//按照題目要求用了n 
{
    int k=0;
    for(int i=0;i<n;i++)
        if(L.data[i]!=x) L.data[k++]=L.data[i];
    L.length=k;
}
答案:
void del_1(SqList&L,Elemtype x)
{
    int k=0;
    for(int i=0;i<L.length;i++)
        if(L.data[i]!=x)
        {
            L.data[k]=L.data[i];
            k++;
        }
    L.length=k;
}
void del_2(SqList&L,Elemtype e)
{
    int k=0,i=0;
    while(i<L.length)
    {
        if(L.data[i]==x) k++;
        else L.data[i-k]=L.data[i];
        i++;
    }
    L.length=L.length-k;
}
018頁4題
bool Del(SqList&L,Elemtype s,Elemtype t)
{
    //審題錯誤敛纲,題目是有序表 
    int k=0;
    if(L.length==0) return false;
    if(s>=t) return false;
    for(int i=0;i<L.length;i++) 
    {
        if(L.data[i]>=s && L.data[i]=<t) ;
        else L.data[k++]=L.data[i]; 
    }
    L.length=k;
    return true;
}
答案:
void Del(SqList &L,Elemtype s,Elemtype t)
{
    int i,j;
    if(s>=t || L.length==0) return false;
    for(i=0;i<L.length&&L.data[i]<s;i++) ;
    if(i>=L.length) return false;
    for(j=i;j<L.length&&L.data[j]<=t;j++) ;
    for(;j<L.length;j++,i++) 
        L.data[i]=L.data[j];
    L.length=i;
    return true;
} 
018頁5題
void Del(SqList&L,Elemtype s,Elemtype t)
{
    int k=0,i=0;
    if(L.length==0 || s>=t ) return false;
    for(i=0;i<L.length;i++) 
        if(L.data[i]<s || L.data[i]>t)
            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<L.length;i++)
        if(L.data[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;i<L.length;i++)
    {
        if(L.data[i]!=L.data[k-1])
            L.data[k++]=L.data[i];
    }
    L.length=k;
}
答案:
bool Delete_Same(SqList &L)
{
    if(L.length==0) return false;
    int i,j;
    for(i=0,j=1;j<L.length;j++)
        if(L.data[i]!=L.data[j])
            L.data[++i]=L.data[j];
    L.length=i+1;
    return true; 
} 
018頁7題
//返回數(shù)值可以提倡使用引用類型 
SqList union(SqList&L1,SqList&L2)
{
    SqList L;
    int i=0,j=0;
    L.length=0;
    while(i<L1.length && j<L2.length) 
    {
        if(L1.data[i]<=L2.data[j]) L.data[L.length++]=L1.data[i++];
        else L.data[L.length++]=L2.data[j++];
    }
    while(i<L1) L.data[L.length++]=L1.data[i];
    while(j<L2) L.data[L.length++]=L2.data[j];
    return L;
}
答案:
bool Merge(SqList A,SqList B,SqList &C)
{
    //  自己沒有進行這個判斷,因為忽略了會超出范圍這個錯誤
    //  原因:記住線性表的三個重要的元素
    //  1.首地址2.存儲空間的大小3.表長 
    if(A.length+B.length>C.MaxSize) return false;
    //線性表處理需要注意存儲空間的大小
    
    int i=0,j=0,k=0; 
    while( i<A.length && j<B.length )
    {
        if(A.data[i]<=B.data[j]) C.data[k++]=A.data[i++];
        else C.data[k++]=B.data[j++];
    }
    
    while( i<A.length ) C.data[k++]=A.data[i++];
    while( j<B.length ) C.data[k++]=B.data[j++];
    
    C.length=A.length + B.length;
    //  C.length=k; 備用寫法    
    return true;
}
018頁8題
bool Exchange(int A[],int m,int n)
{
    //  int B[]=new int[m+n]; 
    int* B = (int*)malloc( (m+n) * sizeof(int) );
    
    //  如果分配失敗像云,返回false
    if( B == NULL ) return false;
    
    //  保存數(shù)據(jù)到B數(shù)組     
    for(int i=0;i<m+n;i++) B[i]=A[i];
    
    //  把題目中的b1-bn 放到前面 
    for(int i=m;i<m+n;i++) A[i-m]=B[i];
    
    // 把題目中的a1-am放到后面 
    for(int i=0;i<m;i++) A[i+n]=B[i];
    
    return true;
    
} 
答案:
typedef int DataType;
//考場不寫typedef盡量锌雀,不形象
//這里使用bool作為返回值更好 
void reverse(DataType A[],int left,int right,int arraySize)
{
    if(left >= 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;
    //這里考慮復雜了,題目是找到迅诬,但是沒有要求是第一個的R改妗!3薮3颓浮! 
    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 
        {
            //   如果不能繼續(xù)插入數(shù)據(jù) 
            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)
{
    //  這里最好能夠有一個參數(shù)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循環(huán)不是因為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( i<m && j<n && cnt<mid )
    {
        if(A[i]<B[j])
        {
            cnt++;
            if(cnt==mid) ans=A[i];
            i++;
        }
        else 
        {
            cnt++;
            if(cnt==mid) ans=B[j];
            j++;
        }
    }
    while(i<m && cnt<mid )
    {
        cnt++;
        if(cnt==mid) ans=A[i]; 
        i++;
    }
    while(j<n && cnt<mid )
    {
        cnt++;
        if(cnt==mid) ans=B[j];
        j++;
    }
    return true;
} 
答案:
int M_search(int a,int b,int n)
{
    int s1=0 , s2=0 , d1=n-1 , d2=n-1 , m1 , m2;
    while( s1!=d1 || s2!=d2 )
    {
        m1=(s1+d1)/2;
        m2=(s2+d2)/2;
        if(a[m1]==b[m2]) return a[m1];
        else if(a[m1]<b[m2])
        {
            if( (d1-s1)%2 == 0 )
            {
                s1=m1;
                d2=m2;
            }
            else
            {
                s1=m1+1;
                d2=m2;
            }
        }
        else if(a[m1]>b[m2])
        {
            if( (d2-s2)%2 == 0)
            {
                s2=m2;
                d1=m1;  
            } 
            else
            {
                d1=m1;
                s2=m2+1;    
            } 
        }
    }
    return A[s1]<B[s2]?A[s1]:B[s2];
}
018頁12題
int Find(int A[],int n)
{
    if( n==0 ) return -1;
    
    int* B = (int*)malloc( n * sizeof(int) );
    
    for(int i=0;i<n;i++) B[i]=0;
    for(int i=0;i<n;i++)
    {
        B[A[i]]++;
        if(B[A[i]]>n/2) return A[i];
    }
    return -1;
}
答案:
int major(int A[],int n)
{
    int i,c,count=1;
    c=A[0];
    for(i=1;i<n;i++)
    {
        if(A[i]==c) count++;
        else
        {
            if(count>0) count--;
            else
            {
                c=A[i];
                count=1;
            }
        }
    }
    if(count>0)
    {
        for(i=count=0;i<n;i++)
            if(A[i]==c) count++;
    }
    if(count>n/2) return c;
    return -1;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搏屑,隨后出現(xiàn)的幾起案子争涌,更是在濱河造成了極大的恐慌,老刑警劉巖辣恋,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亮垫,死亡現(xiàn)場離奇詭異模软,居然都是意外死亡,警方通過查閱死者的電腦和手機饮潦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門燃异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人继蜡,你說我怎么就攤上這事特铝。” “怎么了壹瘟?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵鲫剿,是天一觀的道長。 經(jīng)常有香客問我稻轨,道長灵莲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任殴俱,我火速辦了婚禮政冻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘线欲。我一直安慰自己明场,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布李丰。 她就那樣靜靜地躺著苦锨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趴泌。 梳的紋絲不亂的頭發(fā)上舟舒,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音嗜憔,去河邊找鬼秃励。 笑死,一個胖子當著我的面吹牛吉捶,可吹牛的內(nèi)容都是我干的夺鲜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼呐舔,長吁一口氣:“原來是場噩夢啊……” “哼币励!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滋早,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤榄审,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杆麸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搁进,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡浪感,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饼问。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影兽。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莱革,靈堂內(nèi)的尸體忽然破棺而出峻堰,到底是詐尸還是另有隱情,我是刑警寧澤盅视,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布捐名,位于F島的核電站,受9級特大地震影響闹击,放射性物質(zhì)發(fā)生泄漏镶蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一赏半、第九天 我趴在偏房一處隱蔽的房頂上張望贺归。 院中可真熱鬧,春花似錦断箫、人聲如沸拂酣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婶熬。三九已至,卻和暖如春光坝,著一層夾襖步出監(jiān)牢的瞬間尸诽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工盯另, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洲赵。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓鸳惯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叠萍。 傳聞我的和親對象是個殘疾皇子芝发,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容