实验1:顺序表的基本操作(包括基本代码)

2023-11-09

实验1:顺序表的基本操作

实验目的:

1、掌握顺序表的存储结构

2、实现顺序表的基本操作

实验内容:

//建立一个顺序表L1=(11,2,35,41,65,2);

1)查找元素5是否存在

2)删除位序为3的元素

3)输出所有元素

4)输出顺序表的长度

5)输出元素2第一次出现的位序

实验要求:                                                    

  1. 代码完整
  2. 程序的运行结果
  3. 实验心得

程序清单:

#include<stdio.h>

#include<stdlib.h>       //malloc realloc

typedef int ElemType;    /* 在实际问题中,根据需要定义所需的数据类型 */

#define INITSIZE 100     /* 顺序表存储空间的初始分配量 */

typedef struct

{ ElemType *data;        /* 存储空间基地址 */

  int length;            /* 顺序表长度(即已存入的元素个数) */

  int listsize;      /* 当前存储空间容量(即能存入的元素个数) */

}sqlist;

/* (1)初始化操作(创建一个空的顺序表L) */

void initlist(sqlist *L)

{

L->data =(ElemType *)malloc(sizeof(ElemType)*INITSIZE);

L->length =0;

L->listsize =INITSIZE;                  //补充代码

}

/* (2)求表长操作(统计顺序表L中存储的数据元素个数) */

int getlen(sqlist *L)

{

 return(L->length);//补充代码 

}

/* (3)取元素操作(取出顺序表L的第i个数据元素的值) */

int getelem(sqlist *L,int i,ElemType *e)

{

   if(i<1||i>L->length) return 0;

 *e=L->data [i-1];

 return 1;

}

/* (4)元素定位操作(在顺序表L中,查找第1个与x值相等的数据元素的位置) */

int locate(sqlist *L,ElemType x)

{  

int i=0;

while(i<L->length )

if(L->data [i]==x) return i+1;

else i++;

return 0;            //补充代码 

}

 /* (5)插入操作(在顺序表L中的第i个位序上插入一个值为x的数据元素) */

int insert(sqlist *L,int i,ElemType x)

{ int j;

  if(i<1||i>L->length+1) return 0;  /* 参数i不合理,返回0 */

  if(L->length==L->listsize)        /* 存储空间不够,增加一个存储空间 */

  {  L->data=(ElemType *)realloc(L->data,(L->listsize+1)*sizeof(ElemType));

     L->listsize++;                 /* 重置存储空间长度 */

  }

  for(j=L->length-1;j>=i-1;j--)

     L->data[j+1]=L->data[j];//补充代码     /* 将序号为i及之后的数据元素后移一位*/

  L->data[i-1]=x;                   /* 在序号i处放入x */

      L->length++; //补充代码                      /* 顺序表长度增1 */

  return 1;                         /* 插入成功,返回1 */

}

/* (6)删除操作(将顺序表L的第i个元素删除) */

int delete(sqlist *L,int i,ElemType *e)

{ int j;

  if(i<1||i>L->length) return 0;  /* 参数i不合理,返回0 */

  *e=L->data[i-1];                /* 存储被删除的元素 */

  for(j=i;j<L->length;j++)

     L->data[j-1]=L->data[j];//补充代码      /* 将序号为i及之后的数据元素前移一位 */

  L->length--;                    /* 顺序表长度减1 */

  return 1;                       /* 删除成功,返回1 */

}

/* (7)输出操作(输出顺序表L的各数据元素值) */

void list(sqlist *L)

{

    int i;

for(i=0;i<L->length;i++)

{

printf("%5d",L->data[i]);

}

printf("\n"); //补充代码 

}

int main(){

         sqlist L1;

         int i;

         int t[6]={11,2,35,41,65,2};

         initlist(&L1);

         for(i=0;i<6;i++)

           insert(&L1,i+1,t[i]);

         if(locate(&L1,5))

            printf("yes!\n");

         else

            printf("no!\n");

         int n;

         if(delete(&L1,3,&n))

            printf("%d 删除成功!\n",n);

         else

            printf("删除失败!\n");

         list(&L1);

         printf("%d\n",getlen(&L1));

        printf("元素2第一次出现的位序: %d",locate(&L1,2));

         return 0;

}

