可变长度 顺序表 C++实现

原创 2007年09月20日 12:07:00

 简单顺序表 C语言实现 的C++改进版 实现顺序表长度自动增加

顺序表是以数组为存储结构的线性表。由于数组中各元素的地址是可计算的,所以查找定位操作 有很高的执行效率。但是这种顺序存储结构的缺点也相当明显,要获得连续的内存空间就必须一次性申请,而在程序执行之前往往无法精确得到所需空间的大小。这时通常先确定一个合适的数组长度,如果后来空间不够,再重新申请一个更大的空间并把原先空间的数据转移过来。可以预见到,如果数据庞大的话,这个转移操作是相当耗费资源的。所以顺序表往往用在一些经常查找却很少改动的数据上。

程序清单:SeqList.h    SeqListTest.cpp

SeqList.h

/**//* SeqList.h */
/**//* Coding by nyzhl */

template 
<class T>
class SeqList...{
    
public:
        SeqList(
int init=50int incr=10);
        
bool IsEmpty() const;
        
int Locate(T dat) const;
        T GetData(
int index) const;
        
void Insert(int index, T dat);
        T Delete(
int index);
    
private:
        
int size,increaseSize,last;
        T 
*data;
}
;
//构造函数
template <class T>
SeqList
<T>::SeqList(int init, int incr) ...{
    size 
= init; //顺序表初始大小
    data = new T[size];
    increaseSize 
= incr; //顺序表递增大小
    last = -1;
}

//判断是否为空
template <class T>
bool SeqList<T>::IsEmpty() const ...{
    
return last == -1;
}

//查找定位所找数据的下标
template <class T>
int SeqList<T>::Locate(T dat) const ...{
    
for(int i=0; i<=size; i++)
        
if(data[i] == dat) return i;
    
return -1;
}

//读取指定位置的数据
template <class T>
T SeqList
<T>::GetData(int index) const ...{
    
return data[index];
}

//在指定位置插入数据
template <class T>
void SeqList<T>::Insert(int index, T dat) ...{
    
if(last==size-1...{
        T 
*temp = new T[size+increaseSize];
        
for(int i=0; i<size; i++)
            temp[i] 
= data[i];
        T 
*garbage = data;
        data 
= temp;
        delete(garbage);
        size 
+= increaseSize;
    }
 //increasement
    for(int i=last; i>=last; i--)
        data[i
+1= data[i];
    data[index] 
= dat;
    last 
++;
}

//删除指定位置的数据
template <class T>
T SeqList
<T>::Delete(int index) ...{
    
if(IsEmpty()) return NULL;
    T dat 
= data[index];
    
for(int i=index; i<last; i++)
        data[i] 
= data[i+1];
    last 
--;
    
return dat;
}

 

SeqListTest.cpp

/**//* SeqListTest.cpp */
/**//* Coding by nyzhl */

#include 
<stdio.h> 
//我的编译器总是说找不到iostream.h郁闷~
#include "SeqList.h"

void main() ...{
    SeqList
<int> *sl = new SeqList<int>(50,10);
    
for(int i=0; i<100; i++)
        sl
->Insert(i,i);
    
for(int i=0; i<100; i++)
        printf(
"%d ",sl->GetData(i));
    sl
->Delete(50);
    printf(
"%d ",sl->GetData(50));
    printf(
"%d ",sl->Locate(45));
    printf(
"%d ",sl->Locate(55));
    printf(
"%d ",sl->Locate(50));
}

【C++学习笔记】标准库容器Vector可变长度实现原理

C++ ,vector
  • Veahlin
  • Veahlin
  • 2016年10月10日 18:39
  • 938

C++ 可变长数组类的实现

涉及到构造函数,析构函数,复制构造函数,运算符=, [ ] 的重载等。 #include using namespace std; class CArray { public: CAr...
  • guo503604087
  • guo503604087
  • 2016年04月07日 09:13
  • 1610

用c++实现 c++顺序表的实现(采用模板)

函数实现数据的插入(头插&&尾插)、删除(头删&&尾删)、查找、按位置插入、按位置删除、顺序表求长、顺序表清除、顺序表摧毁、数据的逆置以及数据排序   main函数 #include"SeqList....
  • S0Soul
  • S0Soul
  • 2015年05月25日 11:26
  • 2028

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

利用模板类实现顺序表的操作 实现的功能:  1.尾插,2.头插,3.显示,4.尾删,5.头删,6.按位置,7.插按值插,8.按位置删,9.按值删,10.按值查,11.求表长,12.清除数据,13.摧毁...
  • ZhongQi0808
  • ZhongQi0808
  • 2015年05月24日 15:12
  • 2341

ArrayList: 长度可变的数组

实训的第五天,天天对着电脑,眼睛刺痛,突然发现一个编程人员真的不容易...
  • lan266548_ning
  • lan266548_ning
  • 2017年05月19日 20:53
  • 208

顺序表基本操作的代码实现:C++实现

顺序表基本操作的代码实现
  • yybmec
  • yybmec
  • 2015年08月30日 16:17
  • 5451

C++学习之用数组实现顺序表

开始学习数据结构,路还长,加油!! 用C++的template实现顺序表SequenceList ,第一次上传完整代码,比较菜。 SequenceList.h: #ifndef SEQ_...
  • jacky_wang_123
  • jacky_wang_123
  • 2013年06月07日 14:23
  • 1262

C++数据结构实验报告:顺序表实现

继续学习
  • MChuajian
  • MChuajian
  • 2017年09月20日 13:18
  • 780

实现可变长度字符串的类

实现可变长度字符串的类
  • lecky1991
  • lecky1991
  • 2015年11月11日 17:30
  • 389

数据结构 顺序表(c++实现)

实现了顺序表的基本操作 代码均为原创,转载请注明源地址blog.csdn.net/u012350104 欢迎留言交流 实现的功能: =====开始===== ==增加(1)== ...
  • u012350104
  • u012350104
  • 2015年09月27日 20:39
  • 996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可变长度 顺序表 C++实现
举报原因:
原因补充:

(最多只允许输入30个字)