#include<iostream>
#include<new>
#define MAXSIZE 1000
#define REALLOC 10
using namespace std;
template<typename T>
class sqlist{
public:
//构造函数初始化成员变量。
//析构函数释放空间。
sqlist(); //构造函数与类名字必须一样。
~sqlist(){ cout << "Destroy sqlist!\n" << endl; } //使用析构函数还得写拷贝构造函数和拷贝(重载)赋值(=)运算符。
//成员函数可以有返回值but构造函数不可以有。
void establishlist(T a[],int sizea);
void getlength();
T getelem(int xiabiao);
//T locelem(T e); //取满足条件的元素。白开水实现教程。
int locelem(T e, int compare(T s, T e)); //橙汁实现教程。
int listinsert(int weizhi, T yuansu); //插入操作返回位序。
void listdelete(int weizhi); //删除给定值元素。
void kuorong();
void clearlist();
void show();
private:
unsigned int length; // = 0;length代表的是元素个数,而非长度,对于数组元素进行修改操作的时候,都要对这个变量注意注意再注意。
//unsigned int 是无符号整形,从0开始的。而元素的个数是有意义的,所以大可直接设置无符号整型。
unsigned int capacity = 0; // = MAXSIZE;如果capacity=0,则线性表不存在!
T *data; //不知道什么类型的指针,因为T
};
template<typename T>
sqlist<T>::sqlist() //通过调用类的构造函数初始化成员变量。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值
{
length = 0;
capacity = MAXSIZE;
data = new T[capacity];//指针。
}
template<typename T>
void sqlist<T>::establishlist(T a[], int sizea)
{
length = sizea / sizeof(T);
unsigned int i;
for (i = 0; i < length; ++i) //因为sizeof出来的是无符号,单纯用int是为有符号,会报出来一个warning:有符号与无符号不匹配。
{
data[i] = a[i];
cout << i << " " << data[i] << endl;
}
}
template<typename T> //如果没有template这一串的话,就不用写<T>
void sqlist<T>::getlength() //返回类型需要写在类名的前面。
{
cout << length << endl;
}
template<typename T>
T sqlist<T>::getelem(int xiabiao)
{
return data[xiabiao];
}
/*template<typename T>
T sqlist<T>::locelem(T e){
for (i = 0; i < length; ++i)
{
if (data[i] == e)
return i;
}
}*///白开水。
template<typename T>
int sqlist<T>::locelem(T e, int compare(T s, T e)) //寻找与e满足compare关系的元素!返回该元素位序。
{
unsigned int i;
for (i = 0; i < length; ++i)
{
if (compare(data[i], e) == 1)
return i;
}
return 0;
}
template<typename T>
int compare(T s, T e)
{
return s == e;
}
template<typename T>
void sqlist<T>::kuorong()
{
capacity += REALLOC;
T *now = new T[capacity];
unsigned int i;
for (i = 0; i < capacity; ++i)
{
now[i] = data[i];
}
delete[](data);
data = now;
now = NULL;
}
template<typename T>
int sqlist<T>::listinsert(int weizhi, T yuansu)
{
++length; //涉及元素个数的变动。
//首先检查顺序表是不是满的,如果是满的则要新增空间。
if (length >= capacity)
kuorong();//调用扩容函数。
int i;
for (i = length - 1; i >= weizhi; --i)
data[i + 1] = data[i];
data[i + 1] = yuansu;
return i;
}
template<typename T>
void sqlist<T>::listdelete(int weizhi)
{
if (length >= capacity)
kuorong(); //调用扩容函数。
cout << data[weizhi] << endl; //输出将被删除元素的内容。
unsigned int i;
for (i = weizhi; i <= length - 1; ++i)
{
data[i] = data[i + 1];
}
--length;
}
template<typename T>
void  sqlist<T>::clearlist()
{
length = 0;
delete[]data;
}
template<typename T>
void sqlist<T>::show()
{
unsigned int i;
for (i = 0; i <= length - 1; ++i)
cout << data[i] << endl;
}
int main()
{
//在创建空表时,函数把容量扩充好了,所以容量在之后可不进行赋值,只在需要扩容的时候一般才有capacity出现。
int a[] = { 1, 2, 3434, 43, 5, 5, 5, 5, 6 }; //在这里通过创建数组,预备初始顺序表。
//(未实现)这一步也可以设置为char和int型分成两种进行创建选择生成数组。
int sizea = sizeof(a);
sqlist<int> sq; //创建该顺序表的对象。
printf("请选择:\n");
printf("0.显示当前顺序表\n");
printf("1.创建一个顺序表\n");
printf("2.获取此表的长度\n");
printf("3.查找下标定元素\n");
printf("4.元素是否在表中\n");
printf("5.于定点插入元素\n");
printf("6.于定点删除元素\n");
printf("7.清除数据表数据\n");
printf("8.--退出&&程序--\n");
int flag = 1;
char j;
while (flag)
{
cin >> j;
switch (j){
case '0':{
sq.show(); 
break;
}
case '1':{
sq.establishlist(a, sizea); //创建顺序表。
break;
}
case '2':{
sq.getlength(); 
break;
}
case '3':{
int xiabiao;
cin >> xiabiao;
cout << sq.getelem(xiabiao) << endl;
break;
}
case '4':{
int elem;
cin >> elem;
cout << sq.locelem(elem, compare) << endl;
break;
}
case '5':{
int weizhi, yuansu;
cin >> weizhi >> yuansu;
cout << sq.listinsert(weizhi, yuansu) << endl;
//sq.show();
break;
}
case '6':{
int weizhi;
cin >> weizhi;
sq.listdelete(weizhi);
//sq.show();
break;
}
case '7':{
sq.clearlist();
break;
}
case '8':{
cout << "---------退出程序---------" << endl;
flag = 0;
}
}
}
return 0;
}
//如何使用模板函数。
// sqlist<int>sq;
// sq.list();

