线性表--顺序表的操作

数据结构实验一_线性表、顺序表基本操作的编程实现(C语言) 一、实验题目 线性表、顺序表基本操作的编程实现 二、实验要求 线性表、顺序表基本操作的编程实现,掌握线性表、顺序表的建立、遍历、插入、删除、读取等基本操作的编程实现,也可以进一步编程实现逆序等操作,存储结构可以采用顺序存储结构和链表存储结构之一,可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。 三、运行效果图 四、代码 #include<stdio... 阅读详情
 
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100;
#define LISE_INCREMENT 10;

//定义一个枚举常量,默认no = 0, ok = 1
enum Status{no, ok};

typedef struct Sqlist
{
   //数组元素类型是整型
   int *elem;//指针指向线性表的基地址,即数组名,数组的第一个元素的地址。
   //实质上,用一个指向首地址的指针代表了数组
   int length;//顺序表的实际元素个数,当前长度
   int listsize;//顺序表当前预分配的存储空间,预定义大小
}Sqlist;

//顺序表的初始化操作,就是为顺序表分配一个预定义大小的数组空间,
//并将线性表的当前长度设为‘0’,意思是当前数组中有0个元素。
//已经为数组分配了一定的内存空间,只是里面没放东西而已。
//实质上,就是定义一个变长数组。
//&L是一个地址,实质上是一个结构体的首地址,也就是用指针指向结构体首地址代表一个顺序表
Status InitList_Sq(Sqlist &L)
{
    //给结构体中的基地址赋值,类似于给数组的首地址赋值
   //构造一个空的线性表,预分配100存储空间
   L.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
   if(!elem)//在一个指针前加"!"运算符,表示该指针值与NULL相等,即P==NULL,也就是指针为空,或指针不存在
   return no;
   //下面两行,定义了一个有0个元素,但是占有100个空间的空表(空数组)
   L.length = 0;
   L.listsize = LIST_INIT_SIZE;
   return ok;
}

//顺序表的插入操作,主要是第n至i(共n-i+1)个元素依次后移动一个位置
Status ListInsert_Sq(Sqlist &L, int i, int e)
{//在顺序线性表L中第i个位置之前插入新的元素e 
   //i的合法值为1<=i<=List_length + 1
   if(i < 1 || i > L.length+1)
   return no;
   //若当前存储空间已满,增加分配
   if(L.length > L.listsize)
   {
      //realloc函数用来修改原指针所指向的对象的长度。
      int *new = (int *)realloc(L.elem,
	  (LIST_INIT_SIZE + LISE_INCREMENT) * sizeof(int));
	  if(!new)//存储分配失败
	  return no;
	  L.elem = new;//新基址
	  L.listsize += LISE_INCREMENT;//增加存储容量
   }
   int *q;//q为插入位置
   q = &(L.elem[i-1]);
   for(p=&(L.elem[L.length-1]); p>=q; ++p)
   *(p+1) = *p;//插入位置及之后的元素右移动
   *q = e;//插入e
   ++L.length;//元素个数增1
   return ok;
}

#include <stdio.h> #include <stdlib.h> #define INIT_LIST_SIZE 100 #define LISTINCREMENT 10

enum Status {no, ok};

//定义一个顺序表的结构体 typedef struct {    int *a;//顺序表中的基地址,    int len;    int size; }Sqlist;

