1:顺序表的优缺点:List

优点:顺序表示用地址连续的存储单元顺序存储线性表中的各个元素,逻辑上相领的数据元素在物理位置上也相领,因此,在顺序表中查找任何一个位置上的数据元素非常方便;

缺点:在顺序表中插入及删除时需要通过移动数据元素来实现,影响了运行的效率;

2:线性表的另外一种存储结构---链式存储LinkList

优点:对链表进行插入和删除时不需要去移动数据元素,效率比较高

缺点:失去了对线性表可随机存储的优点

顺序表实现接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 线性表
{interface IList<T>{int GetLength();void Clear();bool IsEmpty();void Add(T item);void Insert(T item, int index);void Delete(int index);T this[int index] { get; }T GetEle(int index);int Locate(T value);}
}

顺序表实现方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 线性表
{class MyList<T>:IList<T>{public T[] data;private int count;public MyList(int size) {data = new T[size];count = 0;}public MyList():this(10) {}public int GetLength(){return count;}public void Clear(){count = 0;}public bool IsEmpty(){return count == 0;}public void Add(T item){if (count == data.Length){Console.WriteLine("当前顺序表已存满,不允许在存入");}else {data[count] = item;count++;}}public void Insert(T item, int index){if (index >= 0 && index <= count - 1){for (int i = count - 1; i >= index; i--){if (i + 1 >= data.Length){}else{data[i + 1] = data[i];}}data[index] = item;if (count == data.Length){Console.WriteLine("存储满了  替换元素");}else {count++;}}else {Console.WriteLine("下标越界了------------>");}}public void Delete(int index){if (index >= 0 && index <= count - 1){for (int i = index; i < count; i++){if (i + 1 >= count){}else{data[i] = data[i + 1];}}count--;}else {Console.WriteLine("下标越界了------------>");}}public T this[int index]{get{if (index >= 0 && index <= count){return data[index];}else{return default(T);}}}public T GetEle(int index){if (index >= 0 && index <= count -1 ){return data[index];}else { return default(T);}}public int Locate(T value){for (int i = 0; i < count; i++){if (data[i].Equals(value)){return i;}}return -1;}}
}

