数据结构——对顺序线性表的操作

news2024/11/17 16:46:56

大家好啊,今天给大家分享一下对于顺序线性表的相关操作,跟随我的步伐来开始这一篇的学习吧!

如果有知识性错误,欢迎各位指正!!一起加油!!

创作不易,希望大家多多支持哦!

#include <stdio.h>

#include <stdlib.h>



/*此处是顺序线性表数据结构定义*/

typedef int DataType;

struct seqList

{//有3个数据成员

  int MAXNUM;//用于记录顺序线性表中能存放的最大元素个数的 整型 MAXNUM  

  int curNum;//用于存放顺序线性表中数据元素的个数  整型  curNum

  DataType *element;//用于存放顺序线性表数据元素的连续空间的起始地址  

};



typedef struct seqList *PseqList;



PseqList createNullList_seq(int m) {

//创建一个空的顺序线性表,能存放的最大元素个数为 m

 //若m=0,则返回NULL

    if (m <= 0) return NULL;

    PseqList L = (PseqList)malloc(sizeof(struct seqList));

    if (L == NULL) return NULL;

    L->MAXNUM = m;

    L->curNum = 0;

    L->element = (DataType*)malloc(sizeof(DataType) * m);

    if (L->element == NULL) {

        free(L);

        return NULL;

    }

    return L;

}



int isFullList_seq(PseqList L)

{

//判断顺序线性表是否已满,若已满,返回值为1,否则返回值为0

    if (L == NULL) return 0;

    return L->curNum == L->MAXNUM;

}



int insertP_seq(PseqList L, int p, int x)

{

// 在线性表L中下标为p的位置插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1

 //如果线性表满了, 还需输"list is full"的提示

//如果插入位置非法,需输出提示"position is illegel"

    if (L == NULL || p < 0 || p > L->curNum || isFullList_seq(L)) {

        if (isFullList_seq(L)) printf("list is full");

        if (p < 0 || p > L->curNum) printf("position is illegel");

        return 0;

    }

    for (int i = L->curNum; i > p; --i) {

        L->element[i] = L->element[i - 1];

    }

    L->element[p] = x;

    L->curNum++;

    return 1;

}



int insertPre_seq(PseqList L, int p, int x)

{

/*在线性表L中下标为p的位置的前面插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1*/

    return insertP_seq(L, p - 1, x);

}



int insertPost_seq(PseqList L, int p, int x)

{

/*在线性表L中下标为p的位置的后面插入数据元素x,若下标p非法或线性表已满无法插入数据,

返回0;插入成功返回值为1*/

    return insertP_seq(L, p + 1, x);

}



void printList_seq(PseqList L) {

//逐个输出线性表的元素,相邻的两个数据元素之间以一个空格为分隔符隔开

    if (L == NULL) return;

    for (int i = 0; i < L->curNum; ++i) {

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

    }

}



int destroyList_seq(PseqList L)

{

    //返回值为销毁的线性表中现有数据元素的个数,若待销毁的线性表不存在,则返回0

    if (L == NULL) return 0;

    int count = L->curNum;

    free(L->element);

    free(L);

    return count;

}



int locate_seq(PseqList L,int x)

{

//在顺序表L中查找给定值x首次出现的位置,若不存在给定值,则返回-1

    if (L == NULL) return -1;

    for (int i = 0; i < L->curNum; ++i) {

        if (L->element[i] == x) return i;

    }

    return -1;

}



DataType locatePos_seq(PseqList L,int pos)

{

// 在顺序表L中查找指定位置pos处的数据元素,若位置非法,则返回第0个数据元素

    if (L == NULL || pos < 0 || pos >= L->curNum) return L->element[0];

    return L->element[pos];

}



int deletePos_seq(PseqList L,int pos)

{//在顺序表L中删除与下标pos处的数据元素,若pos非法,则返回-1;否则返回1

    if (L == NULL || pos < 0 || pos >= L->curNum) return -1;

    for (int i = pos; i < L->curNum - 1; ++i) {

        L->element[i] = L->element[i + 1];

    }

    L->curNum--;

    return 1;

}



int delete_seq(PseqList L,int x)

{//在顺序表L中删除与参数x值相同的数据元素,返回删除数据元素的个数

  //可以使用之前已完成的操作

  int count = 0;

    if (L == NULL) return 0;

    for (int i = 0; i < L->curNum; ++i) {

        if (L->element[i] == x) {

            deletePos_seq(L, i);

            count++;

            i--;

/*由于调用deletePos_seq函数后数据均向前移动一位,所以判断删除掉数据元素的下一位时,该原来的下一位元素已经移动到了删除元素的位置了,所以要将i--,来使下一次仍然判断原删除元素的下标处的新元素。*/

        }

    }

    return count;

}



void replace_seq(PseqList L,int x,int y)

{//将顺序表L中值为x的数据元素替换为y

 for (int i = 0; i < L->curNum; i++) {  

        if (L->element[i] == x) {  

            L->element[i] = y;  

        }  

    }

}



void delDuplicate_seq(PseqList L)

{//移除线性表中的所有重复元素;不使用额外的数组空间,在原地修改输入数组

/*

实现思路
双重循环:
外层循环遍历线性表中的每一个元素,索引为 i。
内层循环从当前元素的下一个元素开始遍历,索引为 j。

查找重复元素:
在内层循环中,检查当前元素 L->element[i] 是否与后续元素 L->element[j] 相等。
如果找到重复元素(即 L->element[i] == L->element[j]),则调用 deletePos_seq(L, j) 删除索引为 j 的元素。
删除元素后,将 k 标记为 1,表示找到了重复元素。
由于删除元素后,后续元素会向前移动,因此需要将 j 减 1,以确保继续检查当前位置的元素。

删除当前元素:
如果 k 为 1(即找到了重复元素),则在外层循环中调用 deletePos_seq(L, i) 删除当前元素 L->element[i]。
删除当前元素后,将 i 减 1,以确保继续检查当前位置的元素。
将 k 重置为 0,以便继续检查下一个元素。

*/

int i, j;

     int k=0;    

    for (i = 0; i < L->curNum - 1; i++) {    

        for (j = i + 1; j < L->curNum;j++) {  

            if (L->element[i] == L->element[j]) {    

                  deletePos_seq(L,j);

                  k=1;

                  j--;

            }

        }    

        if(k==1){

        deletePos_seq(L,i);

        i--;

        k=0;

        }    

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一步步带你Linux内核编译与安装

Linux内核编译与安装 安装流程 #mermaid-svg-0PfY2uowOUJaN2Ov {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0PfY2uowOUJaN2Ov .error-icon{fill:#552222;}#mermaid-svg-0PfY2uowOUJaN2Ov .error-text{fill:#5522…

高级算法设计与分析 学习笔记7 数据结构扩充

OS tree 数据统计树 本体是红黑树&#xff0c;除了自己的数字外还要记录自己这颗子树有几个节点。 这种特性可以让使用者迅速找到自己要找的第i个数。 往左走&#xff0c;给的那个数字就是排名&#xff0c;但是往右边走的话&#xff0c;那就的先加上当前的排名&#xff08;也就…

宠物空气净化器希喂和352哪个好用?两大爆火机型哪款吸毛、除臭效果比较好?

猫毛、狗毛、鹦鹉毛&#xff0c;总之只要家里养着有带毛的宠物&#xff0c;毛就会出现在各种地方&#xff0c;床上、沙发上、衣服上、水杯里...根本躲不开。而且&#xff0c;除了肉眼可见的&#xff0c;呼吸时、说话时&#xff0c;不经意间还会吃到毛毛。这些毛毛飘在空气里时&…

数据结构-3.4.队列的基本概念

一.队列的定义&#xff1a; 1.图解&#xff1a; 2.重要术语&#xff1a; 空队列&#xff1a;队列中不含任何元素。 二.队列的基本操作&#xff1a; 三.总结&#xff1a;

气膜仓库:高效便捷的物流解决方案—轻空间

在现代物流行业中&#xff0c;效率与灵活性是关键。气膜仓库作为一种创新的仓储方式&#xff0c;凭借其独特的优势&#xff0c;正迅速成为物流企业的理想选择。 轻量化与快速搭建 气膜仓库的最大特点在于其轻量化结构。这种仓库由特制的气膜材料构成&#xff0c;能够在较短的时…

微服务JSR303解析部署使用全流程

目录 1、什么是JSR303校验 2、小试牛刀 【2.1】添加依赖 【2.2】添加application.yml配置文件修改端口 【2.3】创建实体类User 【2.4】创建控制器 【2.5】创建启动类 【注意】不必创建前端页面 3、规范返回值格式&#xff1a; 3.1添加ResultCode工具类 3.2添加Resul…

排序(插入,希尔,堆排,冒泡)

常见的排序算法&#xff1a; 插入排序&#xff1a; 直接插入排序&#xff1a;是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个…

24 Vue3之集成TailwindCSS

Tailwind CSS Tailwind CSS是一个由js编写的CSS 框架 他是基于postCss 去解析的 官网地址Tailwind CSS 中文文档 - Tailwind CSS - 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站。 | TailwindCSS中文文档 | TailwindCSS中文网 对于PostCSS…

SigLIP技术小结

paperhttps://arxiv.org/abs/2303.15343githubhttps://github.com/google-research/big_vision个人博客位置http://myhz0606.com/article/siglip 1 背景 CLIP[1]自提出以来在zero-shot分类、跨模态搜索、多模态对齐等多个领域得到广泛应用。得益于其令人惊叹的能力&#xff0…

普通人如何搭乘 AI 快车,开辟 10 大赚钱新赛道

亲爱的朋友们&#xff0c;准备好了吗&#xff1f;让我们一同踏上这趟激动人心的AI淘金之旅&#xff01; 俗话说得好&#xff0c;“机不可失&#xff0c;时不再来”。如今&#xff0c;AI这列高速列车正呼啸而过&#xff0c;而我们每个人&#xff0c;都有机会成为车上的幸运儿。…

你们猜!吊打Oracle的国产数据库有哪几家?

今天闲暇之余看到某vx群聊得很火热&#xff0c;这个群聚集了国内不少数据库大咖&#xff0c;其中大家聊到国产数据库遥遥领先了。 最开始主要是一个朋友提到目前很多企业拍板的人并不懂数据库&#xff0c;甚至很多知名数据库都没听过。 然后大家就开始聊到国产数据库了&#xf…

yolov5源码分析001

文章目录 1.研究背景2.源码位置3.源码 1.研究背景 最近项目需要将前人做的YOLOv5改造项目继续改造,于是研究其代码,一步步剖析,一步步看一个个代码意义,旨在为后期攻克YOLOv10等系列做好准备. 2.源码位置 3.源码 # 下载指定文件,并保存在指定目录文件夹中,最后返回文件完整路…

大模型Agent开发框架对比:LangGraph/LlamaIndex/DIY

LLM代理&#xff08;智能体&#xff09;正处于一个发展阶段。随着多个新框架的出现和该领域的新投资&#xff0c;现代人工智能代理正在克服不稳定的起源&#xff0c;迅速取代 RAG 成为实施重点。那么&#xff0c;2024 年最终会成为自主人工智能系统接管我们写电子邮件、预订航班…

大模型辅助需求代码开发:如何提升核心编码任务生成效果

大模型在解释代码、回答代码问题、写单元测试等方面表现不错&#xff0c;但这些还只是辅助任务&#xff0c;真实项目需求开发中的设计及实现任务才是核心任务&#xff0c;而这方面尚未有成熟的方法和好的效果。一些 AI Developer 工具能够演示从零创建小应用的能力&#xff0c;…

三节课发布首张AIGC学习地图,全员学习AI真的必要吗?

上周&#xff0c;企培行业非常热闹&#xff0c;第20届中国企业培训与发展年会于成都正式举行。 据观察&#xff0c;本次企培年会有几个特点&#xff1a; ❶ 降本增效与AI赋能成为参会者最关注主题&#xff1b; ❷ 主办方取消了之前多年的学习平台专场&#xff0c;增加2个AI场…

谷歌收录查询工具,使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤

在数字营销和SEO领域&#xff0c;了解网站在谷歌搜索引擎中的收录情况至关重要。使用谷歌收录查询工具&#xff0c;可以有效地监测网站的索引状态&#xff0c;进而优化内容以提升网站排名和曝光度。以下是如何使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤&#x…

Defining Smart Contract Defects on Ethereum论文解读

背景 这一部分介绍了智能合约的概念和基础知识&#xff0c;以及 Solidity 编程语言。 智能合约&#xff1a;定义了智能合约作为一种运行在区块链上的程序&#xff0c;它能够在无需第三方干预的情况下自动执行合同条款。智能合约的不可变性&#xff1a;强调了智能合约一旦部署…

element-plus中日历组件设置起始为周一

问题描述 element-plus中的日历组件默认是周日到周六&#xff0c;因业务需求&#xff0c;需要实现从周一到周日的顺序。 解决方式 引入dayjs及本地语言包&#xff0c;使用本地时区即可。 import dayjs from dayjs import dayjs/locale/zh-cn ... // 这一句是为了让日历使用本地…

Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…