#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. 函数的重载与 泛型(generic)有什么不同?
  2. yum提示Error: rpmdb open failed
  3. 全球及中国认知文档处理行业运营策略与应用前景分析报告2022版
  4. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜
  5. celeba数据集_轻松学 Pytorch 使用DCGAN实现数据复制
  6. 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
  7. MINA核心结构和处理消息的逻辑流程
  8. mysql查询不确定的信息_mysql-非常复杂的查询,不确定是否可行.涉及...
  9. LeetCode详细题解-Java版
  10. git顏色所代表的意义
  11. 学会了C语言究竟能干什么呢?
  12. python 惰性属性_python中惰性对象
  13. 性能测试分析软件汇总–开源、商业全部收集
  14. 微信严正提醒!再做这件事,封号处理
  15. labelme_json_to_dataset不能转换关键点的问题
  16. 实现https请求之旅
  17. http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题
  18. Warning: The VM will try to fix the stack guard now.It's highly recommended that you fix the library
  19. IP地址(IP Address)
  20. oracle常用函数之trim( )、ltrim( )、rtrim( )

热门文章

  1. Linux 查看及修改时区
  2. 人工智能--机器学习
  3. 第六篇:Ceph集群常见问题处理方法
  4. 抖音怎么快速上热门?这招太绝了!
  5. python ——python 浮点数和整数转换
  6. Synchonized 实现原理
  7. 无人驾驶货运卡车技术企业图森未来获C轮5500万美元融资丨Xtecher 融资消息
  8. Ipad2给人们的惊喜
  9. C++最经典塔防游戏代码,(高仿),完美复原原游戏,好玩到停不下来
  10. Java学习之第七天之Package包