单链表实现接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 线性表
{/// <summary>/// 单链表的节点/// </summary>/// <typeparam name="T"></typeparam>class Node<T>{private T data;//存储数据private Node<T> next;//指针   用来指向下一个元素public Node(T value) {data = value;next = null;}public Node(T value, Node<T> next) {data = value;this.next = next;}public Node(Node<T> next) {this.next = next;}public Node() { data = default(T);next = null;}public T Data {get { return data; }set { data = value; }}public Node<T> Next {get { return next; }set { next = value; }}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 线性表
{class LinkList<T>:IList<T>{private Node<T> head;//存储一个头节点public LinkList(){head = null;}public int GetLength(){if (head == null){return 0;}Node<T> temp = head;int count = 1;while (true) {if (temp.Next != null){count++;temp = temp.Next;}else {break;}}return count;}public void Clear(){head = null;//GC 会自动回收其他指针的内存}public bool IsEmpty(){return head == null;}public void Add(T item){Node<T> newNode = new Node<T>(item);//如果头节点为空,那么这个新的节点就是头节点if (head == null){head = newNode;}else {Node<T> temp = head;while (true) {if (temp.Next != null){temp = temp.Next;}else {break;}}//把新的节点放置尾部temp.Next = newNode;}}public void Insert(T item, int index){Node<T> newNode = new Node<T>(item);//插入到头结点if (index == 0){newNode.Next = head.Next;head.Next = newNode;}else {Node<T> temp = head;for (int i = 1; i <= index-1; i++){//让temp向后移动一个位置temp = temp.Next;}Node<T> preNode = temp;Node<T> currentNode = temp.Next;preNode.Next = newNode;newNode.Next = currentNode;}}public void Delete(int index){if (index == 0){Node<T> temp = head.Next;head = temp;head.Next = temp.Next;}else{Node<T> temp = head;for (int i = 0; i <= index - 1; i++){temp = temp.Next;}Node<T> preTemp = temp;Node<T> curTemp = preTemp.Next;Node<T> nextTemp = curTemp.Next;preTemp.Next = nextTemp;}}public T this[int index]{get{Node<T> temp = head;for (int i = 1; i <= index; i++){temp = temp.Next;}return temp.Data;}}public T GetEle(int index){return this[index];}public int Locate(T value){Node<T> temp = head;if (temp == null){return -1;}else {int index = 0;while (true){if (temp.Data.Equals(value)){return index;}else {if (temp.Next != null){temp = temp.Next;index++;}else {break;}}}}return -1;}}
}

数据结构顺序表和单链表优缺点相关推荐

  1. 数据结构----顺序表与单链表(JAVA)

    下面为学习顺序表和单链表的一些基本操作函数: 1 public class SeqList<T> extends Object { 2 protected int n; 3 protect ...

  2. 线性表之顺序表与单链表的区别及优缺点

    这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多. 1.What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数 ...

  3. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  4. 数据结构——线性表:顺序表、单链表、双链表(C++)

    内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...

  5. 数据结构个人笔记 第三课 顺序表和单链表

    数据结构个人笔记 第三课 顺序表和单链表 顺序表的基本操作 插入元素 删除元素 顺序表查找元素 顺序表更改元素 本节总结代码 单链表 链表的节点 头节点.头指针和首元结点 链表的创建(初始化) 本节总 ...

  6. 数据结构实验二——建立具有至少10个元素的顺序表或单链表,并能对该表进行查找、删除等基本操作。

    结合实际应用,建立具有至少10个元素的顺序表或单链表,并能对该表进行查找.删除等基本操作. //主函数 #include"Sq.h" #include<stdio.h> ...

  7. java如何给顺序表赋值_JAVA模拟新增顺序表及单链表

    最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序www.cppcns.com表 * * @author cjd * ...

  8. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  9. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表

    ​ 线性表是数据结构中比较基础的内容,不过也是入门的所需要客服的第一个难关.因为从这里开始,就需要我们动手编程,这就对很多同学的动手能力提出了挑战.不过这些都是我们需要克服的阵痛,学习新的知识总是痛苦 ...

最新文章

  1. 使用java的Calendar对象获得当前日期的上几个度开始、结束时间
  2. 2021年春季学期-信号与系统-第十四次作业参考答案-第八小题参考答案
  3. 集成QML和C ++
  4. 信息学奥赛一本通(1025:保留12位小数的浮点数)
  5. 生活中的这些难题,数据库开发者可为你解决!
  6. Spring : Transaction源码解析
  7. anaconda cuda路径_anaconda+cuda+cudann+tensorflow环境安装
  8. python 如何运行程序
  9. oc宏定义的简单理解
  10. 《计算广告学之内容匹配广告展示广告原理、技术和实践》学习笔记
  11. Java Web实现使用浏览器下载文件代码
  12. 2022年度上半年河南省建筑工程安全文明标准化示范工地认定意见公示
  13. 不做教书匠,要做研究型教师
  14. Laravel数据库之Seeding
  15. 用java代码检查sql语法错误_您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在第1行'?'附近使用正确的语法...
  16. 2.Hadoop3.x 基础知识
  17. 高端风再起,小爱、小度、天猫精灵发新芽?
  18. 《The One!团队》第八次作业:ALPHA冲刺(四)
  19. Android getIntent.getString();为空
  20. 【百强榜单】2018第六届上汽设计国际挑战赛 全球百强作品正式公布!

热门文章

  1. 小花梨判连通(DFS或BFS或并查集+vector+map)——“美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)
  2. 被boss直聘转发过多而“封杀”的2021年全套java高级面试题有多牛
  3. 基于JAVA3D的网络三维技术的设计与实现
  4. 没有域名备案可以安装ssl证书吗?应用IP申请ssl证书的注意事项
  5. 硬盘修复真经 误区、缺陷、参数与低格
  6. json中的loads和dumps的区别及用法
  7. b站弹幕姬python_Python 融合多方代码b站弹幕朗读姬代码
  8. OpenAI在Dota 2游戏中虽败犹荣
  9. P-NUCLEO-IHM001 电机开发套件(一)
  10. 淘宝宝贝描述模板DIV无法使用BACKGROUND属性的终极解决方案