• 数据结构之顺序表


    已知Sqlist 是一个结构体变量, 其中包含data这类整形元素, 定义一个 Sqlist *L.  L->data  = (* L).data.

    #include <cstdio>
    #include <cstdlib>
    #define OK 1
    #define ERROR 0
    #define MAXSIZE 20
    typedef int Status;
    typedef int ElemType;
    typedef struct 
    {
        ElemType data[MAXSIZE];
        int length;
    } Sqlist;
    Sqlist Q, S, R;
    Status GetELem(Sqlist L, int i, ElemType *e)  //用e返回L中第i个元素的值(地址)。 
    {
        if(L.length == 0 || i < 1 || i > L.length)
            return ERROR;
        *e = L.data[i-1];
        return OK;     
    }
    void ListInput(int l, Sqlist *L)
    {
        int n;
        printf("输入链表%d元素个数:
    ", l); 
        scanf("%d", &n);
        printf("输入链表%d元素:
    ", l);
        for(int i = 0; i < n; i++)
            scanf("%d", &L->data[i]);
        L->length = n;
    }
    void ListOutput(Sqlist *L)
    {
        for(int i = 0; i < L->length; i++)
            printf("%d ", L->data[i]);
        printf("
    ");
    }
    Status ListInsert(Sqlist *L, int i, ElemType e) //在表L中位置i处插入一个元素e 
    {
        if(L->length == MAXSIZE)
        {
            printf("ERROR:超出数组最大空间分配
    ");
            return ERROR;
        }
        if(i < 1 || i > L->length+1)
        {
            printf("ERROR:插入位置不与任一元素邻居
    ");
            return ERROR;
        } 
        if(i <= L->length)
        {
            for(int k = L->length-1; k >= i-1; k--)
                L->data[k+1] = L->data[k];
        }
        L->data[i-1] = e;
        L->length++;
    }
    Status ListDelete(Sqlist *L, int i, ElemType *e) //删除第i个位置元素; 
    {
        if(L->length == 0)
        {
            printf("顺序表中不存在元素
    ");
            return ERROR;
        }
        if(i < 1 || i >  L->length)
        {
            printf("ERROR
    ");
            return ERROR; 
        }
        *e = L->data[i-1];
        if(i <= L->length)
        {
            for(int k = i; k < L->length; k++)
                L->data[k-1] = L->data[k];    
        }    
        L->length--; 
    } 
    void ListMercy(Sqlist *L, Sqlist *I, Sqlist *N)
    {
        int sum = 0;
        int lengthL = L->length;
        int lengthI = I->length;
        for(int i = 0; i < lengthI; i++)
            N->data[i] = I->data[i];
        N->length = L->length;
    //    printf("%d
    ",  N->length);
        for(int i = 0; i < lengthL; i++)
        {
            for(int j = 0; j < N->length; j++)
                if(L->data[i] != N->data[j])
                    sum++;
            if(sum == N->length)
                N->data[N->length++] = L->data[i];
            sum = 0; 
        }
        //printf("%d
    ", N->length);
    } 
    int main()
    {
        int OP; printf("1:对链表1操作
    2:对链表2操作
    3:合并操作
    ");
        while(scanf("%d", &OP), OP)
        {
            switch(OP)
            {
                case 1:{
                            system("cls");
                            printf("对链表1操作:
    "); 
                            ListInput(1, &Q);
                            int a, b, T;
                            printf("分别输入待插入位置 及 元素:
    "); 
                            scanf("%d%d", &a, &b);
                            ListInsert(&Q, a, b);
                            printf("输入待删除位置:
    ");
                            scanf("%d", &a);
                            ListDelete(&Q, a, &T);
                            printf("输出链表1
    ");
                            ListOutput(&Q);
                            break;
                    } 
                case 2:{ 
                            system("cls");
                            printf("对链表2操作:
    ");
                            ListInput(2, &S);
                            int c, d, F;
                            printf("分别输入待插入位置 及 元素:
    "); 
                            scanf("%d%d", &c, &d);
                            ListInsert(&S, c, d);
                            printf("输入待删除位置:
    ");
                            scanf("%d", &c);
                            ListDelete(&S, c, &F);
                            printf("输出链表2
    ");
                            ListOutput(&S);
                            break;
                    } 
                case 3:{
                            system("cls");
                            printf("合并链表1, 2
    ");
                            ListMercy(&Q, &S, &R);
                            printf("输出合并后链表:
    ");
                            ListOutput(&R);
                       } // printf("1:对链表1操作
    2:对链表2操作
    3:合并操作
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    【原创】性能测试之——网络环境分析
    【转载】测试人员管理之——离职类型分析
    【转载】测试人员管理之——离职人员管理
    【转载】测试缺陷生命周期定义
    【转载】如何对软件测试方法分类
    【原创】Java批量反编译利器(jd-gui)介绍
    【原创】Linux常用管理命令总结
    shelve模块 xml模块
    json模块
    sys模块
  • 原文地址:https://www.cnblogs.com/soTired/p/4876340.html
Copyright © 2020-2023  润新知