實(shí)驗(yàn)內(nèi)容:
1.輸入一組整型元素序列(不少于10個),建立順序表。
2.在該順序表中進(jìn)行順序查找某一元素,查找成功返回 1,否則返回 0。
3.判斷該順序表中元素是否對稱,對稱返回 1,否則返回 0。
4.實(shí)現(xiàn)把該表中所有奇數(shù)排在偶數(shù)之前,即表的前面為奇數(shù),后面為偶數(shù)。
5.輸入整型元素序列(不少于10個),利用有序表插入算法建立一個有序表。
6.利用算法5建立兩個非遞減有序表,并把它們合并成一個非遞減有序表。
7.在主函數(shù)中設(shè)計一個簡單菜單,調(diào)用上述算法。
實(shí)驗(yàn)說明 :
- 算法 1至算法6的有關(guān)函數(shù)用頭文件方式存儲,主函數(shù)包含該頭文件。
- 存儲定義
const int MAXSIZE=15 ; // 表中元素的最大個數(shù)
typedef int ElemType; // 元素類型
typedef struct list
{
ElemType elem[MAXSIZE]; // 靜態(tài)分配
int length; // 表的實(shí)際長度
} SqList ; // 順序表的類型名
源代碼:
//head.h
#include<iostream>
using namespace std;
typedef int ElemType; // 元素類型
//list.h
#include<iostream>
using namespace std;
const int MAXSIZE = 15; // 表中元素的最大個數(shù)
typedef int ElemType; // 元素類型
typedef struct list
{
ElemType elem[MAXSIZE]; // 靜態(tài)分配
int length; // 表的實(shí)際長度
} SqList;
1. 輸入一組整型元素序列(不少于10個),建立順序表。
// create_arr.h
#include"head.h"
void create_arr(ElemType elem[], int n)
{
cout << "請輸入" << n << "個整數(shù):" << 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. 在該順序表中進(jìn)行順序查找某一元素,查找成功返回 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. 實(shí)現(xiàn)把該表中所有奇數(shù)排在偶數(shù)之前,即表的前面為奇數(shù),后面為偶數(shù)。
//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 << "個整數(shù):" << 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. 在主函數(shù)中設(shè)計一個簡單菜單,調(diào)用上述算法。
//源.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.在該順序表中進(jìn)行順序查找某一元素,查找成功返回 1,否則返回 0。" << endl;
cout << "3.判斷該順序表中元素是否對稱,對稱返回 1,否則返回 0。" << endl;
cout << "4.實(shí)現(xiàn)把該表中所有奇數(shù)排在偶數(shù)之前,即表的前面為奇數(shù),后面為偶數(shù)。" << endl;
cout << "5.輸入整型元素序列,利用有序表插入算法建立一個有序表。" << endl;
cout << "6.利用算法5建立兩個非遞減有序表,并把它們合并成一個非遞減有序表。" << endl;
cout << endl;
int num;
while (true)
{
cout << "請輸入一個數(shù)字:";
cin >> num;
switch (num)
{
case 1:
{
cout << "請輸入數(shù)據(jù)個數(shù):";
cin >> SqList.length;
create_arr(elem, SqList.length);
cout << endl;
}break;
case 2:
{
int x;
cout << "請輸入你要查找的數(shù):";
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;
}
代碼結(jié)構(gòu):
image
運(yùn)行截圖:
image