数据结构实验1.1:顺序表
2019-06-05 本文已影响1人
简言之_
实验内容:
1.输入一组整型元素序列(不少于10个),建立顺序表。
2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。
3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
5.输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
6.利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
7.在主函数中设计一个简单菜单,调用上述算法。
实验说明 :
- 算法 1至算法6的有关函数用头文件方式存储,主函数包含该头文件。
- 存储定义
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;
}