数据结构-线性表-单链表

本文介绍了线性表的概念及其特点,详细阐述了链表作为线性表的一种存储结构的优势,以及单链表的定义、结点结构和插入操作。通过C#代码展示了单链表的实现,探讨了单链表在头部和尾部插入结点的时间复杂度,并对比了顺序表和链表在查找、插入和删除操作上的效率差异。
摘要由CSDN通过智能技术生成

线性表

线性表是线性结构的抽象,线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系。即

  1. 除第一个位置的数据元素外,其他数据元素位置的前面都只有一个数据元素;
  2. 除最后一个位置的数据元素外,其他数据元素位置后面都只有一个元素。

也就是说,数据元素是一个接一个的排列。

定义

线性表是由n(n>=0)个相同类型的数据元素构成的有限序列。

线性表的操作接口

以c#做为编写语言,并且使用int型来作为数据元素的数据类型;

//线性表接口:约定线性表的位置以0开始
public interface IList_Int_DS
{
   
    /// <summary>
    /// 返回线性表中所有数据元素的个数
    /// </summary>
    /// <returns>表的长度</returns>
    int GetLength();

    /// <summary>
    /// 清空线性表
    /// </summary>
    void Clear();

    /// <summary>
    /// 线性表是否为空
    /// </summary>
    /// <returns></returns>
    bool IsEmpty();

    /// <summary>
    /// 附加,在线性表末尾添加新元素
    /// </summary>
    /// <param name="elem">元素</param>
    void Append(int elem);

    /// <summary>
    /// 插入
    /// </summary>
    /// <param name="key">插入的位置</param>
    /// <param name="value">插入的值</param>
    void Insert(int key, int value);

    /// <summary>
    /// 移除(从表末)
    /// </summary>
    void Remove();

    /// <summary>
    /// 删除
    /// </summary>
    /// <param name="key">删除的位置</param>
    /// <returns>返回删除后的数据元素</returns>
    int Delete(int key);

    /// <summary>
    /// 获取值
    /// </summary>
    /// <param name="key">值所处的位置</param>
    /// <returns>返回线性表中第key的元素</returns>
    int GetElem(int key);

    /// <summary>
    /// 按值查找
    /// </summary>
    /// <param name="value">查找的值</param>
    /// <returns>返回在线性表中首次出现的值为value的元素,否则未找到该元素,返回一个特殊值表示查找失败(-1)</returns>
    int Locate(int value);
}

链表

作为线性表的一种存储结构。
链式存储
链表不要求逻辑上相邻的数据元素在物理存储位置上也相邻,因此在对链表进行插入和删除时不需要像顺序表移动数据元素,但同时也失去了顺序表可随机存储的优点;

链表的定义

在存储数据元素时,除了存储数据元素本身的信息外,还有存储与它相邻的数据元素的存储地址信息;
这两部分信息组成该数据元素的存储映像,称为结点(Node);
结点包含数据域引用域
因此,线性表通过每个结点的引用域形成了一根链条,链表也由此而来;

单链表

如果结点的引用域只存储该结点的直接后继的存储地址,则该链表叫单链表;

单链表结点定义代码
//结点
    public class Node_Int
    {
   
        private int data;//数据域
        private Node_Int next;//引用域

        public Node_Int()
        {
   
            data = default(int);
            next = null;
        }

        public Node_Int(int data, Node_Int next)
        {
   
            this.data = data;
            this.next = next;
        }

        public Node_Int(int data)
        {
   
            this.data = data;
            next = null;
        }

        public int Data
        {
   
            get {
    return data; }
            set {
    data = value; }
        }

        public Node_Int Next
        {
   </
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值