顺序表(C++实现)
类实现代码如下:
;//默认的表空间大小
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++实现)的更多相关文章
- jdk顺序表笔记
一.AbstractCollection 提供了集合的最大实现 继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator 二.fail-fast策略 该策略在集合 ...
- c++顺序表基本功能
头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- java顺序表和树的实现
一.顺序表 1.线性表 //java顺序表的实现,如ArrayList就是用线性表实现的,优点是查找快,缺点是添加或删除要移动很多元素,速度慢 public class SequenceList { ...
- 数据结构顺序表删除所有特定元素x
顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...
- 顺序表C语言版
#include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- C语言 线性表 顺序表结构 实现
一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...
随机推荐
- 火狐浏览器下使用jquery修改img的src
onUploadComplete': function (file, data) { //$("#submit").removeAttr("disabled") ...
- Elasticsearch 5.0 _source field的简单认识
前言:本文的目的是为后续磁盘空间利用优化做铺垫,主要知识点来源于官网 一._source是什么 _source field是我们在PUT数据时候的json body: PUT store_index/ ...
- Xamarin原生跨平台概述(精简概述,命中要害。PS:无图)
Xamarin原生跨平台:原生界面.原生性能.原生API(与H5比较): 1.C#可以访问Andrid.IOS原生API,也可以调用C#系统类型,如Syetem,System.IO;2.原理:基于Mo ...
- PHP常用之封装分页工具类
分页基本上是每个项目都会使用到的,所以呢,把它封装成一个工具类,以后直接调用就可以了(虽然TP框架的灰常强大,但是自己封一个也未尝不可.),这样既省时又省力还赚'工分'. 我封的这个分页工具类还比较完 ...
- jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册
简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...
- 办理英属哥伦比亚大学(本科)学历认证『微信171922772』UBC学位证成绩单使馆认证University of British Columbia
办理英属哥伦比亚大学(本科)学历认证『微信171922772』UBC学位证成绩单使馆认证University of British Columbia Q.微信:171922772办理教育部国外学历学位 ...
- JS代码:设为首页 加入收藏
// JavaScript Document // 加入收藏 <a onclick="AddFavorite(window.location,document.title)" ...
- 学习Sass(一)
一.什么是sass? 写过css的都知道,css是用来改变页面样式的.但它不是一种编程语言,没有变量,函数,继承等功能,只能一条条抒写样式语句很死板.在这个工具决定效率的时代,这是不能容忍的事情.怎样 ...
- nginx(2)
上一篇: nginx(1) 负载均衡: linux集群的一种常见方式,即由多台服务器组成一个服务器集合实现某个特定需求,其中每台服务器都是等价的,从而实现负载均摊的目的. 反向代理: 是指以代理服务器 ...
- java的三种构造器
重叠构造器:不可取: javabeans模式:不可取: Builder模式:可取.