数据结构之顺序表

这篇具有很好参考价值的文章主要介绍了数据结构之顺序表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顺序表

顺序表的定义

 

 

     线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列

     顺序表 ---用顺序存储的方式实现线性表。顺序存储---把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

     如何知道一个数据元素大小? sizeof(ElemType) ,ElemType 是顺序表中存放的数据元素类型。Eg: sizeof(int) = 4B,4字节

顺序表有两种实现方式 ---- 静态分配和动态分配。

     静态分配申请固定大小的内存空间,大小一旦确定就无法改变,存在比较严重的缺陷,在大多数情况下会浪费大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。

    动态分配是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。C语言动态申请和释放内存空间的函数是 malloc,free 函数。它们的头文件是 #include <stdlib.h>。malloc 函数的参数,指明要分配多大的连续内存空间。

    malloc的全称是memory allocation,malloc函数原型是 void * malloc(unsigned int size);void 中文翻译为无类型,void * 就是无类型指针,可以指向任何类型的地址。malloc函数返回开辟空间的首地址,只接收一个形参,malloc函数是为了在内存的动态存储区中分配一个长度为size的连续空间。

     接着看这句代码 : int *p = (int *)malloc(sizeof(int));  

    其中的解释是:int *p代表一个以int类型地址为内容的指针变量,(int *) 是让计算机知道怎么去划分开辟的空间,就是以几个字节为单元去划分,int占4个字节。如果实在理解不了的话,先记住就行。

    接下来就是如何用代码实现顺序表啦。

    大概思路:首先先去了解一个顺序表里有什么属性,还可以设置一个表的初始长度(也可以反映出动态分配的内存空间大小)。顺序表的属性有顺序表的最大容量,以及目前顺序表的实际长度(顺序表的数据个数),从这些属性出发,用代码定义一个顺序表(假装先告诉计算机,我在你内部有了一个顺序表)。然后我们还要真正地创建出一个顺序表(动态分配的方式),再对顺序表的属性进行初始化,刚开始的顺序表肯定为空表,即实际长度为0,最大容量等于表的初始长度。

   关于顺序表的增删改查操作,画图的话,很好理解,建议在网上找相关视频,自己再画图理解。代码刚开始先慢慢理解了,再模仿着,带着记忆,独立敲出来。

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 #define InitSize 10  //表的初始长度
 4 typedef struct 
 5 {
 6     int *data;
 7     int MaxSize;//顺序表的最大容量
 8     int length; //顺序表的实际长度
 9 }SeqList;
10 void InitList(SeqList &L)//初始化函数的定义,引用做函数参数,可以简化指针修饰实参,就是在函数体内能直接改变实参的值
11 {
12     L.data = (int *)malloc(InitSize * sizeof(int));
13     L.length = 0;
14     L.MaxSize = InitSize;
15 }
16 bool InsertList(SeqList &L, int i, int e) //在L的位序 i 处插入元素e,用bool类型是为了给用户一个反馈
17 {
18     if(i < 1 || i > L.length+1) //判断插入的位置是否越界,length从0开始的,i是位序,位序比length大1,
19                                  //所以当i=length+1是临界值
20         return false;
21     if(L.length >= L.MaxSize) //判断顺序表是否已满
22         return false;
23     for(int j = L.length; j >= i; j--)//用for循环将第i个元素及之后的元素后移,这样才能把e放进去,自己画图能很好理解
24     {
25         L.data[j] = L.data[j-1]; //后移数据覆盖,等号是从右到左赋值
26     }
27     L.data[i-1] = e; //在位置i处放入e
28     L.length++; //更新当前长度
29     return true;
30 }
31 bool ShowList(SeqList &L) //显示出顺序表中的数据
32 {
33     if(L.length == 0)
34        return false;
35     for(int i = 0; i < L.length; i++)
36     {
37         printf("%d",L.data[i]);
38         printf(" ");
39     }
40     printf("\n");
41     return true;
42 }
43 bool DeleteList(SeqList &L, int i, int &e) //在L的位序 i 处删除元素e
44 {
45     if(i < 1 || i > L.length)//判断是否越界
46         return false;
47     e = L.data[i-1];//将被删除的元素赋值给e
48     for(int j = i; j < L.length; j++)//用for循环将第i个位置后的元素前移,自己画图理解
49     {
50         L.data[j-1] = L.data[j]; //前移数据覆盖
51     }
52     L.length--; //更新当前长度
53     return true;
54 }
55 int UpdateList(SeqList &L, int i, int num)//把位序为i的数修改为num
56 {
57     L.data[i-1] = num;
58     return L.data[i-1];
59 }
60 int GetList(SeqList &L, int i)//按位查找操作。获取表L中第 i 个位置的元素的值。
61 {
62     return L.data[i-1];//和访问普通数组的方法一样
63 }
64 int main()
65 {
66     SeqList L;//声明一个顺序表
67     InitList(L); //初始化函数的调用
68     InsertList(L,1,1);
69     InsertList(L,2,2);
70     InsertList(L,3,3);
71     InsertList(L,4,4);
72     InsertList(L,5,5);
73     printf("顺序表内的数据是:");
74     ShowList(L);
75     int e;
76     if(DeleteList(L,3,e)) //删除第3个位置上的数,并把这个数返回
77     {
78         printf("删除的数是:%d\n",e);
79     }
80     printf("顺序表内的数据是:");
81     ShowList(L);
82     printf("查找的数是:%d\n",GetList(L,1));//查找第1个位置上的数,并返回
83     printf("修改成功的数是:%d\n",UpdateList(L,1,0));//修改第1个位置上的数为0,并返回
84     printf("顺序表内的数据是:");
85     ShowList(L);    
86     
87     
88     return 0;
89 }

 

 

    

  增删改查操作成功后,结果显示:

   

