| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构(C语言版)之线性表(上) -> 正文阅读 |
|
[数据结构与算法]数据结构(C语言版)之线性表(上) |
目录 ●数据结构作为计算机专业基础课,综合性强,抽象性高,在一定程度上增加了学习难度,本次我们共同从数据结构的基础探讨,由浅入深进行数据结构的学习。? ●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! ●本文只浅显的探讨了顺序表的基本知识,后续会进行链表的知识探讨。作者相信随着学习课程的深入,我们将会在对数据结构有更深的理解与收获! 设计出合适的数据结构及相应的算法 即:首先要考虑对相关的各种信息如何表示、组织和存储? 算法定义:一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列 ●本文只浅显的探讨了顺序表的基本知识,后续会进行链表的知识探讨。作者相信随着学习课程的深入,我们将会在对数据结构有更深的理解与收获! ●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! 前言●数据结构作为计算机专业基础课,综合性强,抽象性高,在一定程度上增加了学习难度,本次我们共同从数据结构的基础探讨,由浅入深进行数据结构的学习。?●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!正文●本文只浅显的探讨了顺序表的基本知识,后续会进行链表的知识探讨。作者相信随着学习课程的深入,我们将会在对数据结构有更深的理解与收获!一,什么是数据结构?我们先从一个公式开始: ?程序=算法+数据结构???这是由N.沃思(Niklaus ?Wirth)(图灵奖获得者)提出,其将数据结构的功能形象化的展现出来。这个公式将在以后的学习中深深地印在每个编程学习者的脑海里。 那么什么是数据结构?数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。 看到这里,相必大家和作者有一样的想法:不就是集合吗?集合高一就学了,简单!但当我拿到课本,听了(非常认真)老师讲的第一节课后,我就很快打消以上念头,并在心里告诉自己:是我肤浅了! 几乎每本教材都对数据结构开了一篇绪论课!这代表着数据结构绝对是个重量级的选手! 看到这里,读者肯定在想:扯这么多废话,还不进入正题? 哈哈哈,其实作者也不想,作者目前也是数据结构初阶的学习,对这门课程也是充满了未知,但相信大家在一起交流学习,一定能够深刻理解这门课程!下面还是需要引入一些必要知识,有助下面章节的学习。 1.电子计算机的主要用途:?早期: ? ? ? 主要用于数值计算。 ?后来: ? ? ? 处理逐渐扩大到非数值计算领域,能处理多种复杂的具有一定结构关系的数据 那如何求解非数值计算的问题?? ? ?设计出合适的数据结构及相应的算法 即:首先要考虑对相关的各种信息如何表示、组织和存储?数据结构的研究内容为: 研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作。 数据结构主要涉及领域及地位:数据结构的基本概念:? 数据结构分类:★?存储结构是逻辑结构在计算机内的映像二,算法算法定义:一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列算法的描述: ?(1)自然语言? (2)流程图 ?(3)程序设计语言?(4?伪码??(5)类C ? ? ? ? 算法的特性: ?输入 ?有0个或多个输入 输出 ?有一个或多个输出(处理结果) ? 确定性 ?每步定义都是确切、无歧义的 有穷性 ?算法应在执行有穷步后结束 ? 有效性 ?每一条运算应足够基本 算法的评价正确性 可读性 健壮性 高效性(时间代价和空间代价) 算法的效率的度量?算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量?? ? (1)事后统计 (2)事前分析估计 ?三,线性表?线性表的定义 ? ? ? ? ?线性表是由具有相同类型的有限多个数据元素组成的一个有序序列。 ??对于线性表,常用的基本运算用抽象数据类型描述如下: ADT List?{ 数据集合D:D={a1, a2,…, an},n≥0,D中的元素是DataType类型 数据关系R:R={r},r={ <ai, ai+1>| i=1,2,…,n-1}? 基本操作P: InitList(&L) :线性表的初始化。 操作结果:构造一个空的线性表L。 InsertList(&L,i ,x) :插入操作。 初始条件: 线性表L存在,插入位置1≤i≤n+1(n为插入前的表长), 操作结果:在线性表L的第i个位置插入一个值为x的新元素,插入后的表长加1。 DeleteList(&L,i):删除操作。 初始条件:线性表L存在,删除位置1≤i≤n(n为删除前的表长), 操作结果:在线性表L删除第i个位置的数据元素,删除后的表长减1。 IsEmptyList(L)?:?判断线性表是否为空。 初始条件:线性表L存在, 操作结果:若线性L为空,则返回值1;否则返回值0。 LocationList(L,x): 查找值为x结点位置。 初始条件:线性表L存在,已知数据元素x, 操作结果:若在L中找到第一个和x值相匹配的数据元素,则返回它在L中的位置;否则返回-1。 LengthList(L):求线性表L的表长。 初始条件:线性表L存在, 操作结果:返回线性表中所含元素的个数。 } ADT List; ? 线性表之顺序表?线性表采用顺序存储的方式存储就称之为顺序表。 1.顺序表的存储: ? 线性表的顺序存储结构示意图:?假设顺序表的每个结点占用k个内存单元,用location (ai)表示顺序表中第i个元素的存储地址。则有: ? ?location (ai+1) = location (ai) +k ? ?location (ai) = location(a1) + (i-1)*k? 其中,location(a1)是线性表的第一个元素a1的存储地址,也称线性表的起始位置或基地址。 ?顺序表的类型定义:
定义一个顺序表语句:SqList L;L是顺序变量,L.data表示顺序表的基地址,顺序表中的数据元素a1~an分别存放在L.data[0]~L.data[n-1]中,L.length表示顺序表的当前长度。 顺序表的初始化算法:
?顺序表的插入算法:
顺序表的删除算法:
顺序表的按值查找 :给定数据x,在顺序表L中查找第一个与它相等的数据元素。如果查找成功,则返回该元素在表中的位置;如果查找失败,则返回-1。
顺序表的排序算法:
顺序表的逆置算法:
线性表的存储结构分为(1)顺序存储结构(顺序表)(2)链式存储结构(链表)●本文只浅显的探讨了顺序表的基本知识,后续会进行链表的知识探讨。作者相信随着学习课程的深入,我们将会在对数据结构有更深的理解与收获!?●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/6 22:44:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |