线性表(建立、增删改)算法

线性表的创建和基本操作 &&逻辑与 ||逻辑或 线性表是最基本、最简单、也是最常用的一种数据结构。 线性表结构中,数据元素之间通过一对一首位相接的方式连接起来。 具体实现时,线性表可 以采用不同的存储策略。 该方案将线性表存储在一片连续的空间里,通过data,len , 和max三个属性元素。 组织成为了一个结构: data: 给出线性存储空间的起始地址; max : 指明线性表存储空间最 len : 当前线性表里的数据元素个数。 为了讨论简化,我们假设每个数据元素是一个整数: . 阅读详情


1.       根据一维数组中的n个元素建立一个有序线性表。

解:因为要新建线性表,所以考虑用链表而不是顺序表,否则需要频繁地移动表中元素。

Status ConstructList(LinkList &L,ElemType a[n])   {

              LinkListp, q, pre;

              L =(LinkList)malloc(sizeof(LNode)); //生成头结点

       if (!L)exit(OVERFLOW);

       p = (LinkList)malloc(sizeof(LNode)); //生成开始结点

       if (!p)exit(OVERFLOW);

      p->data = a[0]; p->next = NULL;

L->next = p;         //此时,L是只有一个头结点和开始结点单链表

 

for (int i = 1; i < n; i ++)    {

       pre = L;

       q = L->next;   //每次插入新结点时均从开始结点扫描

    while (q != NULL)   {

              if (q->data <a[i])       {

                     pre = q;

q = q ->next;

}

else { //找到插入位置(非表尾)

                                   p = (LinkList)malloc(sizeof(LNode)); //生成新插入结点

                            if (!p) exit(OVERFLOW);

       p->data = a[i];

   p->next= q;

   pre->next = p;

       break; //继续插入下一个元素

}

       }    

                 if (q == NULL) {

p =(LinkList)malloc(sizeof(LNode)); //生成新结点,插入表尾

                     if(!p) exit(OVERFLOW);

p->data =a[i];   p->next = q;

                  pre->next = p;

}

}

return OK;     

       }

 

2.       设计一个算法,将一个顺序表重新排列成以第一个结点为界的两部分,前一部分的数据元素的值均小于第一个结点中数据元素的值,后一部分元素的值均大于或等于第一个结点中数据元素的值。要求:该算法所采用的额外存储空间为O(1)。

解:让某个变量a等于顺序表的第一个结点的数据元素的值。然后从左向右扫描找到大于等于a的元素,从右向左扫描,找到小于a的元素,将它们进行交换,直到整个表扫描完成为止。注意:下面的算法只是将所有结点分成按要求的两部分,但是最后并没有将第一个结点“物理上”放置在这两部分中间,该结点仍然是第一个结点。

       Status partition(SeqList&L)   {

              int i = 0, j = L.length – 1;

       ElemType a = L.data[0], temp;

       while (i < j)   {

                     while (i < j &&L.data[i] < a) i ++;  // i最后指向大于等于a的元素

          while (i < j && L.data[j]>= a) j --;  //j 最后指向小于a的元素

          if (i < j)   {

                            temp =L.data[i];             //交换i、j所指向的元素

              L.data[i]=L.data[j];

              L.data[j]=temp;

                }

          }

              return OK;

       }

 

3.       编写一个算法将带头结点的单链表中值重复的结点删除,使所得的结果表中各结点的值均不相同。

 

解:由于单链表不一定有序,所以对于每个结点*p,从其后开始直到链表末尾扫描,判断是否存在与之值域相等的结点,若有,删除之。对应的算法如下:

 

Status DelelteList(LinkList &L)     {

       LinkList p= L->next, q, pre, r;

while (p!=NULL)     {

      q= p->next; pre = p;

  while (q!=NULL)      {

             if(q->data == p->data)     {  //若有重复结点,删除

                    r= q;

         pre->next = q->next;

         q = q->next;

         free(r);

             }

     else  {         //若无,继续扫描剩余结点

         pre = q;

                    q=q->next;

             }

      }

p=p->next;

}

return OK;

}

 

 

4.       编写一个算法,逆置一个带头结点的双向链表L。

解:将原来的双向链表一分为二,前一个链表由原来的头结点和开始结点组成,后一个链表由原来的双向链表中的剩余结点组成。然后依次从第二个链表中抽取出第一个结点插入到第一个链表的后结点之后。

      

      

 

       (非循环双向链表:头结点的prior域为NULL,终端结点的next域为NULL)

       StatusReverseDList(DLinkList &DL) {

              DLinkList p, q;

              if (DL->next != NULL)    {//DL是一个非空表

                     p = DL->next->next,

              DL->next->next = NULL;  //原来的开始结点变成终端结点,其next

//域应为NULL

              while(p!=NULL)      {

                            q = p->next;      //q用来保存下一个待插入结点的地址

p->next = DL->next;

                            DL->next->prior= p;

              DL->next = p;

              p->prior = DL;

              p = q;           //p将指向下一个待插入结点

          }

}

return OK;   

       }

 

