类实现代码如下:

 ;//默认的表空间大小
 template <class T>
 class SeqList{
     protected:
         T *data;//存放数组
         int maxSize;//表空间总大小
         int last;//当前表中最后一个元素的位置(从0开始计算)
         void reSize(int newSize);//重新设定表空间大小
     public:
         SeqList(int sz=defaultSize){//构造函数
             maxSize=sz;
             last=-;
             data=new T[sz];
             );
         }
         SeqList(SeqList<T>& L){//拷贝构造函数
             maxSize=L.size();
             last=L.length()-;
             data=new T[maxSize];
             );
             T value;
             ;i<=last;i++){
                 L.getData(i+,value);
                 data[i]=value;
             }

         }
         ~SeqList(){//析构函数
             delete[] data;
         }
         int size()const{//表空间总大小
              return maxSize;
         }
         int length()const{//表中元素的总个数
             ;
         }
         int search(T &x)const{//返回元素X在表中的位置(从1开始计算)
             ;i<=last;i++){
                 ;
             }
             ;
         }
         bool getData(int i,T &x)const{//取第i个表项的值放到x中(从1开始计算)
             &&i<=last+){
                 x=data[i-];
                 return true;
             }else{
                 return false;
             }
         }
         void setData(int i,T &x){//将x中的值放到第i个表项中 (从1开始计算)
             &&i<=last+){
                 data[i-]=x;
             }
         }
         bool insert(int i,T& x){//插入x在第i个表项后 (从1开始计算)
             ) return false;
             ||i>last+) return false;
             for(int j=last;j>=i;j--)
                 data[j+]=data[j];
             data[i]=x;
             last++;
             return true;
         }
         bool remove(int i,T &x){//删除第i个表项值,并放入x  (从1开始计算)
             ) return false;
             ||i>last+) return false;
             x=data[i-];
             for(int j=i;j<=last;j++)
                 data[j-]=data[j];
             last--;
             return true;
         }
         bool isFull(){//判断表是否为空
             )?true:false;
         }
         bool isEmpty(){//判断表是否为满
             )?true:false;
         }
         void input(){//输入
             while(true){
                 cout<<"请先输入你需要输入表中元素的个数:(不能超过"<<maxSize<<")";
                 cin>>last;
                 last--;
                 ) break;
             }
             cout<<"输入元素:"<<endl;
             ;i<=last;i++)
                 cin>>data[i];
         }
         void output(){//输出
             cout<<"输出元素:"<<endl;
             ;i<=last;i++)
                 cout<<data[i]<<" ";
             cout<<endl;
         }
         //SeqList<T> operator=(SeqList<T> &L);“=”重载,功能、函数实现同拷贝构造函数 

 }; 

测试代码如下:

 void menu(){
     cout<<"1.输入一组元素"<<endl;
     cout<<"2.输出一组元素"<<endl;
     cout<<"3.取第i个表项的值放到x中(从1开始计算) "<<endl;
     cout<<"4.将x中的值放到第i个表项中 (从1开始计算) "<<endl;
     cout<<"5.插入x在第i个表项后 (从1开始计算) "<<endl;
     cout<<"6.删除第i个表项值,并放入x  (从1开始计算)"<<endl;
     cout<<"7.返回元素X在表中的位置(从1开始计算)"<<endl;
     cout<<"8.调用拷贝构造函数"<<endl;
     cout<<"9.退出"<<endl;
 } 

 template <class T>
 void function(int num,SeqList<T> *sl){
     int i;T x;
     switch(num){
         :
             sl->input();
             break;
         :
             sl->output();
             break;
         :
             cin>>i;
             sl->getData(i,x);
             cout<<x<<endl;
             break;
         :
             cin>>x>>i;
             sl->setData(i,x);
             break;
         :
             cin>>x>>i;
             sl->insert(i,x);
             break;
         :
             cin>>i;
             sl->remove(i,x);
             break;
         :
             cin>>x;
             i=sl->search(x);
             cout<<i<<endl;
             break;
         :
             {
                 SeqList<T> *sl2=new SeqList<T>(*sl);
                 sl2->output();
 //                sl->remove(2,x);
 //                sl2->output();
                 delete sl2;
             }//这里要用花括号!http://www.cnblogs.com/RealOnlyme/articles/2579628.html
             break;
         default:
             exit();
     }
 }
 int main(int argc, char** argv) {
     int x;
     SeqList<int> *sl=new SeqList<int>();
     while(true){
         menu();
         cin>>x;
         function(x,sl);
     }
     delete sl;
     ;
 }