运行结果:

实验心得: 经过这次实验,顺性表的结构特点和基本操作以及C语言相关的程序设计方法与技术得到了巩固,同时也发现,扎实的基础知识是实验的基础,只有把课本上的相关知识弄清楚了, 实验才能进行下去, 少浪费很多时间。这次实验不仅仅是实现一个顺序表的各种基本的操作, 更重要的是通过做实验的过程开发了相应的思路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验1:顺序表的基本操作(包括基本代码) 的相关文章

  • CentOS8使用network.service服务管理网络

    前言 在CentOS8中 我们常用的network service服务就被NetworkManager service服务代替了 同样的 IP的配置方法也发生了改变 那么如果想使用network service服务去管理 配置系统网络怎么办
  • C语言实现扫雷 【递归扩展】 【超详细解析】

    扫雷游戏介绍 扫雷 是一款大众类的益智小游戏 于1992年发行 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子 同时避免踩雷 踩到一个雷即全盘皆输 游戏规则 扫雷是电脑上一款非常经典的单机游戏 它的基本规则是 如果你点击一个
  • Linphone的简单使用

    目前参与了几个SIP项目 用到了几个软件 回过头来写下使用过程吧 使用的软电话是一个叫做Linphone的软件 首先拿到的是一个安装版的 感觉用不了几次 就没有安装 后来看到还有一个用QT编写的绿色版 就使用了该版本 界面简洁 QT绿色版
  • idea必备插件

    最近公司开发工具从 eclipse 全部切换到了 IntelliJ IDEA 为了提升公司开发效率 所以从网上搜集了一些常用的 IntelliJ IDEA 实用的开发插件 用于提升团队开发效率 现在在这里进行分享 让更多的人能够提升开发效率

