单链表与顺序表的对比

时间复杂度的对比:

操作 链表 顺序表
访问元素 O(n) O(1)
从头部删除元素 O(1) O(n)
从尾部删除元素 O(n) O(1)
在中间插入元素 O(n) O(n)

总结:

链表失去了顺序表随机读取的优点,同时链表由于增加了节点的指针域,空间开销比较大,但对存储空间使用要相对灵活

链表和顺序表在插入和删除是进行的是完全不同的操作

链表:

1.主要耗时的操作是遍历查找
2.删除和插入操作本身的复杂度是O(1)

顺序表:

1.主要耗时的操作是拷贝覆盖
2.抛除元素在尾部的情况
顺序表进行插入和删除时,需要对操作点之后的所有元素进行前后移动操作
只能通过拷贝和覆盖的方法进行

原文地址:https://www.cnblogs.com/amou/p/9074267.html

时间: 2024-10-08 14:41:26

单链表与顺序表的对比的相关文章

线性表的两种形式的定义与相关操作(单链表和顺序表)

#include <stdio.h> #include <string.h> #include <malloc.h> #pragma warning(disable:4996) #define ERROR 0 #define OK 1 #define MAXSIZE 100 typedef int ElemType; typedef int Status; typedef struct LNode; typedef struct { ElemType *elem; in

线性链表之顺序表

顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 特点:顺序存取,随机访问. /* Name: SeqList Copyright: 1.0 Author: Johnny Zen Date: 04/06/17 21:51 Description: 线性链表之顺序表 *//* Chinese:顺序(线性)表 English:SeqList*/#in

有序链表和顺序表

通过捕捉键盘动作来进行交互,头文件为conio.h,是console input output的缩写,捕捉用户键盘按键的函数为getch(),通过键值码可以找到对应的按键. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #define MAX 5000 struct List { int num; List

算法数据结构 单链表的实现+操作 以及和顺序表的对比

顺序表和单链表的优缺点对比: 顺序表的优点,无需为表示表中元素之间的逻辑关系而增加额外的存储空间: 可以快速的存取表中的任意位置的元素. 顺序表的缺点,插入后删除操作需要移动大量元素: 当线性表长度不稳定时,存储空间难确定,容易造成存储空间碎片. 对于单链表 链式存储即元素存储的内存单元可以是不连续,分散的.对于元素间如何来维护他们的关系(即逻辑结构,每个元素的前驱和后继.) 即用到一个指针域来存储他和前驱或是后继直接的关系. 如上面的是一个单链表的指针结构,即每个元素中存储了他的后继元素的内存

链表和顺序表的一些区别

顺序表与链表是非常基本的数据结构,它们可以被统称为线性表. 线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]-,a[n-1] 组成的有限序列. 顺序表和链表,是线性表的不同存储结构.它们各自有不同的特点和适用范围.针对它们各自的缺点,也有很多改进的措施. 一.顺序表 顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,如图 1 所示.它具有如下特点: 长度固定,必须在分配内存之前确定数组的长度. 存储空间连续,即允许元素的随机访问.

单链表的整表删除

单链表整表删除的算法思路: 声明结点 p 和 q 将第一结点赋值给 p ,下一个结点赋值给 q 循环执行释放 p 和将 q 赋值给 p 的操作 代码实现 Status ClearList(LinkList *L) { LinkList p,q; p = (*L)->next; while(p) { q = p->next; free(p); p = q; } (*L)->next = NULL; return OK; }

java实现单链表的整表创建

package com.java.dataStruct; public class Node<E> { E item; Node next; public Node(){ } public Node(E element){ this.item = element; } public Node(E element, Node next){ this.item = element; this.next = next; } } Node p; Node L = new Node<String&

循环单链表 | 循环删除表中所有最小值并输出

王道P38T19 代码: void del_min(LinkList& L){ LNode*p=L,*mp=L; while(p->next!=p){ if(p->next==L){ //进行了一轮 LNode*del=mp->next; mp->next=del->next; printf("%d ",del->data); p=p->next; //跳过头结点 (这个语句放在删除语句之前) delete del; mp=L; con

九、顺序表和单链表的对比分析

1.如何判断某个数据元素是否存在于线性表中? find()操作: 可以为线性表List增加一个查找操作 int find(const T& e)const; 参数:待查找的数据元素 返回值: 大于0:数据元素在线性表中第一次出现的位置 -1:数据元素不存在 针对基础数据类型,首先在顶层父类List中增加一个虚函数virtual int find(const T& e) const = 0;,然后在各子类中实现这个函数 // 顺序表中的实现 SeqList.h int find(const