(循环双向链表:头结点的prior域指向终端结点,终端结点的next域指向头结点)

StatusReverseDList(DLinkList &DL) {

              DLinkListp, q;

              if(DL->next != NULL)    {//DL是一个非空表

                     p= DL->next->next,

              DL->next->next= DL;  //原来的开始结点将变成终端结点,其next域

//应指向头结点

DL->prior->next = NULL; //为了保证下面while循环能终止

          DL->prior = DL->next;   //头结点的prior域应该指向开始结点

              while (p!=NULL)      {

                            q= p->next;      //q用来保存下一个待插入结点的地址

p->next= DL->next;

                            DL->next->prior= p;

             DL->next = p;

             p->prior = DL;

              p =q;           //p将指向下一个待插入结点

          }

}

returnOK;   

       }

GNSS接收机性能测试全攻略:从实验室到真实场景 本文系统介绍了GNSS接收机从实验室到真实场景的完整性能测试流程。首先通过GNSS模拟器进行射频传导测试,评估接收机的基础性能;其次进行天线OTA测试,考察整机系统表现;最后通过精心设计的外场路测,在复杂环境中验证其实际定位精度与可靠性。文章强调,只有结合可控的实验室验证与多变的外场挑战,才能对接收机性能做出全面、真实的评价。 阅读详情

相关推荐

银河麒麟系统V10 Server SP1 安装Oracle 19c

•oracle-database-preinstall-19c 这个工具会自动配置系统参数,创建 oracle 用户和组。比较方便。•••••银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中标麒麟、开放麒麟、星光麒麟——麒麟软件官方网站。

fuguimashu的博客 4321

【算法与数据结构】线性表

【算法与数据结构】线性表

H_Lu711的博客 1753

ENSP Pro VXLAN EVPN分布式网关部署配置

在BGP EVPN方式部署分布式网关的场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;转发平面的流程包括同子网已知单播报文转发、同子网BUM报文转发、跨子网报文转发。该方式实现的功能全面,支持主机IP路由通告、主机MAC地址通告、主机ARP通告,可以直接使能ARP广播抑制功能。如果在VXLAN网络中采用分布式网关,推荐使用此方式。对比集中式网关,分布式网关的arp条目比集中式网关的arp条目少,分布式网关只学习租户侧的arp条目,不学习网络侧的arp条目。

qq2353177176的博客 4559

数据结构:线性表

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。

梁辰兴的博客 2661

GBASE南大通用GBase 8s数据库-从零开始的手动安装与实例配置指南

本文详细介绍了GBASE南大通用GBase 8s数据库的手动安装与实例配置全过程,包括环境准备、用户创建、安装包准备、实例创建、环境变量配置等关键步骤。通过实战经验分享和常见问题解决方案,帮助用户快速掌握GBase 8s数据库的安装与配置技巧,确保数据库稳定运行。

weixin_29209825的博客 455

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

数据结构 - 线性表(C语言版)

主要讲述顺序表和单链表的基础操作

weixin_41733225的博客 2610

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6868

线性表的创建

建一存储学生信息(包含姓名和年龄)的线性表,要求用顺序存储结构实现,实现查询、插入和删除学生信息并将该表中的信息显示出来。2、通过该程序使学生能掌握顺序表结构的定义、顺序表的创建过程、顺序表的特点,以及如何遍历顺序表。1、要求用顺序表实现。

qq_58476985的博客 1497

AWS DevOps Agent 完全指南

AI 驱动的 SRE 队友,7×24 自主调查告警、定位根因、生成修复方案、预防未来故障。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 381

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4785

数据结构-线性表及顺序存储结构

线性表是具有相同特征的数据元素的一个有限序列(可以参考数组理解)。其中n为表长,当n = 0时线性表是一个空表。在线性表中每个数据元素有逻辑序号唯一确定,设序列中的第i( i 表示逻辑序号)个元素为ai(1 <= i <= n),则线性表的一般表示为a1是表头元素,an是表尾元素。

2301_81798038的博客 1300

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

【数据结构和算法】实现线性表中的静态、动态顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。我们本文讲解了,线性表中的顺序表的使用,我们分别实现了静态和动态的顺序表,这是数据结构的基础,我们接下来讲解的内容是线性表中的链表。

小王学代码 1503

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

线性表的顺序存储及增删改查

线性表的顺序存储及增删改查 代码 #include <bits/stdc++.h> #define MAXSIZE 10 using namespace std; typedef int Status; typedef int ElemType; typedef struct { ElemType *elem; int length; }SqList; Status InitList(SqList &L) { L.elem=new Elem

qq_47896802的博客 392

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

算法设计与分析——线性表

线性表是最基本、最简单、也是最常用的一种数据结构,一个线性表是n个具有相同特性的数据元素的有限序列

qq_57633498的博客 712

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构与算法——基础概念与线性表

相互之间存在一种或多种特定关系的数据元素的集合。

lufrednow_的博客 781

线性表的增删改查

本文介绍了线性表以及如何在代码中实践顺序表的增删查操作,给出具体代码并配备详细注释,读者阅读完后可以很好理解顺序表的增删查操作

Z20041027的博客 471

线性表及其应用

本节我们需要弄清如下问题: 线性表的定义 线性表的抽象数据类型 线性表的顺序存储结构 线性表的链式存储结构 顺序与链式存储结构比较 线性表的简单应用 线性表的扩展 线性表的定义 线性表(linear_list)是最基本和最常用的一类数据结构,它表示的是线 性结构。 在线性结构中,数据元素之间存在着一对一的关系,其特 点是数据元素之间按某种规定存在一个顺序关系。 线性表的抽象数据类型 线性表的顺序存储结构 线性表的链式存储结构 顺序与链式...

一越王超的博客 2209

【数据结构与算法】线性表

1、线性表类型及定义 零个或多个数据元素的有限序列 首先线性表是一个序列,所以说元素之间有顺序 若有多个元素,第一个元素无前驱,最后一个元素无后继,其他元素只有一个前驱和一个后继 2、线型表的顺序存储结构 顺序存储定义 用一段连地址连续的存储单元依次存放线性表的数据元素 ...

qq_43972714的博客 154

数据结构与算法[线性表的顺序存储结构]

package test; import java.util.Arrays; /** * 线性表的顺序存储结构 */ public class shunxuList { private int size=0; //当前的长度 private int length=1;//数组长度 private Object[] data;//数组 public shu...

weixin_39209728的博客 217

【数据结构】线性表(List)

数据结构中的顺序表、单链表、双链表、循环链表的基础知识,且还包含部分408真题(附有解析)。此外,含有关于链表的全部具体实现代码

2201_75475240的博客 2086

数据结构入门:线性表全解析(增删改查)

本文介绍了线性表这一基本数据结构,包括其定义、分类和特点。线性表是n个相同特性数据元素的有限序列,包含顺序表、链表、栈和队列等多种形式,具有一对一的前驱后继关系。重点阐述了顺序表的实现方式,通过数组将数据连续存储在内存中,并详细说明了其操作(增删改查)和实现要点,包括结构体封装、全局变量last的使用以及函数命名规范等。顺序表作为线性表的顺序存储实现,具有内存连续的特性。

Yxw5264的博客 416

# 基本数据结构与算法(线性表)

数据结构与算法(线性表) 线性表(线性存储结构) 就是把数据串起来,存放到物理地址中。将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构(简称线性表)。 顺序存储结构 如图3a将数据存储在连续的物理地址上。顺序表存储数据时候,将所有的数据在连续的地址上存储,中间不留间隙。 顺序表的初始化 使用顺序表之前,需要申请空间,还要记录申请的存储容量和表中数据元素的个数。 定义一个线性表,向里面放入元素 #include <stdio.h> #include &

不积跬步,无以至千里;不积小流,无以成江海 1031

数据结构与算法基础-Go语言版-1.线性表

目录 前言 一、线性表是什么? 1.定义 2.存储结构 二、线性表的实现 1.顺序表 1.1.1 顺序表的结构定义 1.1.2 顺序表的初始化 1.1.3 判断空表 1.1.4 顺序表的插入 1.1.5 顺序表的删除 1.1.6 顺序表的修改 1.1.7 顺序表的查找 2.链表 2.1.1 链表的结构定义 2.1.2 链表的初始化 2.1.3 判断空表 2.1.4 链表的插入 2.1.5 链表表的删除 2.1.6 链表的修改 2.1.7 链表的查找 三、练习

qq_41736299的博客 1585

线性表增删改的基本算法C实现

线性表(linearlist 或sequentlist)是一种最简单且最常用的数据结构,对以后链表、树、图的理解有很大的帮助。下面是实现代码 #include"stdio.h" #include"malloc.h" struct SqList{ int * listbase; int len;     //指定的存储空间 int size;     //表长度 };

行走的足迹 1334
上一篇: 输入个数不限的数字,以逗号为分隔,以回车键为结束,排序后以4个数每行输出
下一篇: 线性表(链表倒置、奇数偶数位置分成两个表实验)
peerless1024
博客等级 码龄11年 21粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值