小结:

  1.顺序表中各个元素必须相继存放于一个连续的空间内,不准跳跃地存放。(与一维数组的区别)

  2.顺序表中最复杂的操作就是搜索,插入和删除运算。

  3.分析搜索的时间代价主要看循环内数据的比较次数,次数从1到n,平均比较(n+1)/2个表项。

  4.分析插入删除的时间代价主要看循环内的数据移动次数。插入时有n+1个插入位置,移动次数从0到n,平均移动n/2个表项;删除时有n个删除位置,移动次数从0到n-1,平均移动(n-1)/2个表项。

  

顺序表(C++实现)的更多相关文章

  1. jdk顺序表笔记

    一.AbstractCollection 提供了集合的最大实现 继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator 二.fail-fast策略 该策略在集合 ...

  2. c++顺序表基本功能

    头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...

  3. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  4. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  5. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  6. java顺序表和树的实现

    一.顺序表 1.线性表 //java顺序表的实现,如ArrayList就是用线性表实现的,优点是查找快,缺点是添加或删除要移动很多元素,速度慢 public class SequenceList { ...

  7. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  8. 顺序表C语言版

    #include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...

  9. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

  10. C语言 线性表 顺序表结构 实现

    一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...

随机推荐

  1. 约瑟夫问题的java实现

    约瑟夫问题,又称丢手帕问题.试着实现了一下,实现逻辑简单,没有复杂的算法,适合新手参考. //参数step指步进值,步进到几则出列 //参数count指共有几个人 public static int ...

  2. 看完这篇文章才对【GIT】有了大彻大悟的认识

    git定义:版本管理工具 历史:没有git的时候,我们修改完一个文件,要先把文件拷贝一个副本到备份文件夹中,还要建个文档来记录当前文件的信息和操作记录.当文件多的时候,人工操作起来将是个非常辛苦非常庞 ...

  3. quagga源码分析--大内总管zebra

    zebra,中文翻译是斑马,于是我打开了宋冬野的<斑马,斑马>作为BGM来完成这个篇章,嘿嘿,小资一把! zebra姑且戏称它是quagga项目的大内总管. 因为它负责管理其他所有协议进程 ...

  4. 证据权模型(C#版)

    证据权法是通过计算和利用各种不同证据的权重(表示相对重要性)并将多种证据结合起来,预测某个时间是否会发生的一种方法 证据权法以概率论中的贝叶斯定理为基础.设D表示要一个随机事件.用P(D)表示这一事件 ...

  5. 最强DE 战斗力 (nyoj 541)

    题解链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=541 几天前百度题解后用数学知识AC的,后来大牛说这是一道动态规划题. 网上的数学解题链接 ...

  6. JTree事件

    package com.wf; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swin ...

  7. System.Data.DbType和数据库映射关系

    有如下类型的映射对照: System.Data.SqlClient.SqlDbType  System.Data.OleDb.OleDbType System.Data.Odbc.OdbcType S ...

  8. Jenkins配置和使用

    之前整理了Jenkins的下载和安装过程,有需要的可以参考我的博客,地址:   http://www.cnblogs.com/luchangyou/p/5981884.html 接下来整理一下Jenk ...

  9. CSU 1812 三角形和矩形

    湖南省第十二届大学生计算机程序设计竞赛$J$题 计算几何. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...

  10. centos7如何安装pandoc

    1 Install stack 1.1 Add the appropriate source repository: curl -sSL https://s3.amazonaws.com/downlo ...