随机推荐

  • http重定向流程与https证书校验流程

    http重定向 原理 在 HTTP 协议中 重定向操作由服务器通过发送特殊的响应 即 redirects 而触发 HTTP 协议的重定向响应的状态码为 3xx 浏览器在接收到重定向响应的时候 会自动采用该响应提供的新的 URL 并立即进行加
  • 10种不同类型的移动UI设计模式

    编者按 图灵教育 推荐了 移动应用UI设计模式 一书 在书中用户体验设计师Theresa Neil 介绍了包括反模式在内的10种不同类型的设计模式 无论你正在设计一款简单的iPhone应用 还是开发适用于当前市场上所有流行移动操作系统的应用
  • 【MATLAB第52期】#源码分享

    MATLAB第52期 源码分享 基于MATLAB的高斯过程GPR超参数 sigma 自动优化算法 时间序列预测模型 五折交叉验证 后台私信回复 52期 即可免费获取数据及代码 一 效果展示 二 优化思路 1 数据 一列时间序列数据 滑动窗口
  • 【数据挖掘】属性的概念

    1 属性 一个数据字段 表示数据对象的一个特征 属性 数据挖掘和数据库人员使用 维 数据仓库 特征 机器学习 变量可以互换实用 统计学家使用 2 标称属性 标称意味着 与名称相关 标称属性的值是一些符号或失误的名称 每个只代表某种类别 编码
  • 层次聚类matlab代码_MATLAB实现聚类分析

    点击标题下 蓝色微信名 可快速关注 MATLAB聚类算法K means聚类与层次聚类 1 kmeans聚类 聚类算法是一种根据初始点不断迭代 最后将数据聚类的过程 matlab中实现Kmeans常用聚类函数如下 IDX C kmeans X
  • 小程序顶部导航栏标题不居中

    小程序默认在andriod中居左 ios中居中 解决方法 自定义导航栏 小程序去掉顶部导航栏 window backgroundTextStyle light navigationBarBackgroundColor 666 navigat
  • redis详解之数据备份与恢复

    一 数据备份 Redis所有数据都是保存在内存中 Redis数据备份可以定期的通过异步方式保存到磁盘上 该方式称为半持久化模式 如果每一次数据变化都写入aof文件里面 则称为全持久化模式 本章节通过配置文件 触发快照的方式 恢复数据的操作
  • word论文:参考文献字间距太大的处理方法

    全选参考文献 右键选择 段落 选择中文版式 设置如下图所示 换行 全选 字符间隔 只选择自动调整中文与数字的间距 然后就完成了参考文献间距变动问题 重点 允许西文换行
  • 【十九】微分动态规划

    微分动态规划 Differential Dynamic Programming DDP 注意上一讲中推导出的公式 我们发现如果只需更新 则不必维护 的更新 即在一定程度上 是不需要的 所以我们在下面的讨论中不考虑 的影响 使用上一讲中将非线
  • 科技云报道:大小巨头涌入赛道,隐私计算迎来商业落地元年

    科技云报道原创 近两年来 隐私计算逐渐从小众领域为大众熟知 2021年 隐私计算开始在真实商业场景中全面落地 据毕马威发布的 2021隐私计算行业研究报告 显示 受到大数据融合应用和隐私保护的双重需求驱动 国内隐私计算市场将快速发展 三年后
  • 什么是 vue-cli?怎样创建vue-cli项目?

    1 什么是 vue cli vue cli 俗称 vue 脚手架 是 vue 官方提供的 快速生成 vue 工程化项目的工具 特点 开箱即用 基于 webpack 功能丰富且易于扩展 支持创建 vue2 和 vue3 的项目 vue cli
  • JAVA使用servlet接收json格式的方法

    JAVA中使用HttpServletRequest接收前台传入的参数 其中json的格式是 penalty 0 5 deductPointsItem 7 photoUrl image 26quality 80 26size b9999 10
  • 链表的实现:无头单向非循环链表的实现

    笔者在上篇博客书写了一个名为 链式存储之 链表的引出及其简介原文链接为 https blog csdn net weixin 64308540 article details 128374876 spm 1001 2014 3001 550
  • 【Blender】摄像机-01常用操作

    新建相机如何快速将视角设为相机视角 A 新建相机后 ctrl alt 0 即把当前视角作为摄像机视角 例如正视图 先按1 然后ctrl alt 0 摄像机常用操作 1 shift a新建摄像机 调整合适焦距 当然也可以不调整 2 点击0键
  • 5. springBoot-web开发——模板引擎

    1 thymeleaf Thymelaef 是通过他特定语法对 html 的标记做渲染的一个视图层技术 1 1 引入thymeleaf 1 引入thymeleaf的依赖
  • .net 中context、DbContext是什么?

    可以将上下文看作相关 事物 的包装 例如 HttpContext DbContext ObjectContext HttpContext包含任何HTTP相关操作的信息 DbContext包含用于数据库通信的方法和属性 ObjectConte
  • 对数字添加前导0达到固定长度

    近期在处理一个时间展示 要求月日时分秒固定展示2位数字 毫秒固定展示3位数字 传统的作为是根据小于10 小于100等在前面添加特定个数的0 昨晚突然想到 字符串的slice方法可以指定一个负数值来取字符串的后面n个字符 这样在原始数字前面添
  • Win10下AutoCAD2014 +VS2010 + Object2014 安装与配置环境

    Win10下AutoCAD2014 VS2010 Object2014 安装与配置环境 安装前的准备 1 AutoCAD2014安装包 https pan baidu com s 1nK zeBv7tIcipOKcVroo3g 提取码 p7
  • IDEA自动设置作者信息

    一 背景和痛点 以前用Eclipse 忘记设置类的作者信息 是可以使用 之后回车自动出现作者信息的 现在用IDEA不能通过这种方式补全 非常不方便 注意 网上很多教程 说的是新建java类的时候出现作者信息 跟提到的问题痛点是不同的 作者信
  • 实验1:顺序表的基本操作(包括基本代码)

    实验1 顺序表的基本操作 实验目的 1 掌握顺序表的存储结构 2 实现顺序表的基本操作 实验内容 建立一个顺序表L1 11 2 35 41 65 2 1 查找元素5是否存在 2 删除位序为3的元素 3 输出所有元素 4 输出顺序表的长度 5