zoukankan      html  css  js  c++  java
  • 考研数据结构-顺序表(综合应用4)

    本节代码主要来自王道单科18页的综合应用题。

    八、已知在一维数组A[m+n]中依次存放着两个线性表(a1,a2,a3,....am)和(b1,b2,b3,...bn)。试编写一个函数,将数组中 两个顺序表的位置互换,即将(b1,b2,b3,...bn)放在(a1,a2,a3,....am)前面。

    要特别注意exchange里面的Reverse函数的顺序。分两种情况:

    第一种:先逆置两边的元素,再逆置所有元素。

        Reverse1(A,0,m-1);    此时前面为线性表A,元素依然是m个
        Reverse1(A,m,m+n-1);
        Reverse1(A,0,m+n-1); 

    第二种:先逆置所有元素,再逆置两边元素。

        

        Reverse1(A,0,m+n-1); 
        Reverse1(A,0,n-1);     经过逆置后前面为线性表B,元素是n个
        Reverse1(A,n,m+n-1);
        

    核心代码:

    void Reverse1(Sqlist &L,int left,int right){
        //自己写的代码 
        if(left>=right||right>=MaxSize) return ;//容易忘记 
        int i,j;
        ElemType temp;
        for(i=left,j=right;i<j;i++,j--){
            temp=L.data[i];
            L.data[i]=L.data[j];
            L.data[j]=temp;
        }
    }
    
    void exchange1(Sqlist &A,int m,int n){
        Reverse1(A,0,m-1);
        Reverse1(A,m,m+n-1);
        Reverse1(A,0,m+n-1); 
    }
    void Reverse2(Sqlist &L,int left,int right){
        //书上的代码 
        if(left>=right||right>=MaxSize)return;
        int mid=(left+right)/2;
        ElemType temp;
        for(int i=0;i<=mid-left;i++){
            temp=L.data[left+i];
            L.data[left+i]=L.data[right-i];
            L.data[right-i]=temp;
        } 
    } 
    
    void exchange2(Sqlist &A,int m,int n){
        Reverse2(A,0,m-1);
        Reverse2(A,m,m+n-1);
        Reverse2(A,0,m+n-1); 
    }

    全部代码:

    #include<stdio.h>
    #define true 1
    #define false 0
    #define MaxSize 100          
    #define ElemType int
    #define Status int 
    
    
    typedef struct{
        ElemType data[MaxSize];        
        int length;           
    }Sqlist;
    
    //构造一个空的线性表L 
    void InitList(Sqlist &L){
        L.length=0;
    }
    
    
    bool ListInsert(Sqlist &L,int i,ElemType e){ 
    //将元素e插到顺序表L中第i个位置 
        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;
    }
    
    void ListLoad(Sqlist L){
        if(L.length==0){
            printf("当前顺序表为空
    ");
            return;
        }
        printf("当前顺序表元素为:");
        for(int i=0;i<L.length;i++)
            printf("%d ",L.data[i]);
        printf("
    ");
        return;
    }
    
    void Reverse1(Sqlist &L,int left,int right){
        //自己写的代码 
        if(left>=right||right>=MaxSize) return ;//容易忘记 
        int i,j;
        ElemType temp;
        for(i=left,j=right;i<j;i++,j--){
            temp=L.data[i];
            L.data[i]=L.data[j];
            L.data[j]=temp;
        }
    }
    
    void exchange1(Sqlist &A,int m,int n){
        Reverse1(A,m,m+n-1);
        Reverse1(A,0,m-1);
        Reverse1(A,0,m+n-1); 
    }
    
    void Reverse2(Sqlist &L,int left,int right){
        //书上的代码 
        if(left>=right||right>=MaxSize)return;
        int mid=(left+right)/2;
        ElemType temp;
        for(int i=0;i<=mid-left;i++){
            temp=L.data[left+i];
            L.data[left+i]=L.data[right-i];
            L.data[right-i]=temp;
        } 
    } 
    
    void exchange2(Sqlist &A,int m,int n){
        Reverse2(A,m,m+n-1); 
        Reverse2(A,0,m-1);
        Reverse2(A,0,m+n-1);
    }
    
    
    int main(){
        Sqlist T;
        InitList(T);
        ListInsert(T,1,9);
        ListInsert(T,1,8);
        ListInsert(T,1,7);
        ListInsert(T,1,7);
        ListInsert(T,1,5);
        ListInsert(T,1,5);
        ListInsert(T,1,5);
        ListInsert(T,1,1);    
        ListInsert(T,1,1);    
        ListLoad(T);
        exchange1(T,4,5);
        printf("我的代码转换结果 "); 
        ListLoad(T);
        exchange2(T,4,5);
        printf("书上的代码转换结果 "); 
        ListLoad(T);
    } 

  • 相关阅读:
    MongoDB数据创建与使用
    python库安装方法及下载依赖库
    java开发基础知识学习
    wifi破解基础及工具的使用
    Markdonw基本语法学习
    toj 4353 Estimation(树状数组+二分查找)
    POJ 1694 An Old Stone Game【递归+排序】
    POJ 2092 Grandpa is Famous【水---找出现第二多的数】
    POJ 2993 Emag eht htiw Em Pleh【模拟画棋盘】
    POJ 1068 Parencodings【水模拟--数括号】
  • 原文地址:https://www.cnblogs.com/double891/p/9126379.html
Copyright © 2011-2022 走看看