美文网首页
线性表的定义及实现

线性表的定义及实现

作者: 代号027 | 来源:发表于2016-05-19 20:50 被阅读134次

线性表的逻辑结构

线性表是由n个类型相同的数据元素组成的有限序列,记为(a1,a2,…,ai-1,ai,ai+1,…,an)。其中,这里的数据元素可以是原子类型,也可以是结构类型。线性表的数据元素存在着序偶关系,即数据元素之间具有一定的次序。在线性表中,数据元素ai-1在ai的前面,ai又在ai+1的前面,可以把ai-1称为ai的直接前驱元素,ai称为ai+1的直接前驱元素。ai称为ai-1的直接后继元素,ai+1称为ai的直接后继元素。

image

在线性表中,除了第一个元素a1,每个元素有且仅有一个直接前驱元素;除了最后一个元素an,每个元素有且只有一个直接后继元素。

顺序表的插入:

image

线性表中顺序表的实现(C++语言描述):

#include <iostream>
#include <cstring>
using namespace std;

//自定义顺序表类Vector
class Vector {

//设置顺序表的size和length
//其中size是指顺序表的最大尺寸
//length是指顺序表中data的长度
private:
    int size, length;
    int *data;

public:

    Vector(int input_size) {
        size = input_size;
        length = 0;
        data = new int[size];
    }
    ~Vector() {
        delete[] data;
    }

    //在插入操作中,根据下标loc,插入value
    //插入后为保顺序,loc后的元素挨个向后偏移一个位置,切顺序表长度增加
    bool insert(int loc, int value) {
        if (loc < 0 || loc > length) {
            return false;
        }
        if (length >= size) {
            return false;
        }
        for (int i = length; i > loc; --i) {
            data[i] = data[i - 1];
        }
        data[loc] = value;
        length++;
        return true;
    }

    
    int search(int value) {
        for (int i = 0; i < length; ++i) {
            if (data[i] == value) {
                return i;
            }
        }
        return -1;
    }
    
    //删除操作,删除某一个元素时,后面的元素一次向前偏移一个位置,顺序表长度减少
    bool remove(int index) {
        if (index < 0 || index >= length) {
            return false;
        }
        for (int i = index + 1; i < length; ++i) {
            data[i - 1] = data[i];
        }
        length = length - 1;
        return true;
    }
    
    void print() {
        for(int i=0; i<length; i++)
        {
            if(i > 0)
            {
                cout << " ";
            }
            cout << data[i];
        } 
        cout << endl;
    }
};

int main() {
    Vector a(2);
    cout << a.insert(0, 1) << endl;
    cout << a.insert(0, 2) << endl;
    a.print();
    cout << a.remove(1) << endl;
    a.print();
    cout << a.search(0) << endl;
    cout << a.search(1) << endl;
    return 0;
}

相关文章

  • 第二章 线性表

    主要讨论线性结构 2.1 线性表的类型定义及基本操作 线性表的类型定义 线性表的基本操作

  • 线性表的定义及实现

    线性表的逻辑结构 线性表是由n个类型相同的数据元素组成的有限序列,记为(a1,a2,…,ai-1,ai,ai+1,...

  • 数据结构基础学习之线性表

    线性表的学习 学习目标 线性表的定义 线性表的存储方式和表达方式 基本实现 基本操作实现 双向链表插入和删除实现 ...

  • 数据结构课程 第二周 线性表--顺序表

    线性表的类型定义 线性表顺序存储表示及实现 逻辑上相邻的元素在物理上也相邻。任意一个元素可以随机存取。O(n) 用...

  • 数据结构之顺序表

    Num01-->线性表定义及顺序表和链表 Num02-->顺序表的基本形式 Num03-->顺序表的结构与实现 T...

  • 线性表

    线性表的基本概念与实现 顺序表和链表的比较 顺序表的结构体定义和基本操作 链表的结构体定义和基本操作 线性表的基本...

  • C语言数据结构——线性表循环队列(静态数组实现方式)

    队列相关知识及操作请参看上一章 C语言数据结构——线性表循环队列(动态数组实现方式) 一、队列数据类型定义 二、队...

  • 基于数组实现线性表

    所有线性表接口的定义: /** * 定义列表的接口,所有列表该实现的约定 * 增删改查 * @author Adm...

  • 2 线性表

    线性表的概念 定义和特征 抽象数据类型 存储结构 运算分类 顺序表 实现 多维数组 链表 实现 实现方法比较 栈 ...

  • 34_栈的概念及实现(上)

    关键词:栈的定义、栈的操作、栈的实现、StaticStack.h的实现 0. 栈的定义 栈是一种特殊的线性表 栈仅...

网友评论

      本文标题:线性表的定义及实现

      本文链接:https://www.haomeiwen.com/subject/pqvgrttx.html