顺序表(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 ...
随机推荐
- 用ajax对数据进行查看人员信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jps 命令使用
jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简 ...
- IP、子网的详述 ——IP分类、网关地址,子网掩码、子网作用(转)
IP地址 在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机.为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址.就好像每一个住宅都有唯一的门 ...
- java 异常处理机制及说明。
又抄袭了一篇文章,其实就是想保存到自己的博客中而已,文章出处:http://www.cnblogs.com/LilianChen/p/4639471.html 1. 如何捕获异常 try { 可能会出 ...
- is和as关键字
c# 中 is和as 操作符是用来进行强制类型转换的 is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常 object o = new object(); if ( ...
- java基础练习 3
import java.util.Scanner; public class Third { /*计算字符串中子串出现的次数 (5 分数)*/ public static void main(Stri ...
- hdu 1890 Robotic Sort(splay 区间反转+删点)
题目链接:hdu 1890 Robotic Sort 题意: 给你n个数,每次找到第i小的数的位置,然后输出这个位置,然后将这个位置前面的数翻转一下,然后删除这个数,这样执行n次. 题解: 典型的sp ...
- delphi用TAdoStoredProc调用存储过程,兼容sql2005、2008、2014的远程事务问题
delphi7写的程序,在sql2000里没问题,调用sql2008.2014里的存储过程时,如果存储过程里操作了大量数据,很容易会莫名其妙的自己撤销掉,但是程序还识别不到,认为还在正常执行.今天尝试 ...
- 替换ubuntu 14.04的源
1. 背景(为什么要替换)安装ubuntu,默认源是(http://extras.ubuntu.com/ubuntu),国内访问很慢...当我们用apt-get安装软件包或者更新时有时很慢,所以才想到 ...
- CUDA学习ing..
0.引言 本文记载了CUDA的学习过程~刚开始接触GPU相关的东西,包括图形.计算.并行处理模式等,先从概念性的东西入手,然后结合实践开始学习.CUDA感觉没有一种权威性的书籍,开发工具变动也比较快, ...