线性表

原创作者:Daniel

时间:2017.9.28

地点:大连理工大学软件学院

线性表定义:具有相同数据类型的n个数据元素按顺序排列成的一组关系。

线性表的特点:

1、有唯一头元素

2、有唯一尾元素

3、除头节点外,每一个元素都有一个直接前驱

4、除尾节点外,每一个元素都有一个直接后继

5、具有反对称性和可传递性

线性表的存储结构:

1、链式存储

通过申请连续的静态数组空间来实现线性表,数据之间的关系又数据的实际物理地址所反应。

2、顺序存储

使用指针将数据的前驱后继关系表示出来,并且通过指针遍历来访问节点元素

代码实现:

1、顺序表

template<typename T>
class List{
private:
    T* arraylist;
    int size;
    int curLen;
public:
    List(int size){
        arraylist = new T[size];
        this->size = size;
        curLen = 0;
    }
    ~List(){
        delete [] arraylist;
        curLen = 0;
    }
    bool append(T& a){
        if(curLen + 1 > this->size){
            return false;
        }
        arraylist[curLen] = a;
        return true;
    }
    bool insert(T& a, int address){
        if(address > size - 1 || address < 0){
            return false;
        }
        
        for(int i = curLen - 1; i >= address ; i--){
            arraylist[i + 1]= arraylist[i]; 
        }
        arraylist[address] = a;
        return true;
    }
};

2.链表

template <typename T>
class List{
private:
    Node<T>* head;
    int size;
public:
    List(int size){
        this->size = size;
        head = new Node<T>;
        Node<T> * temp = head;
        for(int i = 0 ; i < size; i++){
            Node<T>* p = new Node<T>;
            p->next = NULL;
            temp ->next = p;
            temp = p;
        }
    }
    ~List(){
        Node<T>* temp = head;
        while(temp) {
            delete temp;
            temp = temp->next;
        }
    }
    bool append(T& a);
    bool insert(T& a, int address);
    int  find(T& a);
    bool write(T&a , int address);
};

循环链表与双向链表

双向链表是在节点中添加了前驱指针和后继指针变量,可以双向遍历。

循环链表中就是将尾节点的next = head;构成一个循环。循环链表为空是 head-> next = head;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值