目录
序
嗨,这里是狐狸~~
简介
顺序表的结构定义:
声明顺序表类型变量:
实验内容:
实验说明 :
实验思路
1、 输入一组整型元素序列(不少于10个),建立顺序表。
2. 在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。
3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。
symmetry.h
4. 实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
5. 输入整型元素序列(不少于10个),利用有序表插入算法建立一个有序表。
6. 利用算法5建立两个非递减有序表,并把它们合并成一个非递减有序表。
7. 在主函数中设计一个简单菜单,调用上述算法。
代码结构:
运行截图:
总结
序
啤酒几杯,废话两行,如果你认真听及,每个字眼都是我想你。
嗨,这里是狐狸~~
今天是周末,加班了,又见面了,现在是2021年12月11日的晚上21点21分,我正在屏幕前打出这行字,距离2022年还有20天,20天之后2021就永远离我们而去了,怎么突然网抑云了,回到正题,现在来给大家分享一个数据结构的实验项目,这个也是数据结构里一个非常经典的知识了,希望大家可以耐心享用。
简介
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序储存结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
顺序表的结构定义:
#define maxlen 50 //定义顺序表中元素个数最多有几个typedef struct{elementtype data[maxlen]; //elementtype是元素的类型 依具体情况而定int listlen; //便于时刻了解顺序表里元素的个数}seqlist; //顺序表的名称 不妨为seqlist
声明顺序表类型变量:
seqlist L,L1;
如顺序表的每个结点占用len个内存单元,用location (ki)表示顺序表中第i个结点ki所占内存空间的第1个单元的地址。则有如下的关系:location (ki+1) = location (ki) +len
location (ki) = location(k1) + (i-1)len
存储结构要体现数据的逻辑结构,顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。
实验内容:
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 ; // 顺序表的类型名
实验思路
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;elsereturn 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;elsereturn 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. 在主函数中设计一个简单菜单,调用上述算法。
#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;
}
代码结构:
运行截图:
总结
OK,简单总结一下,这个顺序表项目就算完成了,总体来说还算简单,思路理清不算太难,数据结构确实需要很强的逻辑思维能力,这就需要大家在平常多多锻炼了,哈哈哈,今天就到这里啦,在这里希望可以得到大家的关注以及点赞啦,希望大家可以多多支持!!你们的点赞就是我坚持下去的动力!
后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注,有什么问题可以回帖留言。想要提前掌握的可以加群领取C/C++学习资料以及其他项目的源码的可以加群【1083227756】了解。想要对程序员的未来发展有兴趣的可以关注微信公众号:【狐狸的编码时光】,希望和大家一起学习进步