Status Init_SqList(Sqlist &L) {    L.a = (int *)malloc(INIT_LIST_SIZE * sizeof(int));    if(L.a == NULL)    return no;    L.len = 0;//有0个元素    L.size = INIT_LIST_SIZE;//顺序表预设的空间    return ok; }

Status Insert_Sqlist(Sqlist &L, int i, int e) {    if(i < 1 || i > L.len + 1)    return no;    if(L.len >= L.size)//当存储空间已满的时候,重新分配    {       int *new = (int *)realloc(Sqlist &L,    (INIT_LIST_SIZE + LISTINCREMENT) * sizeof(int));    if(!new)    return no;    L.a = new;    L.size += LISTINCREMENT;    }    int *loc, *p;//loc为插入位置,p为操作指针    loc = &(L.a[i-1]);    for(p = &(L.a[len - 1]); p >= loc; --p)    *(p+1) = *p;//移动元素的操作-    *loc = e;//插入e    ++L.len;//表长增1    return ok;   }

顺序表插入运算步骤总结: 1, 初始化一个空顺序表 2, 判断插入位置是否合法 3, 若表满,分配新的空间,已被移动元素后,能在表中腾出位置以供插入 4, 从表尾依次移动元素,在待插入位置腾出一个空位 5, 插入元素 6, 表长增1.

 

//在顺序表中删除第i个元素 Status Delete_Sqlist(Sqlist &L, int i, int &e) {    int *p;//待删除元素    int *q;//表尾元素    //判断删除位置是否合法    if(i < 1 || i > L.len)    return no;    p = &(L.a[i-1]);//待删除元素的位置,也可写成 L.a + i - 1    e = *p;    q = L.a + L.len - 1;//表尾元素的位置,也可写成 &(L.a[len - 1])    for(p; p <= q; ++p)    *(p-1) = *p;//移动元素的操作    --L.len;//表长也要变化    return ok; }

顺序表删除元素运算总结: 1, 判断删除位置是否合法 2, 将操作指针p指向待删除的元素的存储位置 3, 将待删除元素的值取出,复制给e 4, 确定表尾元素的存储位置。 5, 循环处理操作指针P,移动元素,将后一项赋值给前一项,删除待删元素 6, 表长减1

//顺序表合并 Status Merge_Sqlist(Sqlist La, Sqlist Lb, Sqlist &Lc) {   //已知顺序表La,Lb的元素按值非递减排列   //归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列   int *pa, int *pb, int *pc;   int *pa_Last, *pb_Last;   pa = La.a;//指向La首地址的指针pa   pb = Lb.a;//指向Lb首地址的指针pb   Lc.size = Lc.len = La.len + Lb.len;//Lc的长度应该是La与Lb之和   //指向Lc首地址的指针pc   pc = Lc.a = (int *)malloc(Lc.size * sizeof(int));//创建Lc的存储空间   if(!pc)   return no;   pa_Last = La.a + La.len - 1;//La最后一个元素的存储地址   pb_Last = Lb.a + Lb.len - 1;//Lb最后一个元素的存储地址   //La与Lb都没有取完的情况下   while(pa <= pa_Last && pb <= pb_Last)   {     if(*pa <= *pb)  *pc++ = *pa++;\\等价于:*pc = *pa; pa++; pc++;  else  *pc++ = *pb++;   }   //Lb已经取完,只取La元素的情况下   while(pa <= pa_Last)   *pc++ = *pa++;   //La已经取完,只取Lb元素的情况下   while(pb <= pb_Last)   *pc++ = *pb++;   return ok; }

两个有序顺序表合并的运算总结: 1,先设置两个操作指针pa,pb,分别指向已有顺序表La,Lb的首地址。 2,再定义两个指针pa_Last,pb_Last,分别指向已有顺序表La,Lb的表尾地址,    以便于判断pa,pb是否滑动到La,Lb表尾。 3,通过初始化pc指针的方式来定义Lc顺序表,预先给Lc开辟长度为La.len + Lb.len的空间。 4,La与Lb都没有取完的情况下,通过比较取得两个表中元素的较小者,放入Lc中。 5,Lb已经取完,只取La元素并将其放到Lc中。 6,La已经取完,只取Lb元素并将其放到Lc中。

算法2.3 数据结构C语言严蔚敏 顺序表的初始化操作——为顺序表分配一个预定义大小的数组空间,并将线性表的当前长度设为0 /*构造一个空的线性表L*/ Status InitList_Sq(SqList &L){ L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); /*将L.elem这个指针指向一块通过malloc函数分配的内存的地址 这个内存的大小为Elemtype这个结构体的size*LIST_INIT_SIZE的乘积这么大 malloc 是用于分. 阅读详情

相关推荐

线性表之顺序表操作

求后继是指:输入一个元素值(而不是位置),求该元素在顺序表中的直接后继元素值。 注意:对每个功能进行测试时,要求把不合法的情况也测试一下。具体见下面的测试用例。 (3)验收/测试用例 通过菜单调用各个操作,测试点: ⦁ 没有初始化前进行其他操作,程序是否能控制住;即,如果没有初始化线性表,其他的功能是无法正常进行的,如果选择进行其他操作,要提示先进行初始化; ⦁ 初始化一个顺序表(初始化顺序表,...

csdncsdnq的博客 515

线性表(1)--基础知识

一、线性表的概念 二、线性表的顺序存储 三、线性表的链式存储 四、顺序表和链表的比较

ramay7 1007

线性表的基本操作实现 - 链表与顺序表

注:实验用书为 数据结构 C语言版 第2版,人民邮电出版社出版。 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表,使其具有如下功能: 1、根据指定学生个数,逐个输入学生信息; 2、逐个显示学生表中所有学生的相关信息; 3、根据姓名进行查找,返回此学生的学号和成绩; 4

Daioo 随笔 4240

顺序线性表的初始化,插入,删除,查找以及合并操作(伪代码)

顺序线性表的相关操作 1.线性表的初始化操作(即构造空线性表):initlist_sq(sqlist &amp;l)      就是为顺序表分配一个预定义大小的数组空间,并将线性表长度设为0;其中定义的listsize为当前分配的存储容量,随着元素的增加其存储容量也要增加。因此为其增加了一个存储 LISTINCREMENT个数据元素的空间 。 2. 线性表的插入操作 :在顺序线性表l的第i个...

qq_40243295的博客 9689

数据结构之线性表(顺序表)的基本操作

今天学了一下数据结构,看的是线性表中的顺序表,把自己对线性表的了解,给大家分享一下。 线性表是什么? 线性表是n各元素的有限序列,线性表中的数据元素的个数成为线性表的长度。 顺序表是什么? 顺序表就是线性表的顺序储存结构。其基本思想就是用一段地址连续的储存单元依次储存线性表的数据元素。 读到基本思想这里我们很容易想到,顺序表和我们学的数组的是基本一样的,但是又不完全一样,数组在存储数据时

CrazyIdeas的博客 2539

线性表归并操作实践:顺序表与链表

线性表是最基本、最简单的一种数据结构。在计算机科学中,它是一种有限的线性序列,由n个相同类型的数据元素构成,每个元素都有一个唯一的前驱和后继,除了第一个和最后一个元素。线性表可以是顺序存储,例如数组;也可以是链式存储,例如链表。理解线性表是学习更复杂数据结构和算法的基础。

weixin_35749786的博客 771

线性表的初始化,增删查操作等

线性表的初始化,增删查操作等#include&lt;stdio.h&gt; #define LISTSIZE 100 typedef int DataType; typedef struct{ DataType items[LISTSIZE]; int length; }SqList; // 2-1 init list int InitList(SqList *L){ L-&gt...

真好的博客 1687

顺序表实现城市信息记录

用顺序表来实现城市信息记录,有插入,删除,查询,修改,计算等功能。

线性表之顺序表原理与操作

1、线性表的定义   所谓线性表就像是一条线一样连在一起的数据结构,它的严格的定义是:在有限非空的集合中,存在唯一的被称为 ”第一个“ 的数据元素;存在唯一的被称为 ”最后一个“ 的数据元素;除了第一个数据元素外,集合中所有元素有且仅有唯一的前驱元素;除了最后一个元素外,集合中有且仅有唯一的后继元素。 2、线性表的顺序表示 2.1 顺序表的存储结构   线性表的顺序表示我们简称为顺序表,它表示用一组地址连续的的内存单元一次存储元素,从这个定义我们可以知道这种存储方式实际上是用屋里地址上的连续性来表示

Lessen的博客 732

AD9026芯片开发实战指南:从硬件配置到射频校准

本文为AD9026芯片开发实战指南,详细解析了从硬件设计、电源时钟配置、SPI初始化到多芯片同步与JESD204高速链路建立的完整流程。重点探讨了射频校准技术,包括初始化校准与跟踪校准,以保障5G、MIMO等现代通信系统所需的射频性能。旨在帮助开发者系统掌握这颗高性能射频收发器的应用,规避常见设计陷阱。

tomato的博客 852

SAP ABAP干货:用REUSE_ALV_GRID_DISPLAY_LVC实现ALV多屏幕独立布局(含handle参数详解)

本文详细解析了SAP ABAP中如何使用REUSE_ALV_GRID_DISPLAY_LVC函数实现ALV多屏幕独立布局,重点介绍了handle参数的技术原理和实际应用。通过变式标识符和LTDX表存储机制,开发者可以确保不同ALV报表屏幕的布局设置互不干扰,提升复杂报表场景下的用户体验。

weixin_29268267的博客 311

线性表之顺序表的基本操作

线性表的定义 线性表是具有相同数据类型的 n(n>=0)n(n>= 0)n(n>=0)个数据元素的有限序列,其中nnn为表长,当n=0n=0n=0时线性表是一个空表。若用LLL命名线性表,则其一般表示为L=(a1,a2,...,ai,ai+1,...,an)L=(a_1,a_2,...,a_i,a_{i+1}, ..., a_n)L=(a1​,a2​,...,ai​,ai+1​,...,an​)式中,a1a_1a1​是唯一的"第一个"数据元素,又称表尾元素。除第一个元素外,每个元素有且仅有

hua_you_qiang的博客 1578

Oracle入门——基础语法篇

ROWID是Oracle中的一个伪列,用于唯一标识数据库中的每一行。在查询中,可以使用ROWID来定位和操作特定的行,例如,删除特定的行或更新特定的行。在Oracle中,子查询是指嵌套在另一个查询内部的查询语句,它可以作为主查询的一部分,用于提供额外的过滤条件、计算或数据源。在Oracle中,连接查询是通过使用JOIN子句将两个或多个表中的数据合并在一起,以获取满足特定条件的结果集。在Oracle数据库中,ROWID和ROWNUM都是用于对行进行标识和定位的伪列,它们在查询中的使用有一些不同之处。

麦当当的博客 3089

线性表笔记之顺序表及基本操作

线性表的顺序(存储)表示——顺序表 用一组地址连续的存储单元依次存储线性表的数据元素 位序相继的两个数据元素存储位置相邻 以线性表中第一个元素的存储位置作为线性表的起始存储地址,称为基地址。 线性表中所有元素的存储地址都可以通过基地址得到 ★顺序表是具有顺序结构的线性表 顺序表的存储结构定义为: typedef struct { ElemType *elem;//存储空间基址 int leng...

weixin_42817516的博客 557

QEMU pcie config空间访问机制

而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。

leiyanjie8995的博客 1953

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

线性表概念及顺序表的相关操作

本文主要介绍线性表的相关概念,顺序表中的增删改查操作

m0_67198021的博客 373

【NIFI】实现HANA->ORACLE数据同步

实现 HANA->ORACLE数据同步。

weixin_43159039的博客 1510

线性表-顺序表的基本操作

线性表的定义和特点 线性表:由n(n≥0)个数据特性相同的元素构成的有限序列 线性表中元素的个数n(n≥0)称为线性表的长度 空表:n=0 对于非空的线性表或线性结构,特点为: 存在唯一的一个被称作"第一个"的数据元素 存在唯一的一个被称作"最后一个"的数据元素 除第一个之外,结构中的每个数据元素均只有一个前驱 除最后一个之外,结构中的每个数据元素均只有一个后继 线性表的抽象数据类型定义 ...

wmy0217_的博客 2782

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 713

Python从0到100(十九):Python标准库初探

哈希函数又称哈希算法或散列函数,是一种为已有的数据创建“数字指纹”(哈希摘要)的方法。哈希函数把数据压缩成摘要,对于相同的输入,哈希函数可以生成相同的摘要(数字指纹),需要注意的是这个过程并不可逆(不能通过摘要计算出输入的内容)。举一个简单的例子,用户注册时我们希望在数据库中保存用户的密码,很显然我们不能将用户密码直接保存在数据库中,这样可能会导致用户隐私的泄露,所以在数据库中保存用户密码时,通常都会将密码的“指纹”保存起来,用户登录时通过哈希函数计算密码的“指纹”再进行匹配来判断用户登录是否成功。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5004

线性表——顺序表和链式表的基础操作

**************************顺序表************************///静态分配int size;//顺序表初始化----置空表//创建顺序表datatype x;printf("请输入一组数据,以0作为结束符:\n");while(x)

2301_80261854的博客 599

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言线性表之顺序表的13种函数操作

学习数据结构开始就会学到第一种数据存储结构–线性表,学习线性表时一定会先学到顺序表,顺序表是一个较为简单的线性表,没有链表满天飞的指针。它的本质就是申请一块连续的内存,和数组相似,保存第一个地址的指针就欧克了,在通过第一个地址往后偏移若干量来实现能对所有进行操作。直接看一下创建一个线性表及多种操作的代码吧。 #include&lt;stdio.h&gt; #include&lt;stdlib.h&...

欢迎来到我的世界 3878

精雕软件(JDpaint) 5.5 绿色版

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

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

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

线性表之顺序表的相关操作

本文主要实现了线性表中顺序表的初始化、创建、增加、删除、修改、清空,判断表长、判断表长等基本操作。 主要依据严蔚敏版数据结构教材以及王道数据结构考研辅导书。 基本函数如下: int InitList(SqList &L);//初始化 bool CreateList(SqList &L, int n); int Length(SqList L);//返回长度信息 bool Li...

Jennifer_Love_Frank的博客 3万+

线性表之一:顺序表概述特点以及基本操作

顺序表概述: 逻辑结构相邻,物理结构也相邻 通常数组实现。 但是数组不可以增加,顺序表可以增加 数组可多维,顺序表不可以 sizeof(ElemType)求该顺序表所存放的数据元素类型的存储空间有多大 n代表顺序表中的最后一个元素 MaxSize代表数组中的最有一个存储单元 设顺序表中第一个元素的内存地址为LOC(A), 则第二个元素内存地址是LOC(A)+sizeof(ElemType) 【s...

ThePaK的博客 1607

线性表 Linear List(顺序表的实现方式及基本操作)

线性表 Linear List什么是线性表顺序表顺序表的基本操作——插入顺序表的基本操作——删除顺序表的基本操作——查找 什么是线性表 线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,n为表长,当n为0时,我们称该线性表是一个空表。 重要概念: ai是线性表中的第i个元素,i指的是位序,位序从1开始 a1是表头元素,an是表尾元素 除第一个元素外,每个元素都有且仅有一个直接前驱(就是紧挨着该元素之前的一个元素);除最后一个元素外,每个元素都有且仅有一个直接后继(就是紧挨着该元素之后的一

baidu_41803143的博客 819
上一篇: 如何学习C
下一篇: 全文搜索引擎
Zevin
博客等级 码龄17年 63粉丝 77原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值