常规链表建立

news/2025/11/19 18:02:24/文章来源:https://www.cnblogs.com/WeiZhouWork/p/19243534

常规链表建立

列举常见的顺序表功能实现函数,进行编程练习

  1. 常规顺序表(sequeue)建立

    • 定义一个顺序表的大小,结构体中采用数组而不是另一个堆内存空间表示存储的数据信息。

      typedef int data_t; // 定义顺序表中数据元素的数据类型
      #define N 20         // 定义顺序表的容量
      typedef struct
      {data_t data[N]; // 用数组作为顺序表存储空间int last; // last表示有效元素的下标(类比于数组下标)
      }sqlist, *sqlink;
      
    • 编程实现各种功能函数:

      • 创建顺序表

        sqlink list_create()
        {sqlink L;L = (sqlink)malloc(sizeof(sqlist));//实现内容的空间申请,结合后续初始化;此处可以采用calloc函数进行优化处理。if (L == NULL)//判断内存是否申请成功{printf("list malloc failed!\n");return L;}memset(L, 0, sizeof(sqlist));L->last = -1;//当顺序表内容没任何值时,应该从-1算起;如果从0开始算,则表示一开始就有一个值。return L;
        }
        
      • 清空顺序表

        判断函数是否成功时,返回值可以用整型int,或者布尔型bool表达。此处空表直接返回,不予清空。0代表成功,-1代表失败

        int list_clear(sqlink L)
        {if (L == NULL)return -1;memset(L, 0, sizeof(sqlist));L->last = -1;return 0;
        }
        
      • 释放顺序表申请的堆空间

        int list_free(sqlink L)
        {if (NULL == L)return -1;free(L);L = NULL;return 0;
        }
        
      • 删除顺序表中指定位置的数据

        int list_delete(sqlink L, int pos)
        {if (-1 == L->last){printf("list is empty");return -1;}if (pos < 0 || pos >= L->last)// 检查该指定位置是否合法{printf("The list is invalid\n");return -1;}int i = 0;for (i = pos; i <= L->last; i++)// 删除指定成员,即将该处后续元素依次往前覆盖{L->data[i] = L->data[i + 1];}L->last--;//最后更新last的值return 0;
        }
        
      • 检查顺序表是否为空表

        int list_empty(sqlink L)
        {if (L->last == -1)//当为空表时,下标last为-1return -1;elsereturn 0;
        }
        
      • 测量顺序表的长度

        int list_length(sqlink L)
        {if (L->last == -1)//当为空表时,下标last为-1,否则就有长度return -1;elsereturn (L->last + 1);
        }
        
      • 定位指定值在该顺序表的位置

        int list_locate(sqlink L, data_t value)
        {int i;for (i = 0; i < L->last; i++){if (L->data[i] == value)//利用便利,检测指定值在该顺序表的位置并返回return i;}return -1;
        }
        
      • 指定位置插入某个指定的值

        int list_insert(sqlink L, data_t value, int pos)
        {int i;if (L->last == N - 1)//判断空表{printf("The list is full\n");return -1;}if (pos < 0 || pos > L->last + 1)// 检查该指定位置是否合法{printf("Pos is invalid\n");return -1;}for (i = L->last; i >= pos; i--)//将指定位置处,后续的值都往后腾出一个位置,用来放指定的值。{L->data[i + 1] = L->data[i];}L->data[pos] = value;L->last++;return 0;
        }
        
      • 顺序表内容展示

        int list_show(sqlink L)
        {int i;if (L == NULL)return -1;if (L->last == -1)//空表就无需展示printf("list is empty.\n");for (i = 0; i <= L->last; i++)//利用for循环打印每个元素printf("%d ", L->data[i]);puts("");//遍历完成,输出回车以和别的函数区分return 0;
        }
        
      • 合并两个元素类型相同顺序表

        int list_merge(sqlink L1, sqlink L2)//合并L1 和L2 顺序表,并消除相同元素
        {int i = 0;int ret;while (i <= L2->last){ret = list_locate(L1, L2->data[i]);// ret 为-1时,即L2->data[i]在L1无重复元素,直接从尾部插入。if (ret == -1)list_insert(L1, L2->data[i], L1->last + 1);i++;}return 0;
        }
        
      • 删除单个顺序表中相同的元素

        int list_purge(sqlink L)
        {int i = 1;int j;if (L->last == 0)//判断顺序表是否仅一个元素return 0;while (i <= L->last){j = i - 1;while (j >= 0){if (L->data[i] == L->data[j])//存在相同元素时,进行删除操作{list_delete(L, i);break;}elsej--;if (j < 0)//内部遍历完成后,进行外部遍历,保证每个元素都进行对比i++;}}
        }
        
  2. 常规顺序表功能调试

    为了方便进行测试各个功能函数,本文将为每个测试都单独写成了一个函数,仅需进行单独调用即可进行测试,思路较为清晰。

    • 函数主体如下,每次进行测试时,取消对应函数注释即可,并且尤其注意,如果是模块化编程,需要在主函数前进行函数声明。

      int main(int argc, const char *argv[])
      {//void test_delete();//void test_merge();test_purge();return 0;
      }
      
    • 各测试函数如下,符合模块化编程思想:

      • 插入功能,及单顺序表合并测试

      • void test_purge()
        {sqlink L;L = list_create();list_insert(L, 10, 0);list_insert(L, 20, 0);list_insert(L, 30, 0);list_insert(L, 20, 0);list_insert(L, 30, 0);list_show(L);list_purge(L);list_show(L);
        }
        
      • 删除测试

      • void test_delete()
        {sqlink L;L = list_create();list_insert(L, 10, 0);list_insert(L, 20, 0);list_insert(L, 30, 0);list_insert(L, 40, 0);list_insert(L, 50, 0);list_show(L);list_delete(L, 15);list_show(L);
        }
        
      • 双顺序表合并测试

      • void test_merge()
        {sqlink L1, L2;L1 = list_create();L2 = list_create();list_insert(L1, 10, 0);list_insert(L1, 20, 0);list_insert(L1, 30, 0);list_insert(L1, 40, 0);list_insert(L1, 50, 0);list_insert(L2, 30, 0);list_insert(L2, 40, 0);list_insert(L2, 60, 0);list_insert(L2, 70, 0);list_insert(L2, 80, 0);list_show(L1);list_show(L2);list_merge(L1, L2);list_show(L1);
        }
        

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

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

相关文章

HDLBits网站学习——Procedures

Always block (combinational)由于数字电路由通过导线连接的逻辑门构成,任何电路都可以表示为模块和赋值语句的某种组合。但有时这并非描述电路最便捷的方式,过程块(always块是其中一种)提供了另一种电路描述语法。…

win11为什么我的不显示虚拟机平台选项

可能显示的是英文的 virtual machine platform 而不是中文的 虚拟机平台

2025 年最新http 代理服务商权威推荐排行榜:百万级 IP 资源 + 国际认证高可用率,爬虫 / 动态 / 高匿代理优选指南不限量 http 代理/独享 http 代理平台推荐

引言 在全球数字化浪潮下,大数据采集、跨境业务协同、网络安全防护等场景对 http 代理服务的依赖度持续攀升,市场规模年增速超 25%。然而行业资质参差不齐,部分服务商存在 IP 资源陈旧、匿名性不达标、稳定性不足等…

安装部署opengauss

背景: 项目需要,适配opengauss 环境准备 基础环境准备 准备一台4核8G的openEuler 22.03 (LTS-SP4)系统服务器1.关闭selinux setenforce 0 sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config2.关闭…

不只做语音,ElevenLabs 推出图像和视频生成平台;博通推出语音 AI 芯片,实现端侧 TTS 和实时翻译丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态…

海外直播源码选型指南:技术架构与合规性细节解析及成品多语言直播APP源码交付

除了海外客户对国际版多语言的直播APP咨询外,近期也接到了国内的软件服务商给自己客户开发的相关软件咨询。一般主要关注的就是价格和源码交付的细节,今天就来整体说明下我们海外国际版多语言直播语聊类APP成品源码的…

视频汇聚平台EasyCVR如何通过可视化管理与远程运维赋能安防“一张网”

在视频监控系统规模日益庞大的今天,无论是智慧城市、大型企业还是连锁门店,动辄成百上千路的摄像头管理已成为运维团队的巨大挑战,传统运维模式普遍面临:设备状态不透明:设备是否在线、运行是否健康,只能靠人工定…

单向循环链表接口设计

单向循环链表接口设计@file name: 单向循环链表接口设计 @brief :设计单向循环链表,实现各种功能函数并测试 @author m15629473867@163.com @date 2025/11/19 @version 1.0 @property @note CopyRight (c) 2025-2026…

2025 最新雕刻机源头厂家权威推荐榜:自主研发专利加持 + 国际测评认证,高精度设备优选清单数控雕刻机/激光雕刻机/小型雕刻机/金属雕刻机公司推荐

引言 在全球制造业向精密化、定制化转型的浪潮下,雕刻机作为核心加工装备,其性能表现直接影响生产效率与产品品质。当前市场品牌数量激增,技术水平参差不齐,部分产品存在精度波动大、适配场景有限、售后响应迟缓等…

linux firewall

在 Linux 系统中,防火墙(Firewall)主要用于控制网络流量,允许或拒绝特定的网络连接。常见的防火墙工具包括:1. iptables(传统方式) 这是 Linux 系统中最常用的防火墙工具,适用于大多数基于 iptables 的发行版(…

2025 年 11 月高温老化房厂家推荐排行榜,老化室、高温老化室、高温房、熟化房、固化房、恒温恒湿室、恒温房、恒温恒湿房公司推荐

2025 年 11 月高温老化房厂家推荐排行榜:老化室、高温老化室、高温房、熟化房、固化房、恒温恒湿室、恒温房、恒温恒湿房公司推荐 随着工业制造和科研测试领域的快速发展,高温老化房、老化室、高温老化室、高温房、熟…

2025 年 11 月耐磨钢板厂家推荐排行榜,高耐磨钢板,高锰耐磨钢板,焊达500耐磨钢板,进口复合耐磨钢板,双金属复合耐磨钢板公司推荐

2025年11月耐磨钢板厂家推荐排行榜:高耐磨钢板、高锰耐磨钢板、焊达500耐磨钢板、进口复合耐磨钢板、双金属复合耐磨钢板公司推荐 行业背景与发展现状 耐磨钢板作为工业领域的关键基础材料,其技术发展水平直接关系到…

wps如何快速交换列(调整列顺序),删除多个不连续的列

写表格的时候,最常见的两个小需求就是:把某两列换个位置,或者干脆删掉几列。其实这事儿不用折腾复杂功能,靠几招顺手的操作,几秒钟就能搞定。下面我把自己在 WPS 表格里常用的方法整理一下,能用鼠标的就用鼠标,…

2025 年 11 月耐磨板厂家推荐排行榜,国产耐磨板,悍达耐磨板,堆焊耐磨板,进口耐磨板,MN13耐磨板,NM360-NM600高强度耐磨板,高铬合金耐磨板公司推荐!

2025年11月耐磨板厂家推荐排行榜:专业指南助力工业设备升级 在工业生产领域,耐磨板作为关键材料,其性能直接影响设备使用寿命和运营效率。随着2025年工业技术标准的不断提升,各类耐磨材料在矿山机械、工程设备、物…

视频融合平台EasyCVR助力守护渔业牧区安全与增效

视频融合平台EasyCVR助力守护渔业牧区安全与增效在广袤的渔业水域和牧区草原,传统的安全管理方式正面临着巨大的挑战。地域广阔、环境复杂、人力监管成本高、风险响应滞后等问题,长期以来制约着农牧业的现代化发展。…

2025 最新推荐!精雕机厂家口碑排行榜,国际协会测评认证 + 多行业适配实力权威发布高校合作精雕机/东莞精雕机/广东精雕机公司推荐

引言 在全球智能制造技术高速迭代的浪潮下,精雕机作为高精度加工领域的核心装备,其精度控制、稳定性与行业适配能力已成为影响科研创新突破与企业生产效能的关键因素。当前市场中,部分厂家存在技术储备不足、定制响…

2025 最新供水设备源头厂家推荐排行榜:无负压 / 恒压 / 变频供水设备实力品牌精选

引言 随着新型城镇化与工业智能化的快速发展,供水设备作为民生保障与产业运行的核心支撑,其品质稳定性、技术适配性与节能效能愈发关键。当前市场中品牌良莠不齐,部分小厂家缺乏核心技术与合规认证,产品存在运行故…

2025 最新限制器厂家权威推荐榜:国际测评认证 + 年产超 20 万套实力品牌,生产与服务全方位评估展现卓越制造能力限制器/扭力限制器/扭矩限制器公司推荐

引言 在全球工业自动化升级浪潮下,传动系统过载保护成为保障生产安全与效率的核心环节,限制器(含扭力限制器、扭矩限制器)的性能表现直接影响设备寿命与运营成本。当前市场品牌鱼龙混杂,性能差异显著,为破解采购…

2025 年安全联轴器厂家最新推荐榜单:权威测评优质厂家 ,铸就传动安全与品质保障标杆

引言 在全球工业自动化升级浪潮下,传动系统的安全防护成为决定生产连续性与运营效益的核心要素,安全联轴器作为过载保护关键部件,其性能可靠性备受行业关注。据国际传动设备协会(IDA)2025 年度测评报告显示,全球…

2025 年智慧停车系统、高校智慧停车系统十大品牌权威推荐!破解停车难题,这些优质品牌值得选择

2025 年智慧停车系统、高校智慧停车系统十大品牌权威推荐!破解停车难题,这些优质品牌值得选择 随着 2025 年中国城市化进程持续深化,机动车保有量预计突破 4.5 亿辆,城市停车位缺口达 1.2 亿个,停车难已成为制约城…