`

单向链表的增删

 
阅读更多

using System ;

public class LinkedList

{

//嵌套类表示单个节点;

private class Node

{

public Node (object values)

{

item=values ;

}

public object item; //数据域;

public Node next;//指针域;

public override string ToString()

{

return item.ToString ();

}

}

private int count;//记录元素个数;

public int Count

{

get {return this.count ;}

}

private Node head;//头指针;

 

//①添加元素;

public void Add(object values)

{

Node newNode=new Node (values);

if(head ==null ) //如果头指针为空;

{

head =newNode ;

}

else

{

GetByIndex(count-1).next=newNode; //插到链表结尾;

}

count ++; //链表长度+1;

}

//②在指定索引处插入元素;

public void Insert(int index,object values)

{

Node tempNode;

if(index ==0)

{

if(head ==null )

{

tempNode =new Node (values );

head =tempNode ;

}

}

else

{

Node preNode=GetByIndex(index-1); //找插入节点的前驱;

Node nextNode=preNode.next ;  //找插入节点的后继结点;

tempNode =new Node (values);

preNode.next =tempNode;

tempNode.next =nextNode ;

}

count ++;

}

//③删除指定索引元素;

public void RemoveAt(int index)

{

if (index ==0) //删除节点为头指针;

{

head =head.next ;

}

else

{

Node preNode=GetByIndex(index-1);

if(preNode.next ==null)

{

throw new ArgumentOutOfRangeException("index","索引超出范围!");

}

preNode.next =preNode.next.next ;

}

count --;

}

public override string ToString()

{

string s="";

for(Node temp=head; temp!=null; temp=temp.next)

{

s+=temp.ToString ()+" ";

}

return s;

}

private Node GetByIndex(int index)

{

if((index <0)||(index >= this.count ))

{

throw new ArgumentOutOfRangeException("index","索引超出范围!");

}

Node tempNode=this.head ;

for(int i=0;i<index ;i++)

{

tempNode=tempNode.next ;

}

return tempNode ;

}

}

class App

{

static void Main()

{

LinkedList lst=new LinkedList ();

   Console .WriteLine("①添加元素:");

lst .Add (0);

lst .Add (1);

lst .Add (2);

lst .Add (3);

Console .WriteLine(lst.ToString());

Console .WriteLine("②在2号位置,添加元素50:");

lst .Insert (2,50);

Console .WriteLine(lst.ToString());

Console .WriteLine("③移除1号元素:");

lst.RemoveAt(1);

Console .WriteLine(lst.ToString());

   Console .WriteLine(lst.ToString());

}

}

分享到:
评论

相关推荐

    有关单向链表的增删改查

    有关单向链表的增删改查,对于单向链表的插入,在固定节点后面插入分为四种情况

    单向链表的建立

    定义单向链表,并实现链表的增删改查。并且链表内所有元素不能相同

    C++单向链表.rar

    这是近期自己参考书上和网上资源使用C++编的单向链表,主要包含了链表的增删改查功能,除此之外还有简单的排序功能,代码实现的效果图已经在项目文件夹中了,可以按照效果图进行数据的增删改查等操作,最后也希望对...

    单向链表模板

    用模板实现的单向链表的增删改查的功能,简单实用,只是一个头文件,可适用于各种数据结构和类,是学习模板和单向链表的绝好参考

    C#泛型实现单向链表实现

    不使用List,使用泛型类实现单链的增删。

    C语言实例-双向链表增删改查

    双向链表(Doubly Linked List)是一种常见的数据结构,在单链表的基础上增加了向前遍历的功能。与单向链表不同,双向链表的每个节点除了包含指向下一个节点的指针外,还包含指向前一个节点的指针。

    用C++类实现单向链表的增删查和反转操作方法

    下面小编就为大家带来一篇用C++类实现单向链表的增删查和反转操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    单向链表的功能

    此文件有助于初学者学习链表,单向链表的一些相关问题

    链表类(单向)

    自己写的一个单向链表类,包括增删改查,只写了最基本的功能,类型校验没写!

    单双向链表算法

    * 单向链表增删改查操作 * */ public class LinkTest { public static void main(String[] args) { Link l=new Link(); l.addNode("A"); l.addNode("B"); l.addNode("C"); l.addNode("D"); l.addNode("E")...

    数据结构顺序表和链表(超详细)

    此压缩包为1、无头+单向+非循环链表增删查改实现// 动态申请一个结点// 单链表打印// 单链表尾插// 单链表的头插// 单链表的尾删// 单链表头删// 单链表查找// 单链表在pos位置之后插入x// 单链表删除pos位置之后的...

    简单的单向链表,二叉树学习,附带工程源码,可直接运行

    简单的单向链表,增删查改练习。简单的二叉树练习,适合初学者,简单易懂,非常实用。VS2015工程,可以直接运行。

    c语言实现单向链表.

    c语言实现双向链表的 “增删改查显功能

    python实现单向链表详解

    本文研究的主要是Python中实现单向链表的相关内容,具体如下。 什么是链表 链表顾名思义就是~链 链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”,每一个...

    数据结构(线性表、单链表、双链表)

    1-【了解】线性表的增删改查源代码 /* * 1、创建线性表,并且初始化 * 2、打印线性表 * 3、增、删、改、查 * * 线性表特点: * 1)连续的 --用数组来去表现 * 2)有限的 --设定长度 * */ #include &lt;stdio.h&gt; #include ...

    计算机等级考试二级C语言上机试题上

    给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据 域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点 并插入到链表中,插入后各结点仍保持从小到大顺序排列。 请在...

    飞机航班.zip 飞机航班.zip 飞机航班.zip

    入门第24天写的代码 基于 双向链表和单向链表的 增删查改的 记录航班 添加航班 查找 删除航班啥的小白一个 希望大神不要嘲笑哈哈

    用c编的学生管理系统

    实现 增 删 查 改 的单向链表用c语言编写的,分为两个结构体

    linklist.zip

    本代码用于开发数据存储中遇到的链表存储数据的情况,里面有main.c,linklist.c,linklist.h,Makefile4个文件,可以在linux下直接运行测试,也可以直接移植到项目中,代码中包含单向链表的增、删、改、查功能,非常...

Global site tag (gtag.js) - Google Analytics