本文共 6156 字,大约阅读时间需要 20 分钟。
————每天八杯水
一、目的要求
1.掌握线性表顺序存储结构的特点。 2.掌握线性表顺序存储结构的常见算法。 二、实验内容 1.输入一组整型元素序列(不少于 10 个),建立顺序表。 2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。 3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。 4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 5.输入整型元素序列(不少于 10 个),利用有序表插入算法建立一个有序表。 6.利用算法 5 建立两个非递减有序表,并把它们合并成一个非递减有序表。 7.在主函数中设计一个简单菜单,调用上述算法。 三、实验说明四、代码
(一)头文件#pragma once#include#include #include using namespace std;const int MAXSIZE = 15;//最大元素个数定为15个typedef int ElemType;//元素的类型struct list{ ElemType elem[MAXSIZE];//存放元素的数组,静态分配 int length;//实际长度};//顺序表的类型typedef struct list* SeqList;SeqList SetList_Seq(int len)//建立顺序表{ SeqList list = (SeqList)malloc(sizeof(struct list) ); list->length = len; srand((unsigned)time(NULL));//为rand函数提供种子seed,目的每次产生的随机数随着时间不同也产生不同的数据 cout << "建立的顺序表为:"; for (int i = 0; i < list->length; i++) { list->elem[i] = rand()%100;//随机函数除以100意思是说产生的数范围为0-100 cout << list->elem[i] << " "; } cout << "\n"; return list;}int FindElem(SeqList list)//查找元素{ cout << "请您输入要查找的元素:"; int a; cin >> a; int i; for (i = 0; i < list->length; i++) { if (list->elem[i] == a) { cout<<"查找成功!!!"< length-1; for (; list->elem[i] == list->elem[j]; i++, j--) { if (j <= i) { cout << "对称!!!"; return 1; break; } } cout << "不对称!!!"< length); for (int i = 0; i < list->length; i++) { if (list->elem[i] % 2 == 1)//求模值为1位奇数 { temp[j] = list->elem[i]; j++; } } for (int i = 0; i < list->length; i++) { if (list->elem[i] % 2 == 0)//求模值为0位偶数 { temp[j] = list->elem[i]; j++; } } cout << "奇数在前偶数在后:"; for (int i = 0; i < j; i++) { cout << temp[i] << " "; } cout << "\n"; return 0;}void CreadOrderList(SeqList list)//直接插入算法排序有序递增{ for (int i = 1 ; i < list->length; i++) { if (list->elem[i] elem[i-1]) { int temp;//临时变量 temp = list->elem[i]; list->elem[i] = list->elem[i-1];//把前者大的赋值给后者,后者小的给前者 list->elem[i - 1] = temp; for (int j=i-2;list->elem[j+1] elem[j];j--)//第二次循环,比较当前元素前面是否比现在元素大 { int temp;//临时变量 temp = list->elem[j + 1]; list->elem[j + 1] = list->elem[j]; list->elem[j] = temp; } } } cout << "使用直接插入算法建立递增有序表:"; for (int i = 0; i < list->length; i++)//输出元素 { cout << list->elem[i] << " "; } cout << "\n";}void Compound(SeqList list1,SeqList list2)//两个递增有序表list和list2合并一个递增有序表{ for (int i = 0; i < list2->length; i++) { list1->elem[list1->length] = list2->elem[i];//把第二个表元素接到第一个表上,实现合成 (list1->length)++; } CreadOrderList(list1);//再把合成后的表进行直接插入算法建立递增有序表}
(二)源文件
#include#include "顺序表应用.h"using namespace std;SeqList SetList_Seq(int);//1.输入一组整型元素序列(不少于 10 个),建立顺序表。int FindElem(SeqList);//2.在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。int JudgeSymmetry(SeqList);//3.判断该顺序表中元素是否对称,对称返回 1,否则返回 0。int OddEven(SeqList);//4.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。void CreadOrderList(SeqList list);//5.输入整型元素序列(不少于 10 个),利用有序表插入算法建立一个有序表。void Compound(SeqList,SeqList);//6.利用算法 5 建立两个非递减有序表,并把它们合并成一个非递减有序表。/*设计菜单:1.用户输入不少于10个元素建立顺序表2.查找元素 成功1 失败03.判断元素是否对称 是返回1 不是04.实现奇数在偶数前5.利用插入算法建立有序表6.用算法5建立两个递增有序表,再把他们合成一个递增有序表*/int main(){ /* 菜单的制作 */ cout << "******************************************************************************************************************" << endl; cout << "******************************************************************************************************************" << endl; cout << "***********************" << " "; cout << "您好!欢迎来到我的世界,这是我能为您提供的服务:" << " " << "***********************" << endl; cout << "***********************" << " "; cout << "1:建立顺序表" << " " << "***********************" << endl; cout << "******************************************************************************************************************" << endl; cout << "请输入数字选择您要使用的算法:"; int num; cin >> num; switch (num)//选择其中一个 { case 1: cout << "您想建立的顺序表长度为:"; int len;//len是实际长度 cin >> len; SeqList list; list = SetList_Seq(len);//建立随机函数生成的元素 cout << "\n"; cout << "******************************************************************************************************************" << endl; cout << "***********************" << " "; cout << "1:查找元素" << " " << "***********************" << endl; cout << "***********************" << " "; cout << "2:判断对称" << " " << "***********************" << endl; cout << "***********************" << " "; cout << "3:奇数前偶数后" << " " << "***********************" << endl; cout << "***********************" << " "; cout << "4:利用直接插入算法建立递增有序表" << " " << "***********************" << endl; cout << "***********************" << " "; cout << "5:合成两个有序表" << " " << "***********************" << endl; cout << "******************************************************************************************************************" << endl; cout << "请选择接下来您要进行的操作:";//用户选择操作算法 int m; cin >> m; while (m!=0) { if (m == 1) FindElem(list); if (m == 2) JudgeSymmetry(list); if (m == 3) OddEven(list); if (m == 4) CreadOrderList(list); if (m == 5) { cout << "建立第一个递增有序表,输入长度:"; int len1; cin >> len1; SeqList list1; list1 = SetList_Seq(len1);//建立第二个顺序表 CreadOrderList(list1);//第二个递增有序表 cout << "\n"; cout << "建立第二个递增有序表,输入长度:"; int len2; cin >> len2; SeqList list2; list2 = SetList_Seq(len2);//建立第二个顺序表 CreadOrderList(list2);//第二个递增有序表 cout << "是否合并这两个表y/n:"; char m; cin >> m; if (m == 'y')Compound(list1, list2); else break; } cout << "\n"; cout << "请选择你继续的操作:"; cin >> m; } break; } }
五、思考总结
1.代码质量还有待高,由于时间水平有限,菜单界面做得太粗糙了,下次一定升级菜单界面。 2.知识点方面:此实验出现了判断元素对称、用直接插入算法建立有序递增表和奇数在前偶数在后三个新思想,初次构想有些细节还没有考虑到。谢谢您的浏览,由于水平有限,很多地方有待提高,若您有更好的建议欢迎留言!
转载地址:http://aclo.baihongyu.com/