数据结构之顺序表

 

   顺序表的特点:

 

1,随机访问,即可以在O(1) 时间内找到第 i 个元素。代码实现:data[ i-1],静态分配和动态分配都一样

 

2,存储密度高,每个节点只存储数据元素

 

3,拓展容量不方便

 

4,插入,删除数据元素不方便

 

 

 

 

 

   文章来源地址https://www.toymoban.com/news/detail-564572.html

 

到了这里,关于数据结构之顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数据结构 · 线性表 | 顺序表

    啊我摔倒了..有没有人扶我起来学习.... 👱 个人主页: 《 C G o d 的 个 人 主 页 》 color{Darkorange}{《CGod的个人主页》} 《 C G o d 的 个 人 主 页 》 交个朋友叭~ 💒 个人社区: 《 编 程 成 神 技 术 交 流 社 区 》 color{Darkorange}{《编程成神技术交流社区》} 《 编 程 成 神 技 术

    2024年02月02日
    浏览(50)
  • 数据结构-线性表-顺序表

    线性表的定义:由n(n=0)个数据特性相同的元素构成的有限序列,称为线性表。当n=0时称之为空表。 因为构件线性表时元素数组已经使用静态分配,所以在此只需要对线性表的长度执行初始化即可。 获取数据需要参数: sqList:需要给定一个线性表从而获取数据,因为只是拿值

    2024年02月08日
    浏览(48)
  • 数据结构——线性表①(顺序表)

    线性表是一种数据结构,它是由n个具有 相同数据类型 的数据元素a1,a2,…,an组成的 有限序列 。 其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。 线性表可以用 顺序存储结构 或 链式存储结构

    2024年02月06日
    浏览(54)
  • 数据结构---顺序表示的线性表

             数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简言之,数据

    2024年02月16日
    浏览(54)
  • 数据结构: 线性表(顺序表实现)

    线性表(linear list)是 n 个具有相同特性的数据元素的有序序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表: 顺序表,链表,栈,队列,字符串… 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删

    2024年02月14日
    浏览(50)
  • 数据结构:线性表之-顺序表

    目录 1.线性表概念 1.1 什么是顺序列表 1.2 线性表 2.顺序表实现 将有以下功能: 详细过程 顺序表的动态存储 顺序表初始化 尾插 扩容 头插 更改后的尾插 尾删 头删 打印 释放内存 优化顺序表 (任意位置插入删除) 优化后的头插尾插 优化后的头删尾删 查找和删除 进行装饰(菜单

    2024年02月10日
    浏览(51)
  • C/C++数据结构---顺序表---线性存储结构

    个人主页: 仍有未知等待探索_小项目,洛谷刷题,数据结构-CSDN博客 专题分栏---数据结构: 数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、知识储备 二、引例  三、顺序表 第一步,先创建一个顺序表类型 第二步,定义和初始化顺序表    第三步,顺序表的基本操作

    2024年02月08日
    浏览(42)
  • 数据结构——线性表之顺序表

    目录 一.线性表 二.顺序表实现  2.1 概念及结构  2.2 动态顺序表 2.2.1 初始化与销毁函数 2.2.2 打印函数 2.2.3 尾插函数 2.2.4 尾删函数 2.2.5 扩容函数 2.2.6 头插函数 2.2.7 头删函数 2.2.8 任意位置插入函数 2.2.9 查找函数 2.2.10 任意位置删除函数  2.2.11 修改函数 三.完整代码 四.力扣

    2024年02月07日
    浏览(49)
  • 数据结构(二)----线性表(顺序表,链表)

    目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序表的按值查找: 顺序表的特点: (2)单链表 •单链表的实现 不带头结点的单链表

    2024年04月16日
    浏览(57)
  • 【数据结构】线性表与顺序表

    ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 它是一种在实际中广泛使用的数据结构,常见的线性表:顺序表

    2024年02月07日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包