C++顺序表的实例代码

本文实例为大家分享了C++实现顺序表的具体代码,供大家参考,具体内容如下

#include <iostream>
using namespace std; 

typedef int DataType; 

class SeqList
{
public:
  SeqList()
    :_a(NULL)
    , _size(0)
    , _capacity(0)
  {} 

  SeqList(const SeqList& s)
    :_a(new DataType[s._size])
    , _size(s._size)
    , _capacity(s._capacity)
  {
    memcpy(_a, s._a, sizeof(DataType)*s._size);
  } 

  SeqList& operator=(const SeqList& s)
  {
    if (this != &s)
    {
      DataType* tmp = new DataType[s._size];
      delete[] _a;
      _a = tmp;
      memcpy(_a, s._a, sizeof(DataType)*s._size);
      _size = s._size;
      _capacity = s._capacity;
    } 

    return *this;
  } 

  //SeqList& operator=(SeqList s)  //若传引用会改变引用对象的值
  //{
  // swap(_a, s._a);
  // swap(_size, s._size);
  // swap(_capacity, s._capacity); 

  // return *this;
  //} 

  ~SeqList()
  {
    if (_a)
    {
      delete[] _a;
    }
  } 

  void PushBack(DataType d)
  {
    CheckCapacity();
    _a[_size] = d;
    _size++;
  } 

  void PopBack()
  {
    if (_size > 0)
    {
      _size--;
    }
    else
    {
      cout << "顺序表为空" << endl;
    }
  } 

  void PushFront(DataType d)
  {
    CheckCapacity(); 

    int i = (int)_size;
    for (; i > 0; i--)
    {
      _a[i] = _a[i - 1];
    }
    _a[0] = d;
    ++_size;
  } 

  void PopFront()
  {
    if (_size > 0)
    {
      int i = 0;
      for (; i < (int)_size; i++)
      {
        _a[i] = _a[i + 1];
      }
      _size--;
    }
    else
    {
      cout << "顺序表为空" << endl;
    }
  } 

  void Print()
  {
    if (_size > 0)
    {
      int i = 0;
      for (; i < (int)_size; i++)
      {
        cout << _a[i] << " ";
      }
      cout << endl;
    }
    else
    {
      cout << "顺序表为空" << endl;
    }
  } 

  void Insert(size_t pos, DataType d) //在pos之前插入一个数据
  {
    CheckCapacity(); 

    if (_size > 0)
    {
      if (pos <= 0 || pos > _size)
      {
        cout << "pos位置非法" << endl;
      }
      else
      {
        int i = 0;
        for (i = (int)_size + 1; i > pos - 1; i--)
        {
          _a[i] = _a[i - 1];
        }
        _a[pos - 1] = d;
        _size++;
      }
    }
    else
    {
      PushFront(d);
    } 

  } 

  void Erase(size_t pos) //删除pos位置的数据
  {
    if (_size > 0)
    {
      if (pos <= 0 || pos > _size)
      {
        cout << "pos位置非法" << endl;
      }
      else
      {
        int i = pos - 1;
        for (; i < (int)_size; i++)
        {
          _a[i] = _a[i + 1];
        }
        _size--;
      }
    }
    else
    {
      cout << "顺序表为空,无法进行删除" << endl;
    }
  } 

  int Find(DataType d)
  {
    int i = 0; 

    for (; i < (int)_size; i++)
    {
      if (_a[i] == d)
      {
        return i + 1;
      }
    }
    return 0;
  } 

private:
  void CheckCapacity()
  {
    if (_size == _capacity)
    {
      _capacity = _capacity * 2 + 3;
      _a = (DataType*)realloc(_a, sizeof(DataType)*_capacity);
    }
  } 

private:
  DataType* _a;
  size_t _size;
  size_t _capacity;
}; 

以下为测试函数

#include "SeqList.h"; 

void Test1()
{
  SeqList s1;
  s1.PushBack(1);
  s1.PushBack(2);
  s1.PushBack(3);
  s1.PushBack(4);
  s1.Print();
  SeqList s2(s1);
  s2.Print();
  s2.PopBack();
  s2.PopBack();
  s2.PopBack();
  s2.PopBack();
  s2.PopBack();
  s2.Print();
  s2.PushFront(4);
  s2.PushFront(3);
  s2.PushFront(2);
  s2.PushFront(1);
  s2.Print();
  s2.PopFront();
  s2.Print();
  s2.PopFront();
  s2.PopFront();
  s2.PopFront();
  s2.PopFront();
  s2.PopFront();
  SeqList s3;
  s3 = s1;
  s3.Print();
} 

void Test2()
{
  SeqList s1;
  s1.PushBack(1);
  s1.PushBack(2);
  s1.PushBack(3);
  s1.PushBack(4);
  s1.Print(); 

  //s1.Insert(1, 0);
  //s1.Print(); 

  /*s1.Erase(1);
  s1.Erase(1);
  s1.Erase(1);
  s1.Erase(1);
  s1.Print();*/ 

  int i = s1.Find(5);
  cout << i << endl;
} 

