实验内容:

(1)完成 SeqList 类模板的基本功能。
(2)扩展顺序表的功能:
1)排序
2)归并两个有序顺序表
3)2.2~2.6
4)移位操作
(3)编写 main()函数对 SeqList 类模板进行实例化测试,要求:
从键盘输入原始顺序表的个数以及每个元素的值。

代码部分:

#include <iostream>
#include<algorithm>
using namespace std;
template<class T, int MaxSize>
class SeqList
{T data[MaxSize];int length;
public:SeqList();//午餐构造SeqList(T a[], int n);int ListLength();      //求线性表的长度T Get(int pos);        //按位查找,取顺序表的第pos个元素int Locate(T item); //按值查找,求顺序表中值为item的元素序号void PrintSeqList(); //遍历顺序表,按序号依次输出各元素void Insert(int i, T item);  //在顺序表第i个位置插入值为item的元素T Delete1(int i);T Delete();          //2.2删除最小void Delete2(T x);//2.3课后习题void DeleteBetween(T x, T y);//2.4课后习题void Sort();  //排序void Merge(SeqList list2);//归并有序顺序表void DeleteSame();//2.5void Sort2();void Move();};
template<class T,int MaxSize>
SeqList<T, MaxSize>::SeqList(T a[], int n)
{if (n > MaxSize) { cerr << "参数非法"; exit(1); }for (int i = 0; i < n; i++)data[i] = a[i];length = n;
}template<class T, int MaxSize>
int SeqList<T, MaxSize>::ListLength()
{return length;
}template<class T, int MaxSize>
T SeqList<T, MaxSize>::Get(int pos)
{if (pos<1 || pos>length) { cerr << "查找位置非法"; exit(1); }else return data[pos - 1];
}template <class T, int MaxSize>
int SeqList<T, MaxSize>::Locate(T item)
{for (int i = 0; i < length; i++)if (data[i] == item)return i + 1;return 0;
}template<class T, int MaxSize>
void SeqList<T, MaxSize>::PrintSeqList()
{for (int i = 0; i < length; i++){cout << data[i]<<" ";}cout << endl;
}
template <class T, int MaxSize>
void SeqList<T, MaxSize>::Insert(int i, T item)
{if (length >= MaxSize) { cerr << "上溢"; exit(1); }if (i<1 || i>length + 1) { cerr << "插入位置非法"; exit(1); }for (int j = length - 1; j >= i - 1; j--)data[j + 1] = data[j];data[i - 1] = item;length++;
}template <class T, int MaxSize>
T SeqList<T, MaxSize>::Delete1(int i)
{if (length == 0) { cerr << "下溢"; exit(1); }if (i<1 || i>length) { cerr << "删除位置非法"; exit(1); }T x = data[i - 1];for (int j = i; j < length; j++)data[j - 1] = data[j];length--;return x;
}
template <class T, int MaxSize>
T SeqList<T, MaxSize>::Delete()
{if (length == 0) { cerr << "下溢"; exit(1); }int count=0;for (int j = 0; j < length; j++) {for (int i = 0; i < length; i++){if (data[j] < data[i] && data[j] < data[count])count = j;}}T x = data[count];data[count] = data[length - 1];return x;
}template <class T, int MaxSize>
void SeqList<T, MaxSize>::Delete2(T x)//2.3
{for (int i = 0; i < length; i++)//遍历{if (data[i] == x)//如果检测到和x值一样的{int j = i + 1, count = 1;//开始检测后面是否有连着等于x的while (j){if (data[j] == x){j++;count++;}elsebreak;}for (int k = i; k < length; k++)//删除操作{data[k] = data[k+count];}length -= count;}}}template <class T, int MaxSize>
void SeqList<T, MaxSize>::DeleteBetween(T x, T y)
{if (x >= y) { cerr << "x必须小于y"; exit(1); }for (int i = 0; i < length; i++){if (data[i]>x && data[i]<y)//如果检测到比x大比y小的{int j = i + 1, count = 1;//开始检测后面有几个在区间内的while (j){if (data[j]<y){j++;count++;}elsebreak;}for (int k = i; k < length; k++)//删除操作{data[k] = data[k + count];}length -= count;}}}template<class T, int MaxSize>
void SeqList<T, MaxSize> ::DeleteSame()
{for (int i = 0; i < length; i++)//双重循环{for (int j = i+1; j < length; j++){if (data[j] == data[i]){Delete1(j + 1);//删除第j个元素并且再检测一遍j元素是否还等于dataij--;}}}
}
template <class T, int MaxSize>
void SeqList<T, MaxSize>::Sort()
{sort(data, data + length);
}template <class T, int MaxSize>
void SeqList<T, MaxSize> ::Sort2()
{T x[MaxSize];int num = 0;for (int i = 1; i <length; i++){if (data[i] <data[0]){x[num] = data[i];num++;}}x[num] =data[0];num++;for (int i = 1; i <length; i++){if (data[i] > data[0]){x[num] = data[i];num++;}}for (int i = 0; i <length; i++){int index = data[i];data[i]=x[i];x[i] = index;}}template <class T, int MaxSize>
void SeqList<T, MaxSize> ::Move()
{int  n;cin >> n;if ( n < length - 1)//左移{T x[MaxSize];for (int i = 0; i <= n; i++){x[i] = data[i];}for (int i = 0; i < length - n; i++){data[i] = data[i + n];}for (int i = length - n,j=0; i <= length - 1; i++){data[i] = x[j];j++;}}
}
template <class T, int MaxSize>
void SeqList<T, MaxSize>::Merge(SeqList list2)
{int i = 0, j = 0, k = 0;T x[MaxSize];//用于存储的数组xwhile (i < length && j < list2.length)//归并{if (data[i] <= list2.data[j])x[k++] = data[i++];elsex[k++] = list2.data[j++];}if (i < length)while (i < length)x[k++] = data[i++];elsewhile (j < list2.length)x[k++] = list2.data[j++];length += list2.length;for (int a = 0; a < length+list2.length; a++){data[a] = x[a];}}int main()
{int a[50];int b[50];int m, n;cout << "请输入第一个顺序表的元素个数" << endl;cin >> n;cout << "请输入第一个顺序表的元素";for (int i = 0; i < n; i++){cin >> a[i];}SeqList<int, 50> list1(a, n);cout << "请输入第二个顺序表的元素个数" << endl;cin >> m;cout << "请输入第二个顺序表的元素";for (int i = 0; i < m; i++){cin >> b[i];}SeqList<int, 50> list2(b, m);int sel;cin >> sel;switch (sel) {case 1: {list1.Sort();list2.Sort();list1.PrintSeqList();list2.PrintSeqList();system("pause");//暂停观察结果system("cls");//清屏}break;case 2: {   list1.Sort();list2.Sort();list1.Merge(list2);list1.PrintSeqList();system("pause");system("cls");}break;case 3:{int a=list1.Delete();list1.PrintSeqList();cout << "最小的是" << a << endl;system("pause");system("cls");}case 4:{   int x;cin >> x;list1.Delete2(x);list1.PrintSeqList();system("pause");system("cls");}case 5:{list1.Sort();list1.DeleteBetween(3, 8);list1.PrintSeqList();system("pause");system("cls");}case 6:{list1.DeleteSame();list1.PrintSeqList();system("pause");system("cls");}case 7:{list2.Sort2();list2.PrintSeqList();system("pause");system("cls");}case 8:{list1.Move();list1.PrintSeqList();system("pause");system("cls");}}}

C++ SeqList 顺序表 类模板的实现与测试相关推荐

  1. 【数据结构】使用Java实现顺序表类 SeqList

    目录 线性表介绍 顺序表介绍 Java->顺序表API Java->顺序表代码 使用顺序表示例 线性表介绍 数据结构中的线性存储结构分为两大类:顺序存储和链式存储,顺序存储对应的是顺序表, ...

  2. C++数据结构之顺序表(模板类实现)

    [重要说明]:本文章主要转自以下地址,在其基础上改用模板类实现,仅供学习使用,如有侵权请联系删除. C++ 类实现线性表_wwxy1995的博客-CSDN博客_c++实现线性表 list.h头文件-- ...

  3. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  4. C++顺序表(模板总结)

    C++顺序表(模板总结) 总结: 1.模板类的实质是什么:让程序员写出和类型无关的代码 2.模板的对象时什么:方法或者类 3.是对类中的一系列操作,提供一个不固定数据类型的方法 用模板做的类的时候要指 ...

  5. 顺序表——基本概念、顺序表类实现、基本操作

    顺序表 线性表的顺序存储结构 1.数组是实现顺序存储结构的基础. 特点:地址连续确定,容量固定,随机存取T(n) = O(1) 一维数组占用一块内存空间,数组的存储单元个数成为数组容量,也成为数字长度 ...

  6. 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL中的ve ...

  7. 顺序表类的声明java_顺序表实现解约瑟夫环_Java

    今天我们来使用顺序表类求解约瑟夫(Josephus)环问题. 首先我闲来描述下约瑟夫环问题:古代某法官要裁决n个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圆圈,从第s个人开始数起,每数到第d个犯人 ...

  8. java设计一个顺序表类的成员函数_顺序表代码讲解以及实现

    用C语言编写一个有关顺序表的程序代码 创建一个顺序表,其数据元素类型为整型: 在该顺序表中插入数据(#include #include #define MaxSize 50 typedef char ...

  9. 【顺序表】13 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    问题描述 : 目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计. 应用1:试设计一个算法,用尽可能少的辅助空间将非空顺序表中前 m 个元素和后 ...

最新文章

  1. android网络请求 post
  2. android studio for循环快捷键,Android Studio 快捷键 for Mac OS X
  3. 日行千里,全凭“车”况,为什么我们要升级平台
  4. Spring Data JPA 从入门到精通~实际工作的应用场景
  5. linux perl的while循环中ctrl+c失效,perl循环控制
  6. FTP服务学习笔记之FTP简介(1)
  7. 好用的MessageFormat类
  8. 【luogu P2319 [HNOI2006]超级英雄】 题解
  9. 中国计算机学会推荐国际学术会议和期刊目录
  10. 什么是网络操作系统?网络操作系统具有哪些基本功能?
  11. liunx破解root密码精简版
  12. 技术发展杂谈——RTC、WebRTC、VP9(2018年的文章)
  13. im即时通讯开发:万人群聊技术方案实践
  14. windows系统下ink!canvas-node安装
  15. 处理tree 树状结构,
  16. udev规则以及编写
  17. python 图书管理_Python-图书管理系统
  18. Time.deltaTime 用法
  19. find_in_set 函数 和 in 函数的区别用法
  20. Javaweb学习笔记 servlet篇

热门文章

  1. python分析数据图片_python数据分析常用图大集合
  2. 想学UI设计,先临摹学习GUI\WUI的成功案例!
  3. #芯片傻瓜使用宝典# 一文带你读懂DCP01xxxB系列的手册
  4. 基于openMV的颜色识别
  5. 基于51单片机的多路热电偶测温系统proteus仿真原理图PCB
  6. cocos creater 实现消除星星小游戏
  7. VS2010+.net4.0仿照苹果手机上的消除之星写了一个电脑版的功能简单(二)
  8. 2023元宇宙趋势一:VR/AR推动互联网3D化
  9. [附源码]java毕业设计家校通信息管理系统
  10. 9种在wpf/winForm等客户端集成Web网页方案详解,全网最全,快收藏!!