单链表(C#)实现

原创 2007年10月09日 13:43:00

 前几天的Homework。

 

using System;

public interface list
    
{
        
bool IsEmpty();
        
object CreatList(int n);
        
void Insert(int index,object item);
        
bool Delete(object item);
        
bool Search(object item);
        
void PrintAll();
        
void Clear();
    }


    
class SNode
    
{
     
...
    }


    
public class SList : list
    
{
        
private SNode head;
        
private int length;

        
public int number
        
{
            
get
            
{
                
return length;
            }

            
set
            
{
                length 
= value;
            }

        }


        
public SList()
        
{
            
this.head = null;
        }


        
public bool IsEmpty()
        
{
            
return head == null;
        }


        
public object CreatList(int n)
        
{
            Console.WriteLine(
"please input {0} items:",n);
            
for (int i = 0; i < n; i++)
            
{
                
object temp = Console.ReadLine();
                Insert(i,temp);
            }

            
return head;
        }


        
public void PrintAll()
        
{
            Console.Write(
"the SList has {0} items:",length);
            
string result = null;
            
for (SNode temp = head; temp != null; temp = temp.next)
            
{
                result 
+= temp.value.ToString() + " ";
            }

            Console.WriteLine(result);
        }
// end of PrintAll

        
public bool Search(object item)
        
{
            
if (head == null)
                
return false;
            
else
            
{
                
for (SNode temp = head; temp != null; temp = temp.next)
                
{
                    
if (temp.value.Equals(item))
                        
return true;
                }

            }

            
return false;
        }
 // end of search

        
public bool Delete(object item)
        
{
            SNode pre, temp;
            
// if the SList is empty
            if (IsEmpty())
                
return false;

            
//if delete the head
            if (head.value.Equals(item))
            
{
                head 
= head.next;
                
this.length--;
            }

            
else
            
{
                
for (pre = head, temp = head.next; temp != null; pre = pre.next, temp = temp.next)
                
{
                    
if (temp.value.Equals(item))
                    
{
                        pre.next 
= temp.next;
                        temp 
= null;
                        
this.length--;
                        
break;
                    }

                }


                
// to judg whether find the item or loop end 
                if (pre.next == null)
                    
return false;
                
else
                    
return true;
            }
// end of else
            return true;
        }


        
public void Insert(int index, object item)
        
{
            
int i;
            SNode temp;
            
while (index < 0 || index > length)
            
{
                Console.WriteLine(
"the index overflow");
                Console.WriteLine(
"please input the correct index from 0 to {0}:", length);
                index 
= Convert.ToInt32(Console.ReadLine());
            }

            
// if insert befor the head
            if (index == 0)
            
{
                temp 
= new SNode(item);
                temp.next 
= head;
                head 
= temp;
                length
++;
            }

            
else
            
{
                
// insert in the middle of SList
                SNode p = head;
                
for (i = 1; i < index; i++)
                
{
                    p 
= p.next;
                }

                temp 
= new SNode(item);
                temp.next 
= p.next;
                p.next 
= temp;
                length
++;
            }

        }


        
public void Clear()
        
{
            
while (!IsEmpty())
            
{
             Console.WriteLine(
"delete "{0}" from the SList",head.value);
                Delete(head.value);            
            }

            
if ( length  == 0 )
             Console.WriteLine(
"the SList is empty");
        }

    }
// end of SList class

    
public class MainEntry
    
{
        
static void Main()
        
{

            SList list1 
= new SList();
            Console.WriteLine(
"please input the number of the list that you want to create: ");
            
int n = Convert.ToInt32(Console.ReadLine());
            
//list1.number = n;
            
            
// test create the SList
            Console.Write(" ************************************************************** ");
            Console.WriteLine(
"Creat SList");
            list1.CreatList(n);
            list1.PrintAll();
            Console.WriteLine(
"**************************************************************");

            
// test delete one item
            Console.Write(" ************************************************************** ");
            Console.WriteLine(
"Remove item from the SList");
            Console.WriteLine(
"please input the item you want to delete:");
            
object obj = Console.ReadLine();
            
if (list1.Delete(obj))
                Console.WriteLine(
"has delete the item {0}",obj);
            
else
                Console.WriteLine(
"SList hasnot contain the item {0}",obj);
            list1.PrintAll();
            Console.WriteLine(
"**************************************************************");

            
// test search one item in the SList
            Console.Write(" ************************************************************** ");
            Console.WriteLine(
"Search item in the SList");
            Console.WriteLine(
"please input the item you want to search:");
            obj 
= Console.ReadLine();
            
if (list1.Search(obj))
                Console.WriteLine(
" has find the item {0}", obj);
            
else Console.WriteLine(" SList doesn't contain the item {0}", obj);
            Console.WriteLine(
"**************************************************************");

            
//test insert item in given position in the SList
            Console.Write(" ************************************************************** ");
            Console.WriteLine(
"insert function start");
            Console.WriteLine(
"input paraments like this------index:xxx,item:xxx");
            Console.WriteLine(
"the index present the position after which you want to insert");
            Console.WriteLine(
"please input the index from 0 to {0}:",list1.number);
            
int index =Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(
"please input the item:");
            obj 
= Console.ReadLine();
            list1.Insert(index,obj);
            list1.PrintAll();
            Console.WriteLine(
"**************************************************************");

            
// clear the SList
            Console.Write(" ************************************************************** ");
            Console.WriteLine(
"Clear SList");
            list1.Clear();
            Console.WriteLine(
"**************************************************************");
            Console.ReadKey();
        }

    }


单链表的实现(C++版)

// 带头节点单链表的C++实现 #include "stdafx.h" #include #include using namespace std; class CNode ...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014年05月12日 20:27
  • 6469

C++中实现一个简单的单向链表

最近在linux了一个简单的单向链表,直接上代码 链表头文件   list.h #ifndef _LIST_H_ #define _LIST_H_ typedef int T; te...
  • u011641755
  • u011641755
  • 2016年09月17日 21:00
  • 1169

用c++实现 c++单链表的实现(采用模板类)

函数实现数据的插入(头插&&尾插)、删除(头删&&尾删)、查找、按值插入、按值删除、求长、单链表清除、单链表摧毁、数据的逆置以及数据排序 main函数 #include"List.h"//单链表 ...
  • S0Soul
  • S0Soul
  • 2015年05月25日 15:40
  • 3702

c#实现单链表_查找插入的操作

  • 2010年04月30日 11:31
  • 44KB
  • 下载

基本数据结构(C#实现):单链表

线性表的链式存储结构:n个结点链接成一个链表,每个结点由两部分构成:数据元素本身信息和其直接后 继元素的存储位置。单链表:一个SingleLinkList类,里面封装所有关于链表的基本操作(方法)...
  • lzuwds
  • lzuwds
  • 2015年04月23日 14:54
  • 289

C# 实现单链表的基本操作

结点类: 关键处在C语言中用指针来指向下一个节点,C#是面向对象的,用节点类的一个属性(Next属性)来指向下一个节点对象 public class LinkNode { ...
  • xiongxyt2
  • xiongxyt2
  • 2012年01月20日 15:51
  • 1630

C#单链表的实现

//单链表结点类,采用泛型   public class Node   {       private T data; //数据域,当前结点的数据       private Node next; /...
  • OuErHuiLaiKanKan
  • OuErHuiLaiKanKan
  • 2015年09月18日 15:47
  • 230

C#_约束 实现可排序单链表

using System; using System.Collections.Generic; using System.Linq; using System.Text; /* 使用 约束 实现可...
  • u011641049
  • u011641049
  • 2013年09月06日 00:47
  • 393

C#编程的单链表的基本操作

  • 2009年07月11日 22:45
  • 74KB
  • 下载

单链表的实现-简单操作

  • 2016年11月18日 22:50
  • 401KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单链表(C#)实现
举报原因:
原因补充:

(最多只允许输入30个字)