数据结构-顺序表-c++语言-模板类实现代码(附详细解释) _清风明月相关推荐

  1. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

  2. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  3. C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)

    C语言/C++常见习题问答集锦[八十三]之数据结构顺序表{operand types are error: no match for "operator=="} 程序之美 前言 主 ...

  4. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  5. 数据结构--顺序表的使用

    数据结构--顺序表的使 #include<iostream> #include<cstdio> #include<cstring> using namespace ...

  6. c语言线性顺序表,C语言程序——线性顺序表.doc

    C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  7. 数据结构-顺序表(动态分配存储空间)

    数据结构-顺序表(动态分配存储空间) (1)顺序表的结构定义: 结构型定义:(动态分配存储空间) /*** 动态分配存储空间*/ #define InitSize 100 //动态分配存储空间时,不限 ...

  8. 数据结构——顺序表的基本操作

    目录 1.顺序表的定义 2.define和typedef 3.以下所有用到函数的声明 4.建表,为表开放空间 5.建表,并且输入表内的值 6.在L中第i个位置之前查人新的数据元素e,L的长度加1 7. ...

  9. Educoder头歌数据结构顺序表及其应用

    头歌实践平台答案educoder 数据结构-顺序表及其应用 第1关:顺序表的实现之查找功能 /***************************************************** ...

最新文章

  1. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
  2. python operator 多属性排序_又碰到一个非常实用的模块,以后的各种运算就用它了,python内置的常用包。
  3. Spring全局异常处理
  4. 如何用python制作九九乘法表_“九九乘法表”案例理解python循环语句
  5. python2 python3共存导致conda报错_Windows运维之Windows10下配置Python2和Python3共存 并用anaconda实现方便的包管理...
  6. 阿里开源自研语音识别模型DFSMN 准确率高达96.04%
  7. ios 7.1企业证书无线安装
  8. JavaScript的API设计原则
  9. Zip 文件覆盖漏洞曝光,Java、.NET、Go 生态集体中枪
  10. ImportError: No module named ‘keras_contrib‘
  11. 通过C语言编程一个小游戏(乐趣无边)
  12. 企业全面运营管理沙盘模拟心得_企业经营沙盘模拟心得总结【精选】
  13. linux抓包查看请求接口源ip,linux 抓包
  14. 微信开发者工具测试方法
  15. SAP 消息号 KE391:在 CO-PA中分配条件类型PR00的问题
  16. 计算机硬盘容量越大运行速度越快,你是不是也感觉电脑内存越大运行速度越快?...
  17. vl53l1x+stm32激光测距分析(待修改)
  18. 粗糙集理论介绍(一)(rough set)
  19. 微信小程序-视频弹幕的项目
  20. AES 对称加密算法

热门文章

  1. 组合模式(部分整体模式)—结构型
  2. Andorid面试题集
  3. AQ知识汇总(各处摘抄汇总的知识点)
  4. 温馨提示: 高考信号屏蔽到底是个什么鬼?
  5. 洛谷Latex数学公式大全
  6. 风机效率计算的python代码
  7. [ROS] rviz 可视化工具
  8. 性能监视器- Performance Monitor
  9. 语音录音转文字的方法使用过吗
  10. UML基本概念——动态视图