首页 > 其他分享 >学校数据结构实验_线性表:纯C语言版

学校数据结构实验_线性表:纯C语言版

时间:2023-05-10 21:56:34浏览次数:35  
标签:顺序 线性表 删除 C语言 链表 插入 数据结构 迭代

首先分别声明链表和顺序表的结构单位,

 

 

1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,

链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置插入,所以在插入函数里设计了一个计数器,来辅助记录节点位置,

无论是顺序表还是链表插入的时候呀都要考虑扩容,所以在插入之前增加了扩容代码部分.

 

 这里在链表插入时定位目标位置那里的while函数有点难读,可以设计一个设计一个prev节点记录tail迭代后的前驱值方便一点.

删除函数:链表的删除函数需要一个prev记录前驱,防止删除后找不到上一个接点,影响链表的链接.这里用第一个结点的迭代找到要删除的位置..

顺序表的删除使用下标直接找到要删除的位置,然后向前挪数据填补删除后的空缺.

 

 以上是测试链表与顺序表随即插入的只要需要的函数接口:

接下来设计循环与时间函数测定两个表在大量插入和删除时所用的时间.

for循环中不仅在插入的同时也随机生成了不同整数,再用这些整数对表长取余使其插入不要越界

 

 测试结果却得到了出乎意料的结果(前面的一万次是printf函数中的固定值实际为20000次).

分析:链表的随机插入时间复杂度与顺序表是一样的,顺序表中间插入一个数时间复杂度主要用在移动数据上,而链表随机插入一个数时间复杂度用在迭代上,他们语句几乎在插入位置随机是差不多,但是为什么线性表要比链表在理论上慢呢,查了资料发现线性表的移动数据和链表的迭代在计算机处理上前者比后者慢,所以链表较快一点,但是实验结果却不是这样

差异分析:1:可能是while循环不容易度导致这个环节在每次迭代时拖慢了速度<但是删除却没有这样的问题,

2:可能是链表本身的问题:实验所用链表是一个不带哨兵位节点的链表,可能是每次在传参二级指针上出的问题.........

标签:顺序,线性表,删除,C语言,链表,插入,数据结构,迭代
From: https://www.cnblogs.com/qjwxlj/p/17389436.html

相关文章

  • 数据结构 幂等性是什么?
    https://blog.csdn.net/qq_34801169/article/details/114374827一、幂等性:幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会......
  • 关于数据结构
    1月15日,TSOI2022迎来了曾获NOI铜牌的Vergil学长!而Vergil线下课的第一个板块就是——数据结构。本文会梳理Vergil所讲的所有数据结构,我们进入正题。2023.2.14感谢大佬L3067545513帮忙修改LCA~2023.2.19ST表被批评了QAQ线段树引入线段树,顾名思义,我们......
  • 打卡 c语言趣味编程 抓交通肇事犯
    一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。 甲说:牌照的前两位数字是相同的; 乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。 请根据以上线索求出车号。......
  • 2022年考研数据结构_3 栈和队列
    文章目录3.栈和队列3.1栈3.1.1栈的定义3.1.2栈的实现3.1.3栈的应用(1)递归(2)四则运算表达式求解①中缀表达式转后缀表达式②后缀表达式的计算3.2队列3.2.1队列的定义3.2.2队列的实现3.2.2队列的应用3.3应用3.3.1表达式语言表示1--中缀转后缀语言表述2--中缀转后缀优......
  • 高效c语言1快速入门
    本章将开发你的第一个C语言程序:传统的"Hello,world!"程序。然后讨论一些编辑器和编译器的选项,并阐述移植性问题。Hello,world!#include<stdio.h>#include<stdlib.h>intmain(void){puts("Hello,world!");returnEXIT_SUCCESS;}在Linux和其他类似Unix的操作系统......
  • 打卡 c语言趣味编程 打鱼还是晒网
    中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的以后的某一天中是打鱼还是晒网。设计思路:1、定义一个函数,该函数接收两个参数:一个是起始日期,另一个是未来的某一天。2、计算起始日期和未来的某一天之间相隔的天数......
  • 学习JavaScript数据结构与算法 第八章
    八,字典和散列表8.3ES2015Map类ECMAScript2015新增了Map类。constmap=newMap();map.set('Gandalf','[email protected]');map.set('John','[email protected]');map.set('Tyrion','[email protected]');......
  • 学习JavaScript数据结构与算法 第七章
    7.集合7.4ESMAScript2015---Set类ECMAScript2015新增了Set类作为JavaScriptAPI的一部分。我们可以基于ES2015的Set开发我们的Set类。constset=newSet()set.add(1)console.log(set.values())//@iteratorconsole.log(set.has(1))console.log(set......
  • 数据结构(python版)—— 1、前期知识和综述
    前言为了提高代码质量和后续处理需求的能力,有必要再复习下算法和数据结构,为后续ESP32项目和数据处理打下坚实基础。故根据所学整理此系列文章。文章分为:1、概述:计算理论2、算法分析3、基本结构(线性表、链表、栈和队列)4、递归(递归算法和分治策略)5、排序与查找6、树及其算法......
  • 9. 线性表概念
    线性表1.1概念简介线性表(简称表),是一种抽象的数学概念,是一组元素的序列的抽象,它由有穷个元素组成(0个或任意个)顺序表:使用一大块连续的内存顺序存储表中的元素,这样实现的表称为顺序表,或称连续表在顺序表中,元素的关系使用顺序表的存储顺序自然地表示链接表:在存储空间......