所谓顺序表指的是线性表中元素存储的方式是连续的,即在逻辑上相邻的元素在内存上也是相邻的。所有的元素都可以实现随机存取。 但缺点是,删除的个别操作会移动大量元素。

代码实现如下:

头文件:

#pragma once#include <iostream>
#include <assert.h>
#define Swap(a,b,c) ((c)=(a),(a)=(b),(b)=(c))
using namespace std;typedef enum {FALSE,TRUE}Status;template<class T>
class SeqList
{
public:SeqList(int sz = DefaultSize){capacity = sz > DefaultSize ? sz : DefaultSize;base = new T[sz];size = 0;}~SeqList(){delete[]base;base = NULL;capacity = size = 0;}public:Status IsFull() const{if (size >= capacity)return TRUE;elsereturn FALSE;}Status IsEmpty() const{if (size >= capacity)return FALSE;elsereturn TRUE;}Status push_back(const T& x){return insert_pos(end(), x);}Status push_front(const T& x){return insert_pos(begin(), x);}void Show_list()const{for (size_t i = 0; i < size; ++i){cout << base[i] << " ";}cout << endl;}size_t length() const{return size;}size_t begin() const{return 0;}size_t end() const{return size;}Status pop_back(){return delete_pos(begin());}Status pop_front(){return delete_pos(end());}Status delete_pos(size_t p){if (p < 0 || p > size){cout << "位置非法 " << " 不能删除!" << endl;return FALSE;}for (size_t i = p; i < size; i++){base[i] = base[i + 1];}size--;return TRUE;}Status insert_pos(size_t p, const T& x){if (Inc() && IsFull()){cout << "空间满 " << " 不能插入!" << endl;return FALSE;}if (p < 0 || p > size){cout << "位置非法 " << " 不能插入!" << endl;return FALSE;}for (size_t i = size; i > p; --i){base[i] = base[i - 1];}base[p] = x;size++;return TRUE;}/*Status insert_value(T& x){if (IsFull())return FALSE;sort();int i = begin();for (; i < size; ++i){if (x <= base[i]){break;}}insert_pos(i, x);return TRUE;}*/Status insert_value(T& x){if (Inc() && IsFull()){cout <<"满," <<x<<"不能插入!" << endl;return FALSE;}sort();size_t i = 0;while (i < size && x > base[i])i++;insert_pos(i, x);return TRUE;}void delete_value(T& x){int pos;while (pos = find(x), pos != -1)delete_pos(pos);}size_t find(const T& x)const{for (size_t i = 0; i < size; ++i){if (x == base[i])return i;}return -1;}T getvalue(size_t pos) const{if (pos > size){cout << "位置非法 " << endl;return -1;}return base[pos];}Status modify(size_t pos,T& x){if (pos > size){cout << "位置非法 " << endl;return FALSE;}base[pos] = x;return TRUE;}void clear(){size = 0;}void destroy(){if (base)delete[]base;size = capacity = 0;}Status sort(){T tmp;for (size_t i = 1; i < size; i++){for (size_t j = 0; j < size-i; j++){if (base[j] > base[j + 1])Swap(base[j], base[j + 1], tmp);}}return TRUE;}Status resver(){T tmp ;size_t top = begin();size_t rear = end()-1;while (top < rear){Swap(base[top], base[rear], tmp);top++;rear--;}return TRUE;}Status Inc(){T* NewBase = new T[capacity + IncSize];assert(NewBase != NULL);return FALSE;memcpy(NewBase, base, sizeof(T)*size);delete[]base;base = NewBase;capacity += IncSize;}Status merge(SeqList<T>& lt1, SeqList<T>& lt2){lt1.sort();lt2.sort();size_t i = 0;size_t j = 0;size_t k = 0;while (i < lt1.size && j < lt2.size){if (lt1.base[i] < lt2.base[j])base[k++] = lt2.base[j++];elsebase[k++] = lt2.base[i++];}while (i < lt1.size)base[k++] = lt1.base[i++];while (j < lt2.size)base[k++] = lt1.base[j++];size = lt1.size + lt2.size;return TRUE;}private:enum {DefaultSize = 20,IncSize=4};T* base;size_t capacity;size_t size;
};

值得注意的是,我们提供了函数Status Inc(),当顺序表满时,可以从内存重新申请空间,增长方式为定长增长。即一种类似与pool的设计概念。

【C++数据结构】顺序表的模版类实现相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 数据结构——顺序表的合并

    数据结构--顺序表的合并 具体要求:写一个函数,其函数的功能是将非递增顺序表LA和LB合并到非递增顺序表LC中 数据结构-顺序表的操作之合并顺序表 一.顺序表的结构 首先要定义的是顺序表的结构体,只有 ...

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

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

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

    #include<iostream> #include<new> #define MAXSIZE 1000 #define REALLOC 10 using namespace ...

  9. 数据结构顺序表基本流程

    生活中很多事物是有顺序关系的,如班级座位从前到后是按排的顺序,从左到右是按列的顺序,可以很方便的定位到某一个位置,但如果座位是散乱的,就很难定位. 在程序中,经常需要将一组(通常是同为某个类型的)数据 ...

最新文章

  1. linux c printf 打印输出null
  2. linux系统调用挂钩方法总结
  3. CAS Server(三):配置MySQL数据库验证用户名密码
  4. 工作371-javascript判断数组为空
  5. Ubuntu16.04安装QQ机器人
  6. 深入探讨PageRank(二):PageRank原理剖析
  7. Android Animation学习(四) ApiDemos解析:多属性动画
  8. 2018-4-18 Linux学习笔记
  9. 数据结构:邻接表法存储有向图
  10. 2015-iOS面试总结(上)
  11. 提取二值图像中信号骨架matlab,matlab 二进制图像轮廓提取
  12. 闲置光猫改成无线打印服务器,简单几步,让闲置路由器变身专业无线AP-无线ap设置...
  13. 深度学习名词(中英文对照)
  14. 华硕笔记本电脑电池保修范围
  15. 【转】京东抢购服务高并发实践
  16. 关于计算机游戏的英语读法,[计算机游戏用英语怎么说]电脑游戏用英语怎么说...
  17. 测试工作中常见问题及优化方案
  18. Java——将汉字转为汉语拼音工具类
  19. 关于《机器学习实战》中创建决策树的核心代码分析
  20. -1岁的产品经理日记——part2(笔经,群面篇)

热门文章

  1. python数据类型定义为_一Python 数据类型
  2. 在外打工好久不回老家,用python为家里贴上新年春联
  3. AKO气动夹管阀VMP系列90 PSI
  4. 关于滑雪问题的一些解法(综合自网络)
  5. 如何判断输入的数是奇数还是偶数
  6. mysql主从复制于读写分离_MySQL主从复制读写分离
  7. python特征提取代码_Python进行特征提取的示例代码
  8. 初学APM 行用性能管理/监控
  9. Kobe- python数据类型的学习
  10. 我父亲是一个收棒子的