不知用SORTLIST类能不能完成任务,好像是SORTLIST,SORT开头的吧,它是始终排序的如果不能用普通的都可以,就用ARRAYLIST,插入的时候自己判断插入指定位置,让它始终排序做一个类继承ARRARLIST类,让它变得更强一点,添加它的增加,删除方法就可以了,应该不是很难

解决方案 »

  1.   

    // 设有书籍类Book, 类中有域:Title、Author、Press、Date、ISBN以及NextBook;
    // 1) 设计一个只读属性,读取Title、Author、Press和Date;
    // 2) 定义一个ArrayList数组,加入5本书对象; 
    // 3) 将上述数组,改造成按出版日期Date排序的链表。
    // 4) 进一步讨论,请构思一个方案:利用ArrayList怎样建立一个链表,写出如何完成链表的插入、删除、查找等操作的算法。(用文字表达即可)
    using System;
    using System.Collections;namespace ex5_4
    {
    enum BookSortBy
    {
    Date,
    Title
    }
    class BookInfo : IComparable
    {
    public string title;
    private string author;
    private string press;
    private DateTime date;
    private string isbn;
    private static BookSortBy sortBy = BookSortBy.Date; public string Title
    {
    get
    {
    return title;
    }
    } public DateTime Date
    {
    get
    {
    return date;
    }
    } public BookSortBy SortBy
    {
    get
    {
    return sortBy;
    }
    set
    {
    sortBy = value;
    }
    } public BookInfo( string title, DateTime date /*...*/ )
    {
    this.title = title;
    this.date = date;
    //...
    } public int CompareTo( object value ) 
    { if ( value == null )
    return 1; switch ( SortBy ) 
    {
    case BookSortBy.Date :
    return ( this.Date.CompareTo( ( ( BookInfo ) value ).Date) );
    default:
    return ( this.Date.CompareTo( ( ( BookInfo ) value ).Date) );
    } } } class BookList : ArrayList
    {
    private int index = 0; public override object this[ int index ]
    {
    get
    {
    this.index = index;
    return base[ index ]; 
    }
    } public BookInfo NextBook
    {
    get
    {
    if ( ++index >= base.Count  )
    return null;
    return ( BookInfo ) base[ index ];
    }
    } public int Add( BookInfo bookInfo )
    {
    base.Sort();
    base.Add( bookInfo );
    return ++index;
    }
    } class Class1
    {

    [STAThread]
    static void Main(string[] args)
    {
    BookList bookList = new BookList();
    BookInfo bookInfo = new BookInfo( "book1", Convert.ToDateTime( "2004-1-2" ) );
    bookList.Add( bookInfo );
    bookInfo = new BookInfo( "book2", Convert.ToDateTime( "2004-1-1" ) );
    bookList.Add( bookInfo );
    bookInfo = new BookInfo( "book3", Convert.ToDateTime( "2004-1-4" ) );
    bookList.Add( bookInfo );
    bookInfo = new BookInfo( "book4", Convert.ToDateTime( "2004-1-3" ) );
    bookList.Add( bookInfo );
    bookInfo = new BookInfo( "book5", Convert.ToDateTime( "2004-1-5" ) );
    bookList.Add( bookInfo );
    for ( int i = 0; i < bookList.Count; i++ )
    {
    Console.Write( i + "  " );
    Console.Write( ( ( BookInfo ) bookList[i] ).Title + "  " );
    Console.Write( ( ( BookInfo ) bookList[i] ).Date + "  " );
    Console.Write( "\r\n\t\t NextBook:" + "  " );
    bookInfo = bookList.NextBook;
    if ( bookInfo == null )
    Console.Write( "End" );
    else
    {
    Console.Write( bookInfo.Title + "  " );
    Console.Write( bookInfo.Date + "  " );
    Console.WriteLine( "\r\n" );
    }
    Console.WriteLine( "\r\n////////////////////////////" );
    }
    Console.Read();
    }
    }
    }