- 浏览: 1230379 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
using System;
using System.Collections.Generic;
using System.Text;
namespace SingleLinkedList
{
class Program
{
static void Main(string[] args)
{
//实例调用
}
}
//定义单链表的结点
//结点存储数据和下一个结点的地址(引用).这里用一个类表示.
public class Node<T>
{
private T data; //数据
private Node<T> next; //引用
//构造器
public Node(T val, Node<T> p)
{
data = val;
next = p;
}
//构造器2
public Node(Node<T> p)
{
next = p;
}
//构造器3
public Node(T val)
{
data = val;
next = null;
}
//构造器4
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; }
}
}
//单链表类--定义操作结点的一些方法(如删除, 插入等).
//IList<T>是.net自带的一个接口. 这里实现了这个接口.
public class LinkList<T> : IList<T>
{
private Node<T> head; //单链表的头引用
//头引用 属性
public Node<T> Head
{
get { return head; }
set { head = value; }
}
//构造器
public LinkList()
{
head = null;
}
///<summary>
///求单链表的长度
///需要从表头开始, 一个结点一个结点遍历,直到表的末尾.
///</summary>
public int GetLength()
{
Node<T> p = head;
int len = 0;
while (p != null)
{
++len;
p = p.Next;
}
return len;
}
///<summary>
/// 清空单链表
/// head=null即可.
/// 单链表清空后,原来结点所占用的空间不会一直保留, 而由垃圾回收器进行回收.
///</summary>
public void Clear()
{
head = null;
}
///<summary>
/// 判断单链表是否为空
/// head==null,即为空
///</summary>
public bool IsEmpty()
{
if (head == null)
{
return true;
}
else
{
return false;
}
}
///<summary>
///附加操作
///在单链表的末尾添加新元素
/// </summary>
public void Append(T item)
{
Node<T> q = new Node<T>(item);
Node<T> p = new Node<T>();
if (head == null)
{
head = q;
return;
}
p = head;
while (p.Next != null)
{
p = p.Next;
}
p.Next = q;
}
//在单链表的第 i 个结点位置前插入一个值为 item 的结点.
public void Insert(T item, int i)
{
if (IsEmpty() || i < 1)
{
Console.WriteLine("List is empty or Position is error!");
return;
}
//就一个head元素.(插入到head前即可)
if (i == 1)
{
Node<T> q = new Node<T>(item);
q.Next = head;
return;
}
//非head(中间某一元素前插入P)
Node<T> p = head;
Node<T> r = new Node<T>();
int j = 1;
while (p.Next != null && j < i)
{
r = p;
p = p.Next;
++j;
}
if (j == i)
{
Node<T> q = new Node<T>(item);
q.Next = p;
r.Next = q;
}
}
//在单链表的第 i 个结点的位置后插入一个值为 item的结点.
public void InsertPost(T item, int i)
{
if (IsEmpty() || i < 1)
{
Console.WriteLine("List is empty or Position is error!");
return;
}
if (i == 1)
{
Node<T> q = new Node<T>(item);
q.Next = head.Next;
head.Next = q;
return;
}
Node<T> p = head;
int j = 1;
while (p != null && j < i)
{
p = p.Next;
++j;
}
if (j == i)
{
Node<T> q = new Node<T>(item);
q.Next = p.Next;
p.Next = q;
}
}
//删除单链表的第 i 个结点
public T Delete(int i)
{
if (IsEmpty() || i < 0)
{
Console.WriteLine("Link is empty or Position is error!");
return default(T);
}
Node<T> q = new Node<T>();
if (i == 1)
{
q = head;
head = head.Next;
return q.Data;
}
Node<T> p = head;
int j = 1;
//从头一直找到 i 所在的位置
//条件是: (1).单链表没有到末尾, (2).还没有到 i 所在的位置 ( j< i).
while (p.Next != null && j < i)
{
++j;
q = p;
p = p.Next;
}
if (j == i)
{
q.Next = p.Next;
return p.Data;
}
else
{
Console.WriteLine("The item node is not exist!");
return default(T);
}
}
//获得单链表的第 i 个数据元素
public T GetElem(int i)
{
if (IsEmpty())
{
Console.WriteLine("List is empty!");
return default(T);
}
Node<T> p = new Node<T>();
p = head;
int j = 1;
while (p.Next != null & j < i)
{
++j;
p = p.Next;
}
if (j == i)
{
return p.Data; //找到了.
}
else
{
Console.WriteLine("The item node is not exist!");
return default(T);
}
}
///<summary>
///在单链表中查找值为 value 的结点
///</summary>
public int Locate(T value)
{
if (IsEmpty())
{
Console.WriteLine("List is Empty!");
return -1;
}
Node<T> p = new Node<T>();
p = head;
int i = 1;
while (!p.Data.Equals(value) && p.Next != null)
{
p = p.Next;
++i;
}
return i;
}
}
}
发表评论
-
排序算法与查找算法
2014-09-01 10:17 382八大排序算法: http://blog.csdn.net ... -
用递归与非递归实现斐波拉希数列
2013-05-15 00:46 1906如下: package com.test; publ ... -
利用LinkedList制作一个栈
2012-12-19 21:55 877import java.util.LinkedList; ... -
递归问题求解学习一
2009-04-22 14:12 721http://blog.csdn.net/lixiaoshan ... -
算术逻辑推理学习
2009-04-23 15:52 987数字推理考察的是对 ... -
由递归所想到的:如何将字符串或者数字转换成大写货币的问题
2009-04-24 11:54 1224这个问题同事在面试的时候遇到过,最近在看有关递归的问题时 h ... -
数据结构基础--排序: 各种排序算法全分析
2009-05-06 11:35 1454http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(基数分配排序法)
2009-05-06 11:41 1082http://www.cnblogs.com/ziyiFly/ ... -
数据结构-算法: 分配排序(箱分配排序)
2009-05-06 11:43 919http://www.cnblogs.com/ziyiFly/ ... -
数据结构-排序: 两路归并排序算法
2009-05-06 11:44 1738数据结构-排序: 两路归 ... -
数据结构-排序: 插入排序(直接插入排序法)
2009-05-06 11:45 1201数据结构-排序: 插入排 ... -
数据结构-算法: 插入排序(希尔排序法)
2009-05-06 11:45 1457数据结构-算法: 插入排 ... -
数据结构-排序: 交换排序(快速排序法)
2009-05-06 11:46 1473数据结构-排序: 交换排序(快速排序法) 1、算法思想 ... -
数据结构-排序: 选择排序(堆选择排序法)
2009-05-06 11:47 913数据结构-排序: 选择排 ... -
数据结构-排序: 交换排序(冒泡排序法)
2009-05-06 11:47 1038数据结构-排序: 交换排序(冒泡排序法) 冒泡排序(Bu ... -
数据结构-排序: 选择排序(直接选择排序法)
2009-05-06 11:48 976数据结构-排序: 选择排序(直接选择排序法) 直接选择排 ... -
C#实现二叉树(三元素式)及二叉树遍历的四种方法
2009-05-06 11:50 1460C#实现二叉树(三元素式) ... -
JAVA排序类汇总
2009-05-06 11:54 1216package com.softeem.jbs.lesson4 ... -
谈谈防 SQL 注入式攻击策略
2009-05-07 09:30 1421谈谈防 SQL 注入式攻击 ... -
二进制数转换为八进制, 十六进制数的算法
2009-05-07 09:44 1305using System; using System.Col ...
相关推荐
使用c#语言编写的winform程序,实现顺序表、单链表、顺序栈、冒泡排序、折半查找 源代码和程序展示: 顺序表:https://blog.csdn.net/HAIIAKU/article/details/119302855 单链表:...
本文将深入探讨链式表的原理、实现以及在C#语言中的应用,以VS2008开发环境为例,涵盖单链表、循环链表和双链表。 首先,链式表是一种动态数据结构,与数组不同,它不依赖于物理存储位置的连续性。每个链表节点(也...
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储...
在这个数据结构上机实验中,学生们被要求使用C#语言来实现单链表的模型,并为其添加各种操作功能。 首先,实验的主要目标是让学生熟悉单链表的基本结构和操作原理。为了实现这一目标,实验要求创建两个类:`Link` ...
通过对这些知识点的学习,读者不仅可以理解数据结构的基本原理,还可以掌握如何在C#环境中实现这些数据结构。这对于从事软件开发工作的程序员来说是非常有用的资源。此外,本书还提供了配套的光盘资料,包括源代码、...
- **基本操作实现**:实现单链表的插入、删除等操作。 - **应用举例**:例如实现动态列表的功能。 #### 2.4 其他链表 - **双向链表**:每个节点有两个指针,一个指向后继节点,另一个指向前驱节点。 - **循环链表*...
这是C#版的数据结构与算法的代码实现,包括:顺序表,单链表,双链表;顺序栈,链栈;顺序队列,链队列;顺序串;用数组进行特殊矩阵的存储,稀疏矩阵的存储;顺序存储二叉树,链式存储二叉树,哈夫曼树;多重链表...
在C#中,线性表可以通过顺序存储结构(如数组)或链式存储结构实现。 #### 顺序存储结构 在顺序存储结构中,线性表中的元素通过连续的内存空间进行存储,访问元素的时间复杂度为O(1),即无论数组大小如何,访问...
本篇文章将深入探讨C#中的双向链表(Doubly Linked List)的实现,这是一类允许从两端进行访问的链式数据结构。 双向链表与单链表的主要区别在于每个节点不仅存储元素值,还包含两个指针,一个指向前一个节点,另一...
在编程语言中,链式队列的实现通常涉及到指针或者引用的概念,例如在C++、C#、Java等面向对象的语言中,可以定义一个节点类(Node)和一个队列类(Queue)。队列类包含对头节点和尾节点的引用,以及相关的操作方法。...
### 数据结构(C#语言版)知识点详解 #### 第1章 绪论 ...通过这些知识点的学习,读者可以了解到数据结构的基本概念、算法的重要性以及如何在C#中实现常见的线性表。这对于深入理解和掌握数据结构是非常有帮助的。
C#中常用的链表有单链表和双链表,它们允许在任意位置插入和删除元素,但不支持随机访问。 4. 队列:队列是一种先进先出(FIFO)的数据结构,C#中可以使用System.Collections.Generic命名空间下的Queue类来实现。...
顺序表的C#实现可以定义一个名为SeqList的类,继承自IListDS接口,实现接口中定义的方法,如GetLength、Clear、IsEmpty、Add、Insert、Delete、GetElem等。同时,可以添加一个索引器以支持通过下标访问元素。 链表...
在实际实现中,线性表可以采用顺序存储或链式存储两种方式。资料中主要讨论了顺序表,即用一维数组来存储线性表的元素。 图2-1展示了线性表的概念,其中元素a1到an通过它们的存储位置LOC(a1)和LOC(ai)表示。图2-2...
本主题将深入探讨“数据结构(基于C#)”,重点关注链式存储表示的二叉树。二叉树作为一种重要的数据结构,具有广泛的应用,如搜索、排序、文件系统等。在C#编程语言中实现这些概念,可以提升软件性能和算法效率。 ...
在Visual Studio 2019中实现这个算法,可以使用C++或者C#等语言,定义链表节点结构体,包含数据和指针成员,然后编写相应的函数来完成链表的创建、插入、遍历和合并操作。`Project1`可能是实验代码的主项目文件,...
循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同...
循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同...