SDUT 3363 元素位置互换之逆置算法

#include <cstdio>
#include <cstdlib>

const int Maxsize = 1e6+5;
typedef int ElemType;

typedef struct
{
    ElemType *ele;
    int length;
    int maxsize;
} List;

void Swap(int &p, int &q)
{
    p = p^q;
    q = q^p;
    p = p^q;
}
void PrintL(List &L)
{
    int i;
    for(i = 0; i < L.length-1; i++)
    {
        printf("%d ", L.ele[i]);
    }
    printf("%d\n", L.ele[i]);
}

int Find_List(List &L, int k)
{
    for(int i = 0; i < L.length; i++)
        if(L.ele[i] == k) return 1;
    return 0;
}
void Reverse_Sq(List &L, int l, int r)
{
    int mid = (r-l)>>1;
    for(int i = 0; i <= mid; i++)
    {
        if(l+i != r-i)
            Swap(L.ele[l+i], L.ele[r-i]);
    }
}

int Create(List &L)
{
    L.ele = (ElemType *)malloc(Maxsize * sizeof(ElemType));
    if(!L.ele) exit(-2);
    L.length = 0;
    L.maxsize = Maxsize;
    int m, d, e;
    scanf("%d", &m);
    for(int i = 0; i < m; i++)
    {
        scanf("%d", &L.ele[L.length++]);
    }
    scanf("%d", &e);
    while(e--)
    {
        scanf("%d", &d);
        Reverse_Sq(L, 0, m-1);
        Reverse_Sq(L, 0, m-d-1);
        Reverse_Sq(L, m-d, m-1);
        PrintL(L);
    }
    return 1;
}



int main()
{
    List L;
    Create(L);
    return 0;
}

第一次尝试类,请多指教

#include <cstdio>
#include <cstdlib>

const int Maxsize = 1e6+5;
typedef int ElemType;
class Sqlist
{
private:
    typedef struct
    {
        ElemType *ele;
        int length;
        int maxsize;
    } List;
    List L;
public:
    Sqlist();
    void Swap(int &p, int &q);
    void PrintL();
    int Find_List(int k);
    void Reverse_Sq(int l, int r);
};


void Sqlist::Swap(int &p, int &q)
{
    p = p^q;
    q = q^p;
    p = p^q;
}
void Sqlist::PrintL()
{
    int i;
    for(i = 0; i < L.length-1; i++)
    {
        printf("%d ", L.ele[i]);
    }
    printf("%d\n", L.ele[i]);
}

int Sqlist::Find_List(int k)
{
    for(int i = 0; i < L.length; i++)
        if(L.ele[i] == k) return 1;
    return 0;
}
void Sqlist::Reverse_Sq(int l, int r)
{
    int mid = (r-l)>>1;
    for(int i = 0; i <= mid; i++)
    {
        if(l+i != r-i)
            Swap(L.ele[l+i], L.ele[r-i]);
    }
}

Sqlist::Sqlist()
{
    L.ele = (ElemType *)malloc(Maxsize * sizeof(ElemType));
    if(!L.ele) exit(-2);
    L.length = 0;
    L.maxsize = Maxsize;
    int m, d, e;
    scanf("%d", &m);
    for(int i = 0; i < m; i++)
    {
        scanf("%d", &L.ele[L.length++]);
    }
    scanf("%d", &e);
    while(e--)
    {
        scanf("%d", &d);
        Reverse_Sq(0, m-1);
        Reverse_Sq(0, m-d-1);
        Reverse_Sq(m-d, m-1);
        PrintL();
    }
}



int main()
{
    Sqlist S;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wz_e18/article/details/82432485