数据结构-线性表的顺序表基本操作代码实现(超级详细清晰 C++实现)

这篇具有很好参考价值的文章主要介绍了数据结构-线性表的顺序表基本操作代码实现(超级详细清晰 C++实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是顺序表?

  • 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

  • 顺序表:可动态增长的数组,要求数据是连续存储的

  • 特点:随机访问

二、创建顺序表

  • 顺序既可以静态分配,也可以动态分配。在静态分配时,由于数组的大小和空间已经事先固定,一旦空间占满,再加入新的数据就会产生溢出进而导致程序崩溃

  • 而在动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间占满,就另外开辟一块更大的空间,用来替换原来的空间,从而达到扩充存储数组空间的目的,而不是一次性的划分。

typedef struct{
    int *data;   //指示动态分配的指针
    int length, size;  //分别表示总空间大小以及长度
}sqlist;

三、顺序表的一些基本操作

(一)初始化操作

bool InitList(sqlist &L){
    L.data = new int[Maxsize];
    if (!L.data)
        return false;   //如果顺序表不为空,则返回false
    L.length = 0;
    L.size = Maxsize;
    return true;
}

(二)返回链表长度

int Length(sqlist L){
    return L.length;
}

(三)添加元素

在顺序表的末尾添加元素:

bool AppendElem(sqlist &L, int e){
    if (L.length >= Maxsize)
        return false;
    L.data[L.length] = e;
    L.length++;
    return true;
}

(四)查找元素

如果该元素存在与顺序表中,返回该元素的位置i,不存在则返回0

int LocatedElem(sqlist L, int e){
    int i;
    for (int i = 0; i < L.length; i++){
        if (L.data[i] == e)
            return i + 1;
    }
    return 0;   //如果没有找到,返回0
}

(五)查找指定位置的元素

需要先判断该下标i是否合法,不合法返回-1;否则返回该位置元素的值;

int GetElem(sqlist L, int i){
    if (i<1 || i>L.length)
        return -1;   //如果输入的下标不合理,返回-1
    return L.data[i - 1];
}

(六)插入元素

删除和插入元素图片解释:

数据结构顺序表代码,数据结构,线性表,顺序表,数据结构,链表,c++,Powered by 金山文档

在表L的第i个位置插入指定元素e

bool InsertElem(sqlist &L, int i, int e){
    if (i<1 || i>L.length + 1)
        return false;    //检查插入的位置是否合理,不合理返回false
    if (L.length >= Maxsize)
        return false;
    for (int j = L.length; j >= i; j--){
        L.data[j ] = L.data[j-1];
    }
    L.data[i - 1] = e;
    L.length++;
}

(七)删除元素

删除表L第i个位置的元素,并用e返回删除位置元素的值

bool DeleteElem(sqlist &L, int i, int &e){
    if (i<1 || i>L.length)
        return false;
    e = L.data[i - 1];
    for (int j = i; j < L.length; j++){
        L.data[j - 1] = L.data[j];
    }
    L.length--;
    return true;
}

(八)打印表中所有元素

void PrintList(sqlist L){
    cout << "顺序表的总空间大小为:" << L.size << ",已占用空间为:" << L.length << endl;
    for (int i = 0; i < L.length; i++){
        cout << L.data[i] << " ";
    }
    cout << endl;
}

(十)判断表是否为空

bool Empty(sqlist L){
    if (L.data)
        return true;
    else
        return false;
}

四、销毁表

void Destroy(sqlist &L){
    if (L.data)
        delete[] L.data;
    L.length = 0;
    L.size = 0;
}

五、完整代码示例

#include<iostream>
using namespace std;
#define Maxsize 100

typedef struct{
    int *data;
    int length, size;  //分别表示总空间大小以及长度
}sqlist;

bool InitList(sqlist &L){
    L.data = new int[Maxsize];
    if (!L.data)
        return false;   //如果顺序表不为空,则返回false
    L.length = 0;
    L.size = Maxsize;
    return true;
}

int Length(sqlist L){
    return L.length;
}

bool AppendElem(sqlist &L, int e){
    if (L.length >= Maxsize)
        return false;
    L.data[L.length] = e;
    L.length++;
    return true;
}

int LocatedElem(sqlist L, int e){
    int i;
    for (int i = 0; i < L.length; i++){
        if (L.data[i] == e)
            return i + 1;
    }
    return 0;   //如果没有找到,返回0
}

int GetElem(sqlist L, int i){
    if (i<1 || i>L.length)
        return -1;   //如果输入的下标不合理,返回-1
    return L.data[i - 1];
}

bool InsertElem(sqlist &L, int i, int e){
    if (i<1 || i>L.length + 1)
        return false;    //检查插入的位置是否合理,不合理返回false
    if (L.length >= Maxsize)
        return false;
    for (int j = L.length; j >= i; j--){
        L.data[j ] = L.data[j-1];
    }
    L.data[i - 1] = e;
    L.length++;
    return true;
}
bool DeleteElem(sqlist &L, int i, int &e){
    if (i<1 || i>L.length)
        return false;
    e = L.data[i - 1];
    for (int j = i; j < L.length; j++){
        L.data[j - 1] = L.data[j];
    }
    L.length--;
    return true;
}

void PrintList(sqlist L){
    cout << "顺序表的总空间大小为:" << L.size << ",已占用空间为:" << L.length << endl;
    for (int i = 0; i < L.length; i++){
        cout << L.data[i] << " ";
    }
    cout << endl;
}

bool Empty(sqlist L){
    if (L.data)
        return true;
    else
        return false;
}

void Destroy(sqlist &L){
    if (L.data)
        delete[] L.data;
    L.length = 0;
    L.size = 0;
}

int main(){
    sqlist list;
    int e, index;

    cout << "顺序表初始化..." << endl;

    //1.初始化
    if (InitList(list)) {
        cout << "顺序表初始化成功!" << endl;
    }
    else cout << "顺序表初始化失败!" << endl;

    PrintList(list);

    //2.添加元素
    int count;
    cout << "请输入要添加元素的个数:" ;
    cin >> count;
    for (int i = 0; i < count; i++){
        cout << "请输入要添加元素e的值:";
        cin >> e;
        if (AppendElem(list, e))
            cout << "添加成功!" << endl;
        else
            cout << "添加失败!" << endl;
    }
    PrintList(list);

    //3.查找元素,存在则返回该元素的位置
    cout << "请输入要查找的元素e的值:";
    cin >> e;
    index = LocatedElem(list, e);
    if (index)
        cout << "该元素" << e << "在表中的第" << index << "个位置" << endl;
    else
        cout << "表中不存在该元素" << endl;
    PrintList(list);

    //4.返回第i个元素的值
    cout << "请输入要查找元素的位置:";
    cin >> index;
    if (GetElem(list, index) != -1)
        cout << "第" << index << "个位置的值为:" << GetElem(list, index) << endl;
    else
        cout << "输入的下标不合理!" << endl;
    PrintList(list);


    //5.插入元素
    cout << "请输入要插入的元素位置";
    cin >> index;
    cout << "请输入要插入的元素的值";

    cin >> e;

    if (InsertElem(list, index, e)) {
        cout << "插入成功!" << endl;
    }
    else {
        cout << "插入失败!" << endl;
    }

    PrintList(list);

    //6.删除元素
    cout << "请输入要删除的元素的位置" << endl;
    cin >> index;

    if (DeleteElem(list, index,e)) {
        cout << "删除成功!" << endl;
    }
    else {
        cout << "删除失败!" << endl;
    }
    cout << "删除的元素的值为:" << e << endl;
    PrintList(list);

    //7.销毁
    Destroy(list);

    system("pause");
    return 0;

}

六、总结

以上就是线性表中顺序表的讲解以及C++代码示例,希望大家都能熟练掌握顺序表这个知识点,如果有什么问题,欢迎大家来找我交流。最后,希望小伙伴们能点赞收藏加关注,十分感谢。文章来源地址https://www.toymoban.com/news/detail-732507.html

到了这里,关于数据结构-线性表的顺序表基本操作代码实现(超级详细清晰 C++实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(C语言实现)——顺序表的介绍及基本操作的实现

    今天我们来学习数据结构中的线性表,本文主要介绍一种常见的线性表——顺序表。 本文着重介绍顺序表的概念以及顺序表各种基本操作的实现过程(C语言实现),以后会更新更多的数据结构,觉得有用的朋友可以三连关注一波,一起学习。 线性表(linear list)是n个具有相

    2023年04月13日
    浏览(52)
  • 【数据结构】顺序表的实现及基本操作完整代码(C语言实现)

    顺序表:逻辑上相邻的数据元素,其物理次序也是相邻的 这里之所以要把int分别创建新名字为SqlElemType和Status,是因为实际应用时数据的类型不一定是int型,这样设置方便修改元素类型,提高代码适用性。 LocateElem的时间复杂度为O(n) InsertSq的时间复杂度为O(n) DeleteSq的时间

    2024年04月12日
    浏览(50)
  • C语言---数据结构实验---顺序表的合并---链表的基本操作---重点解析约瑟夫问题

    实验的写法多种多样,但本文并未采用 #define 定义容量的写法,这样写已经是很老旧过时的写法。所有实验主体采用均为动态开辟,后续如果利用 C++ 来写或许会应用更多语法… 本篇展示数据结构的两个实验 其中,重点分析约瑟夫问题 实验中代码的命名风格等均与下方博客

    2024年02月16日
    浏览(69)
  • 【数据结构】(顺序表)C语言实现线性表顺序存储的创建、插入、删除、查找、输出等基本操作(附完整代码)

    要求:利用书本上的线性表的顺序存储结构定义 #define MAXSIZE 100 //顺序表可能达到的最大长度 typedef struct{ ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) } SqList; 1)编写完成下列功能的函数: (1)初始化一个线性表

    2024年04月28日
    浏览(48)
  • 【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

       堆栈Stack 和 队列Queue 是两种非常重要的数据结构,两者都是特殊的线性表: 对于堆栈,所有的插入和删除(以至几乎所有的存取)都是在表的同一端进行 对于队列,所有的插入都是在表的一端进行,所有的删除(以至几乎所有的存取)都是在表的另一端进行。    堆

    2024年02月07日
    浏览(45)
  • 【玩转408数据结构】线性表——线性表的顺序表示(顺序表)

            通过前文,我们了解到线性表是具有相同数据类型的有限个数据元素序列;并且,线性表只是一种逻辑结构,其不同存储形式所展现出的也略有不同,那么今天我们来了解一下线性表的顺序存储——顺序表。         顺序表指的是将 逻辑上相邻的元素 存储在 物理位

    2024年02月19日
    浏览(52)
  • 数据结构(六)——线性表的顺序实现

    🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年后端赛道第第七 ⁣⁣⁣⁣ ⁣⁣⁣⁣

    2024年01月25日
    浏览(64)
  • 数据结构---双向链表的基本操作

    头插法 遍历链表 尾插法 头删法 尾删法 按位置插入数据 按位置删除数据 dooublelinklist.c doublelinklist.h doublemain.c

    2024年02月22日
    浏览(53)
  • 【数据结构】——单链表的基本操作(带头结点)

            单链表解决了顺序表需要大量连续存储单元的缺点,但单链表附加指针域, 存储密度较顺序表低(考点!!) 。由于单链表的元素离散地分布在存储空间中,所以单链表是 非随机存取 的存储结构,即不能直接找到表中某个特定的结点。当查找某个特定结点时,需要

    2024年02月05日
    浏览(51)
  • 【数据结构与算法】二、线性表的顺序表示【硬核】

    图书表的顺序存储结构类型定义: 在调用函数的过程中,当形参为引用类型时,实参和形参占用了相同的空间 2.4.1 线性表的基本操作: 2.4.2 线性表L的初始化 2.4.3 销毁和清空线性表L 2.4.4 求线性表L的长度以及判断线性表L是否为空 2.4.5 顺序表的取值(根据位置i获取相应位置

    2023年04月26日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包