信息安全专业知识数据结构和算法分析算法与数据结构

数据结构实验1.1:顺序表

2019-06-05  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读