博客
关于我
数据结构与算法实验1——线性表的应用之顺序表
阅读量:267 次
发布时间:2019-03-01

本文共 6156 字,大约阅读时间需要 20 分钟。

线性表的应用——顺序表

————每天八杯水

一、目的要求

1.掌握线性表顺序存储结构的特点。
2.掌握线性表顺序存储结构的常见算法。
二、实验内容
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 ; // 顺序表的类型名
  3. 建立顺序表时,利用随机函数自动产生数据

四、代码

(一)头文件

#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/

你可能感兴趣的文章
巧用VBA统一数字单位
查看>>
你所不知道的Excel自定义函数BUG
查看>>
Transpose实现数组行列转置的限制
查看>>
Excel筛选后数据行数
查看>>
VBA中数组72变(随心所欲复制)
查看>>
快速批量另存工作表
查看>>
VBA之正则表达式(9)-- 添加千分位(1/3)
查看>>
[Golang]golang中自动锁的实现
查看>>
installgithub-支持断点续传下载GitHubDesktop离线安装文件
查看>>
用float/double作为中转类型的“雷区”
查看>>
golang中interface的一些语法缺陷的改进
查看>>
关于实时TopN排名算法的思考
查看>>
vue-router路由 学习笔记
查看>>
python自然语言处理—Word2vec模型之 CBOW
查看>>
python自然语言处理—自动文摘评测方法
查看>>
python深度学习入门-神经网络的学习
查看>>
数据结构与算法之栈
查看>>
SpringBoot的事务传播机制
查看>>
唯一索引和普通索引性能比较
查看>>
理解java中的happens-Before
查看>>