最新文章:

首页 数据结构

顺序表练习题-余老师

发布时间:2018年09月14日 评论数:抢沙发 阅读数:608

    第一问是啥A=AUB 其实顺序表就是数组,所以这个我用最原始的数组取巧做

    /**
    *线性表的数组实现顺序表同时两个顺序表并在一起
    */
    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    typedef int datatype;
    #define maxsize 100
    
    int main(){
        int A[100] = {3,5,8,11};
        int B[100] = {2,6,8,9,11,15,20};
        int i=0,j=0,k=4;
        while(i<4||j<7){
            while(B[j]<A[i]){
                A[k]=B[j];
                k++;
                j++;
            }
            if(B[j]==A[i]){
                j++;
                i++;
            }
            while(B[j]>A[i]&&i<4){
                i++;
            }
            while(i>=4&&j<7){
                A[k]=B[j];
                k++;
                j++;
            }
    
        }
        for(i=0;i<k;i++){
            printf("%d ",A[i]);
        }
        return 0;
    }
    

    但实际开发项目中怎么可能这么取巧用数组,还是要用结构体的,所以第二问我用结构体。尽量加强其健壮性

    /**
    *线性表的数组实现顺序表同时两个顺序表并在一起
    */
    #include<stdio.h>
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    typedef int datatype;
    #define maxsize 100
    typedef struct{ //这个是顺序表结构体
        datatype data[maxsize];//数组实现顺序表
        int last;//长度(指向最后一个的下标,实际长度应为last+1)
    }SeqList;
    SeqList *init_SeqList(){//初始化顺序表
        SeqList *L;
        L=(SeqList*)malloc(sizeof(SeqList));
        L->last=-1;
    }
    
    int Insert_SeqList(SeqList *L,datatype x){//顺序表的插入算法
        int j;
        if(L->last==99){
            printf("表满了");
            return -1;
        }
        L->data[L->last+1]=x;
        L->last++;
        return 1;
    }
    /**
    *两从小到大排序的顺序表A,B将其合并,其顺序依然从小到大
    *思路依次比较A,B值,将小的赋给C
    */
    void merge(SeqList A,SeqList B,SeqList *C){//因为不需要改变A,B中的值所以传的非指针
        int i=0,j=0,k=0;
        while(i<=A.last&&j<=B.last){
            if(A.data[i]<=B.data[j]){
                C->data[k++]=A.data[i++];
            }else{
                C->data[k++]=B.data[j++];
            }
        }
        while(i<=A.last){
            C->data[k++]=A.data[i++];
        }
        while(j<=B.last){
            C->data[k++]=B.data[j++];
        }
        C->last=k-1;
    }
    
    int main(){
        SeqList *A,*B,*C;
        int i;
        datatype x;
        A = init_SeqList();
        B = init_SeqList();
        C = init_SeqList();
        //初始化A
        printf("请输入A长度");
        scanf("%d",&i);
        printf("请输入%d个A元素",i);
        while(i--){
            scanf("%d",&x);
            Insert_SeqList(A,x);
        }
        //初始化B
        printf("请输入B长度");
        scanf("%d",&i);
        printf("请输入%d个B元素",i);
        while(i--){
            scanf("%d",&x);
            Insert_SeqList(B,x);
        }
        merge(*A,*B,C);
        printf("AUB:");
        for(i=0;i<=C->last;i++){
            printf("%d ",C->data[i]);
        }
        return 0;
    }

二维码加载中...
本文作者:HDC      文章标题: 顺序表练习题-余老师
本文地址:http://hdcin.cn/?post=301
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论