可变长度 顺序表 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/C++]函数参数的入栈顺序与可变参数的实现

转载地址:http://blog.sina.com.cn/s/blog_54f82cc2010133mn.html #include void foo(int x, int y, int z) ...

C语言:使用链表实现的可变长度字符串处理函数

//unlimitedstr.h struct usrstr { char str; struct usrstr * next; struct usrstr * back; }; str...

C语言用堆和双向链表实现可变长度数组

最近,我在研究网络程序,突然发现C语言原生数据的一个很要命的问题——必须提前声明使用内存的长度。 当然,C语言的这种要求是符合情理的,毕竟只有定长的变量才能放在函数的栈中。 可是网络上的数据一般不...

C/C++函数参数的入栈顺序,计算顺序和可变参数的实现

函数参数入栈顺序,参数计算顺序以及可变参数的实现

c语言实现顺序结构的线性表,可自动增加长度的

最近闲来无事,就顺便把数据结构再复习一下,在此把我刚写的c语言实现的顺序结构线性表送给大家,不要吝啬评论哦。 #include "stdio.h" #include "stdlib.h" #inc...

可变长度数据的管道实现方法

管道是两个进程之间的一种通讯方式。比如甲和乙

ArrayList 是怎么实现可变长度的,Capacity容量

都知道ArrayList是基于数组的,那它是怎么实现可变的呢? 创建ArrayList对象时,ArrayList有个带参数的构造函数,那个参数的意思就代表着ArrayList长度,默认情况是10。当数...

Ruby:方法中可变长度参数列表

1. *运算符 在方法定义中的参数列表里的最后一个参数前带一个星号( * )----有时候也叫splat运算符,表示可以将多个参数传递给方法。那些参数被封装成一个数组。 def calculate_...

多张表struts2导入excel数据 其中一张表是一对多 ,故excel横向cell长度可变

public String importExcle() {         TEmployee employee = (TEmployee) request.getSession().getAttr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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