int main()
{
  //Test1();
  Test2(); 

  system("pause");
  return 0;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现顺序表的方法

    废话不多说了,直接给大家上关键代码了. #pragma once #include <assert.h> template<class T> class SeqList { public: SeqList() :_a(NULL) ,_size(1) ,_capacity(1) {} SeqList(T* a, size_t size) :_a(new T[size]) ,_size(size) ,_capacity(size) { for (size_t i = 0; i <

  • C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include<iostream> using namespace std; #define MAXSIZE 15 typedef int DataType; typedef struct { DataType data[MAXSIZE]; //通常用一位数组来描述顺序表的数据存储 int SeqLength; /*线性表长度*/ } SeqList; SeqList *Init

  • 利用C++简单实现顺序表和单链表的示例代码

    本文主要给大家介绍了关于C++实现顺序表和单链表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 一.顺序表示例代码: #include <assert.h> #include <iostream> using namespace std; typedef int Datatype; class SeqList { public: SeqList() :_array(NULL) ,_size(0) ,_capacity(0) { } SeqList(const

  • 如何在C++中建立一个顺序表

    准备数据 复制代码 代码如下: #define MAXLEN 100 //定义顺序表的最大长度struct DATA{ char key[10]; //结点的关键字  char name[20]; int age;};struct SLType //定义顺序表结构 { DATA ListData[MAXLEN+1];//保存顺序表的结构数组 int ListLen;   //顺序表已存结点的数量 }; 定义了顺序表的最大长度MAXLEN.顺序表数据元素的类型DATA以及顺序表的数据结构SLTyp

  • C++顺序表的实例代码

    本文实例为大家分享了C++实现顺序表的具体代码,供大家参考,具体内容如下 #include <iostream> using namespace std; typedef int DataType; class SeqList { public: SeqList() :_a(NULL) , _size(0) , _capacity(0) {} SeqList(const SeqList& s) :_a(new DataType[s._size]) , _size(s._size) ,

  • C语言实现动态顺序表的实现代码

    C语言实现动态顺序表的实现代码 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.线性表采用顺序存储的方式存储就称之为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 静态实现:结构体内部只需两个成员,其中一个为固定大小(MAX)的数组,用来存放我们的数据.数组大小我们可以通过在头文件中改变MAX的值来改变. 动态实现:在内存中开辟一块空间,可以随我们数据数量的增多来扩容. 来看看动态的顺序表实现: 1.seqli

  • C语言顺序表的实现代码

    本文实例为大家分享了C语言实现顺序表的具体代码,供大家参考,具体内容如下 seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> #define SEQLIST_INIT_SIZE 8 #define INC_SIZE 3 //空间增量的大小 typedef int ElemType; typedef stru

  • C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. 接下来看看静态的顺序表,直接上代码: SeqList.h #define _CRT_SECURE_NO_WARNINGS 1 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h> #include <stdlib.h&g

  • Vue表单实例代码

    什么是 Vue.js? Vue.js 是用于构建交互式的 Web 界面的库. Vue.js 提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API. Vue.js 特点 简洁: HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单. 数据驱动: 自动追踪依赖的模板表达式和计算属性. 组件化: 用解耦.可复用的组件来构造界面. 轻量: ~24kb min+gzip,无依赖. 快速: 精确有效的异步批量 DOM 更新. 模块友好: 通过 NPM 或 Bower

  • spring security数据库表结构实例代码

    PD建模图 建模语句 alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_AUTH; alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_RESO; alter table SYS_RESOURCES drop constraint FK_SYS_RESO_REFERENCE_SYS

  • Python数据结构之顺序表的实现代码示例

    顺序表即线性表的顺序存储结构.它是通过一组地址连续的存储单元对线性表中的数据进行存储的,相邻的两个元素在物理位置上也是相邻的.比如,第1个元素是存储在线性表的起始位置LOC(1),那么第i个元素即是存储在LOC(1)+(i-1)*sizeof(ElemType)位置上,其中sizeof(ElemType)表示每一个元素所占的空间. 追加直接往列表后面添加元素,插入是将插入位置后的元素全部往后面移动一个位置,然后再将这个元素放到指定的位置,将长度加1删除是将该位置后面的元素往前移动,覆盖该元素,然

  • hibernate多表操作实例代码

    多表操作之多对多关系简介 思路就是: 在数据库底层通过添加中间表来指定关联关系. 在双方的实体中添加一个保存对方的集合 在双方的配置文件中使用set标签和many-to-many标签来进行关联关系的配置.即可完成! 调用Hibernate的相关的API,操作就行了. 需要注意的地方 首先是数据库中表的创建 这里有一个小例子: 多对多的核心表,第三方表.table: create table thrid( one_id int not null, two_id int not null, cons

  • MyBatis动态创建表的实例代码

    项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常见的我们会把日志.设备实时位置信息等存入数据表,并且以一定时间段生成一个表来存储,log_201806.log_201807等.在这里我们用MyBatis实现,会用到动态SQL. 动态SQL是Mybatis的强大特性之一,MyBatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此对动态sql进行处理. 在动态sql解析过程中,#{ }与${ }的效果是不一样的:

  • C/C++实现线性顺序表的示例代码

    目录 线性顺序表简介 C语言实现代码 C++语言实现代码 线性顺序表简介 使用顺序存储结构的线性存储结构的表为线性顺序表,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,线性顺序表操作没有限制,线性顺序表优点是可以使用下标获取和修改元素,线性顺序表缺点是不可以直接插入和删除元素. C语言实现代码 #include<stdio.h>//包含标准输入输出文件 #include<stdlib.h>//包含标准库文件 typedef struct//定义类型定义结构体 {

随机推荐