C#在链表中使用类

时间:2014-12-24 09:53:17

标签: c# class oop linked-list nodes

我一直在尝试将一个类添加到我的LinkedList中,但是当我显示所有内容时,我一直收到0。或者我收到错误消息,说我无法将class转换为int。请帮帮我。

我正在尝试创建一个程序,我可以将书籍输入LinkedList,然后将列表全部显示出来。我将显示3个文件“Program.cs”,“LinkedList.cs”和“Node.cs”,我将保留我的“Item.cs”,因为我不认为它是导致错误的那个。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BookApp
{
    class Program
{
        static void Main(string[] args)
        {
            LinkedList Books = new LinkedList();
            Item book1 = new Item(101, "Avatar: Legend of Korra", 13.50);
            Item book2 = new Item(102, "Avatar: Legend of Aang", 10.60);
            Books.AddFront(book1);
            Books.AddFront(book2);

            Books.DisplayAll();
        }
    }
}

这是我的LinkedList.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using BookApp;

class LinkedList
{
    private Node head;  // 1st node in the linked list
    private int count;

    public int Count
    {
        get { return count; }
        set { count = value; }
    }

    public Node Head
    {
        get { return head; }
    }
    public LinkedList()
    {
        head = null;    // creates an empty linked list
        count = 0;
    }

    public void AddFront(Item z)
    {
        Node newNode = new Node(z);
        newNode.Link = head;
        head = newNode;
        count++;

    }

    public void DeleteFront()
    {
        if (count > 0)
        {
            head = head.Link;
            count--;
        }
    }

    public void DisplayAll()
    {
        Node current = head;
        while (current != null)
        {
            Console.WriteLine(current.Data);
            current = current.Link;
        }
    }

}

最后这是我的node.cs

class Node
{
    private int data;

    public int Data
    {
        get { return data; }
        set { data = value; }
    }
    private Node link;
    private BookApp.Item p;

    internal Node Link
    {
        get { return link; }
        set { link = value; }
    }

    public Node(BookApp.Item p)
    {
        // TODO: Complete member initialization
        this.data = p; //Where I got my error about how I cannot convert type BookApp.Item to int
    }
}

4 个答案:

答案 0 :(得分:1)

node.cs尝试替换:

private int data;
public int Data
{
    get { return data; }
    set { data = value; }
}

人:

private BookApp.Item data;
public BookApp.Item Data
{
    get { return data; }
    set { data = value; }
}

您无法将Item分配给integer,这就是您遇到此错误的原因。

答案 1 :(得分:1)

我知道您已经接受了答案,但如果您正在寻找创建自己的链接列表实现,我是否可以建议您使用泛型来允许您将代码用于任何数据类型?

如果您修改了LinkedList以使其成为LinkedList< T>:

using System.Linq;
using System.Text;
using System.Threading.Tasks;

class LinkedList<T>
{
    private Node<T> head;  // 1st node in the linked list
    private int count;

    public int Count
    {
        get { return count; }
        set { count = value; }
    }

    public Node<T> Head
    {
        get { return head; }
    }
    public LinkedList<T>()
    {
        head = null;    // creates an empty linked list
        count = 0;
    }

    public void AddFront(T z)
    {
        Node<T> newNode = new Node<T>(z);
        newNode.Link = head;
        head = newNode;
        count++;

    }

    public void DeleteFront()
    {
        if (count > 0)
        {
            head = head.Link;
            count--;
        }
    }

    public void DisplayAll()
    {
        Node<T> current = head;
        while (current != null)
        {
            Console.WriteLine(current.Data);
            current = current.Link;
        }
    }

}

您的节点到节点&lt; T&gt;:

class Node<T>
{
    private T data;

    public T Data
    {
        get { return data; }
        set { data = value; }
    }
    private Node<T> link;

    internal Node<T> Link
    {
        get { return link; }
        set { link = value; }
    }

    public Node<T>(T p)
    {
        data = p; 
    }
}

然后你可以在你的代码中使用它,通过创建一个LinkedList&lt;项目&gt; ...&#39;项目&#39;的链接列表对象。

class Program
{
        static void Main(string[] args)
        {
            LinkedList<Item> Books = new LinkedList<Item>();
            Item book1 = new Item(101, "Avatar: Legend of Korra", 13.50);
            Item book2 = new Item(102, "Avatar: Legend of Aang", 10.60);
            Books.AddFront(book1);
            Books.AddFront(book2);

            Books.DisplayAll();
        }
}

这种方法的好处是,通过对原始代码进行非常小的更改,您的LinkedList现在可以保存任何类型的对象 - 但仍保持强类型。它还将您的LinkedList和Node实现与BookApp代码分离。

答案 2 :(得分:0)

对于编译器错误:您尝试将Item分配给int,这将无法正常工作。

您可以使用以下内容替换private int data [...] public int Data部分和构造函数:

public Item Data { get; set; }

public Node(BookApp.Item item)
{
    Data = item;
}

至于为什么DisplayAll()返回0,您必须自己调试此问题。

答案 3 :(得分:0)

你得到那个错误是正常的,变量p是Item的类型。你不能将类型Item转换为int。您的Data变量必须是Item变量。