`
zsjg13
  • 浏览: 138908 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

单链表

阅读更多

数组的局限:

(1)若改变数组的大小,就需要创建一个新数组并从原数组中拷贝所有数据至新数组。

(2)数组元素在内存中依次连续存储,插入新数据项要移动数组中其他数据。

 

链式结构:是存储数据和指向其他节点的链指针的节点的集合。

 

单链表:如果一个节点仅仅包含指向其后继的链指针,则该表称为“单链表”。

 

代码参考:

public class IntNode {
    int info;
    IntNode next;
    public IntNode(int info) {
        this(info, null);
    }
    public IntNode(int info, IntNode intNode) {
        this.info = info;
        this.next = intNode;
    }

    public static void main(String[] args) {
        IntNode p = new IntNode(10);
        p.next = new IntNode(8);
        p.next.next = new IntNode(50);
    }
}
public class IntSLList {
    private IntNode head, tail;
    public IntSLList() {
        head = tail = null;
    }
    public boolean isEmpty() {
        return head == null;
    }
    public void addToHead(int el) {
        head = new IntNode(el, head);
        if (tail == null)
            tail = head;
    }
    public void addToTail(int el) {
        if (!isEmpty()) {
            tail.next = new IntNode(el);
            tail = tail.next;
        } else
            head = tail = new IntNode(el);
    }
    public int deleteFromHead() {
        int el = head.info;
        if (head == tail)
            head = tail = null;
        else
            head = head.next;
        return el;
    }
    public int delteFromTail() {
        int el = tail.info;
        if (head == tail)
            head = tail = null;
        else {
            IntNode temp;
            for (temp = head; temp.next != tail; temp = temp.next);
            tail = temp;
            tail.next = null;
        }
        return el;
    }
    public void printAll() {
        for (IntNode temp = head; temp != null; temp = temp.next)
            System.out.println(temp.info);
    }
    public boolean isInList(int el) {
        IntNode temp;
        for (temp = head; temp!= null && temp.info != el; temp = temp.next);
        return temp != null;
    }
    public void delete(int el) {
        if (!isEmpty()) {
            if (head == tail && el == head.info)
                head = tail = null;
            else if (el == head.info)
                head = head.next;
            else {
                IntNode pred, temp;
                for (pred = head, temp = head.next;temp != null && temp.info != el; pred = temp.next, temp = temp.next);
                if (temp != null) {
                    pred.next = temp.next;
                    if (temp == tail)
                        tail = pred;
                }
            }
        }
    }
}

 

分享到:
评论

相关推荐

    数据结构实验——单链表

    实验二 单链表实验 一、实验目的 1、掌握用Visual C++6.0上机调试单链表的基本方法 2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现 二、实现内容 1、单链表基本操作的实现 在带头结点的...

    单链表的各种基本运算

    建立一个单链表,实现单链表的初始化,插入、删除节点等功能,以及确定某一元素在单链表中的位置。 (1) 初始化单链表; (2) 依次采用尾插入法插入a,b,c,d,e元素; (3) 输出单链表L; (4) 输出单链表L的长度...

    使用C++实现单链表的基本操作:1、创建单链表2、遍历单链表3、单链表插入4、删除单链表5、判断是否为空6、单链表的

    使用C++实现单链表的基本操作: 1、创建单链表 2、遍历单链表 3、单链表插入 4、删除单链表 5、判断是否为空 6、单链表的长度 7、单链表查找 8、退出

    实验报告2 单链表的操作

    单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求: 1. 从键盘输入10个整数,产生不带表头的单链表,并输入结点值。 2. 从键盘输入1个整数,在单链表中...

    单链表的基本操作

    1、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。 2、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。 3、删除...

    数据结构单链表插入、删除和修改实验报告

    数据结构单链表插入、删除和修改实验报告 一、实验目的 1.理解数据结构中带头结点单链表的定义和逻辑图表示方法。 2.掌握单链表中结点结构的JAVA描述。 3.熟练掌握单链表的插入、删除和查询算法的设计与JAVA实现...

    单链表的基本操作(实验)

    (1) 从键盘读入一组整数,按输入顺序形成单链表。并将创建好的单链表元素依次打印在屏幕上。(注意:选择头插法或者尾插法!) (2) 设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找...

    单链表程序.h文件

    1、定义单链表类。 2、实验验证如下算法的正确性、各种功能及指标: 1)创建单链表; 2)插入操作:分别在当前结点后、表头、表尾插入值为x的结点; 3)删除操作:分别删除表头结点、表尾结点和当前结点的后继结点;...

    单链表操作 和 栈、队列的应用

    单链表操作 和 栈、队列的应用 基本要求:1)用前插法建立带表头结点的单链表; 2)在该链表中统计数据值为x的结点个数。 3)在该链表中值为k的结点前插入y结点,并删除k结点,如果没有值为k的结点则把y结点插在...

    实验一_有序单链表合并_

    【问题描述】1、建立两个有序的单链表,表中元素的数据类型自己指定;2、将建立的两个链表合并为一个新的有序的单链表;3、输出显示已合并好的有序的单链表。【输入形式】输入表1的元素个数,表1的元素值(逆序),...

    数据结构-单链表-实验报告.rar_C++_tripk8z_单链表_单链表实验_实验报告

    (2)验证单链表及其基本操作的实现; (3)进一步理解算法与程序的关系,能够将单链表算法转换为对应的程序。 1.2 实验要求: (1)用头插法(或尾插法)建立带头结点的单链表; (2)对已建立的单链表实现插入、...

    数据结构中关于带有表头结点的有序单链表

    构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后...

    无头节点的单链表

    无头节点单链表的实现可是说是对C语言指针一个最直接、最贴合实际、也是最具有归纳性的程序设计应用。许多C语言基础面试题都涉及单链表的实现和构造,其目的就是考察面试者对C语言基础数据类型是否有足够的了解,对...

    ShiYan1_单链表_C++_顺序表_数据结构_

    1.顺序表的验证 (1)定义一个结构体,描述学生信息。学生信息包括:学号、姓名、性别、班级和电话... (2)修改带头结点的单链表类模板中的插入函数,插入元素时按元素值从小到大的顺序插入数据元素到链表的适当位置。

    用c++类模板,实现的单链表基本操作

    //析构函数,销毁单链表 void CreateList_L(int n);//构造单链表 bool IsEmpty() const{return L->next == 0;}//判断单链表是否为空 int GetElem_L(int i,T &e) const;//当第i个元素存在时,其值赋给e int List...

    数据结构 单链表程序

    1、建立含有若干个元素的单链表; 2、对已建立的单链表实现查找、逆置和计算线性表长度等操作。 void main( ) { int r[100],n,i,x; cout请输入线性表中元素的个数!"; cin>>n; cout请输入线性表中每个元素!"; ...

    合并单链表(C源代码)

    合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表(C源代码)合并单链表...

    c++单链表基本操作的实现

    1、单链表基本操作的实现 [问题描述]要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s 指示的结点空间,并置x为其数据域值,...

    C语言实现单链表(常规操作)

    C语言实现单链表(常规操作) LinkList CreateHeadListH(); // 头插法创建单链表 LinkList CreateHeadListT(); // 尾插法创建单链表 int ListEmpty(); // 单链表判空 int ListLength(); // 求单链表长度...

    单链表的创建,查找,排序,插入,删除

    1、创建一个带头结点的单链表(头指针为head),且遍历此链表(输出链表中各结点的值); 2、查找单链表中的第i个结点,并输出结点元素的值; 3、在单链表中的第i个结点前插入一个结点值为e的正整数(从外部输入); 4...

Global site tag (gtag.js) - Google Analytics