数据结构实验1.1:顺序表

作者: 简言之_ | 来源:发表于2019-06-05 19:04 被阅读1次

    实验内容:

    1.输入一组整型元素序列(不少于10个),建立顺序表。
    2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。
    3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
    4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
    5.输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
    6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
    7.在主函数中设计一个简单菜单,调用上述算法。

    实验说明 :

    1. 算法 1至算法6的有关函数用头文件方式存储,主函数包含该头文件。
    2. 存储定义
       const  int  MAXSIZE=15 ;   // 表中元素的最大个数 
       typedef  int  ElemType;   // 元素类型 
       typedef  struct  list  
        { 
          ElemType  elem[MAXSIZE];  // 静态分配 
          int  length;    // 表的实际长度 
        } SqList ;        // 顺序表的类型名 
    

    源代码:

    //head.h
    #include<iostream>
    using namespace std;
    typedef  int  ElemType;    // 元素类型
    //list.h
    #include<iostream>
    using namespace std;
    const  int  MAXSIZE = 15;   // 表中元素的最大个数 
    typedef  int  ElemType;    // 元素类型 
    typedef  struct  list
    {
        ElemType  elem[MAXSIZE];  // 静态分配 
        int  length;    // 表的实际长度 
    } SqList;   
    1.  输入一组整型元素序列(不少于10个),建立顺序表。 
    // create_arr.h
    #include"head.h"
    void create_arr(ElemType elem[], int n)
    {
    cout << "请输入" << n << "个整数:" << endl;
    for (int i = 0; i < n; i++)
    cin >> elem[i];
    cout << "建立的顺序表为:[";
    for (int i = 0; i < n; i++)
    cout <<elem[i] << ",";
    cout << "]";
    cout << endl;
    }
    2.  在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。 
    //searvh_elem.h
    #include"head.h" 
    int search_elem(ElemType elem[], int n, int m)
    {
        for (int i = 0; i < n; i++)
            if (elem[i] == m)
                return 1;
            else (elem[i] != m);
                return 0;
    }
    3.  判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
    //symmetry.h 
    #include"head.h"
    int symmetry_arr(ElemType elem[], int n)
    {
        int midl, midr, mid, r = 0, m = 0;
        if (n % 2 == 0 && n != 0)
        {
            midl = elem[n / 2 - 1];
            midr = elem[n / 2];
            for (int j = n / 2 - 2; j >= 0; j--)
                if (elem[n / 2 - 1] < elem[j])
                    m++;
            for (int k = n / 2 + 1; k < n; k++)
                if (elem[n / 2] < elem[k])
                    r++;
            if (m + r != 0)
                return 0;
            else
                return 1;
        }
        else
        {
            mid = elem[n / 2];
            for (int i = n / 2 - 1; i >= 0; i--)
                if (elem[n / 2] < elem[i])
                    m++;
            for (int j = n / 2 + 1; j < n; j++)
                if (elem[n / 2] < elem[j])
                    r++;
            if (m + r != 0)
                return 0;
            else
                return 1;
        }
    
    }
    4.  实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 
    //jiou_sort.h
    #include"head.h"
    void jiou_sort(ElemType elem[], int n)
    {   
        int *p, k = 0;
        p = new int[n];
        for (int i = 0; i < n; i++)
        {
            if (elem[i] % 2 != 0)
            {
                p[k] = elem[i];
                k++;
            }
        }
        for (int i = 0; i < n; i++)
        {
            if(elem[i] % 2 == 0)
            {
                p[k] = elem[i];
                k++;
            }
        }
        for (int i = 0; i < n; i++)
            cout << p[i] << ",";
                cout<<endl ;
    }
    5.  输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
    //built_sortarr.h
     #include<algorithm>
    #include"head.h"
    void built_sortarr(ElemType elem[], int n)
    {
        cout << "请输入" << n << "个整数:" << endl;
        for (int i = 0; i < n; i++)
            cin >> elem[i];
        sort(elem, elem + n);
        for (int i = 0; i < n; i++)
            cout<< elem[i];
    }
    6.  利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
    //combine_sortarr.h 
    #include"head.h"
    void combine_sortarr(ElemType elem1[], ElemType elem2[], int n)
    {
        int *p, c,q = 0, m = 0;
        p = new int[n];
        while (elem1[q] >= 0)
        {
            p[q] = elem1[q];
            q++;
        }
        c = q;
        for (int i = 0; i < n - c; i++)
        {
            for (int j = 0; j < q; j++)
            {
                if (elem2[i] <= p[j])
                {
                    for (int k = q; k >= j; k--)
                        p[k] = p[k - 1];
                    p[j] = elem2[i];
                    break;
                }
                else if (m = q)
                    p[q] = elem2[i];
                m++;
            }
            q++;
        }
        for (int i = 0; i < n; i++)
        {
            cout << p[i] << ",";
        }
    }
    7.  在主函数中设计一个简单菜单,调用上述算法。
    //源.cpp
    #include"create_arr.h"
    #include"search_elem.h"
    #include"symmetry_arr.h"
    #include"jiou_sort.h"
    #include"built_sortarr.h"
    #include"combine_sortarr.h"
    #include"list.h"
    int main() 
    {
        struct list SqList;
        ElemType elem[MAXSIZE],  elem1[MAXSIZE];
        cout << "1. 输入一组整型元素序列,建立顺序表。" << endl;
        cout << "2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。" << endl;
        cout << "3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。" << endl;
        cout << "4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。" << endl;
        cout << "5.输入整型元素序列,利用有序表插入算法建立一个有序表。" << endl;
        cout << "6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。" << endl;
        cout << endl;
        int num;
        while (true) 
        {   
            cout << "请输入一个数字:";
            cin >> num;
            switch (num)
            {
            case 1:
            {
                cout << "请输入数据个数:";
                cin >> SqList.length;
                create_arr(elem, SqList.length);
                cout << endl;
            }break;
            case 2:
            {
                int x;
                cout << "请输入你要查找的数:";
                cin >> x;
                if (search_elem(elem, SqList.length, x) == 1)
                    cout << "所查元素在顺序表中" << endl;
                else cout << "所查元素不在顺序表中" << endl;
                cout << endl;
            }break;
            case 3:
            {
                if (symmetry_arr(elem, SqList.length) == 1)
                    cout << "顺序表对称" << endl;
                else cout << "顺序表不对称" << endl;
                cout << endl;
            }break;
            case 4:
            {
                jiou_sort(elem, SqList.length);
                cout << endl;
            }break;
            case 5:
            {
                built_sortarr(elem1, SqList.length);
                cout << endl;
            }break;
            case 6:
            {
                combine_sortarr(elem, elem1, 2 * SqList.length);
                cout << endl;
            }break;
            default:cout << "输入错误,请重新输入:" << endl;
            }
        }
        return 0;
    }
    

    代码结构:

    image

    运行截图:

    image

    相关文章

      网友评论

        本文标题:数据结构实验1.1:顺序表

        本文链接:https://www.haomeiwen.com/subject/uewsxctx.html