按链表C#

时间:2015-11-14 18:13:44

标签: c# data-structures

我是学生,而不是高级开发人员。我遇到了构建程序的问题。我尝试了一些东西,但仍然无法解决它。问题来自考试。 为这篇文章道歉,因为我以前的两篇帖子都没有被接受。这次我试过了,但是我发布的问题仍然没有成功。

问题如下

a)编写一个名为Document的类来表示打印队列中的文档节点。它应该包含一个返回文档主题的方法名称和一个名为type的抽象方法,它返回文档类型。从文档类派生两个名为word document和pdf document的具体类。

b)另一个名为Print Queue的类,它被实现为Document对象的链接列表。 Print Queue应该有一个名为Push的方法,用于在列表末尾添加文档,一个名为pop的方法,用于从列表中删除第一个文档,以及一个名为DisplayContents的方法,用于列出Print Queue中的所有文档,同时报告两者每个元素的名称和类型Print Queue不应该使用任何标准的库类,它应该是自己的链表实现。

我在这里编码:

class PrintQueue
{
    private Document head;

    private int size;
    public int Count
    {
        get
        {
            return size;
        }
    }

    public void Push(Object data)
    {
        Document toAdd = new Document();
        toAdd.data = data;

        Document current = head;
        while (current.Next != null)
        {
            current = current.Next;
        }
        current.Next = toAdd;
        size++;
    }

    public bool Pop()
    {
        Document tempNode = head;

        Document lastNode = null;
        int count = 0;

        if (size > 0)
        {
            while (tempNode != null)
            {
                if (count == size - 1)
                {
                    lastNode.Next = tempNode.Next;
                    return true;
                }
                count++;

                lastNode = tempNode;
                tempNode = tempNode.Next;
            }
        }
        return false;
    }
}


public abstract class Document
{
    public Document Next;
    public Object data;

    public string Subject { get; set; }

    public abstract string type();
}

public class WordDocument : Document
{
    public override string type()
    {
        return "docx";
    }
}

public class PdfDocument : Document
{
    public override string type()
    {
        return "pdf";
    }
}

此行会导致问题Document toAdd = new Document();

但我仍然无法找到 DisplayContents 功能的方法,该功能将列出打印队列中的所有文档,同时报告每个元素打印队列的名称和类型。

任何人都可以查看我的代码并帮助我根据问题对其进行纠正。突出显示我犯错误的区域。

由于

更新

我试图解决的两个问题如下

问题1:编写一个名为Document的类来表示打印队列中的文档节点。它应该包含一个返回文档主题的方法名称和一个名为type的抽象方法,它返回文档类型。从文档类派生出两个名为word document和pdf document的具体类。

问题2:另一个名为Print Queue的类,它被实现为Document对象的链接列表。 Print Queue应该有一个名为Push的方法,用于在列表末尾添加文档,一个名为pop的方法,用于从列表中删除第一个文档,以及一个名为DisplayContents的方法,用于列出Print Queue中的所有文档,同时报告两者每个元素的名称和类型Print Queue不应该使用任何标准的库类,它应该是自己的链表实现。

在这里,我想发布我所取得的最后成就。所以请查看代码和问题,请按照此处粘贴的2个问题告诉我这是否正确。

查看最新代码

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

namespace PrintQueueDemo
{
    class PrintQueue
    {
        Node head;
        Node tail;

        /// <summary>
        /// add a document to the print queue
        /// </summary>
        /// <param name="strType">document type</param>
        /// <param name="strName">docunent name</param>
        public void Push(string strType, string strName)
        {
            if (head == null)
            {
                head = new Node(strType, strName);
                tail = head;
            }
            else
            {
                Node node = new Node(strType, strName);
                tail.setNext(node);
                tail = node;
            }
        }

        /// <summary>
        /// pop a document from the queue
        /// </summary>
        /// <returns>null if printqueue is empty, else document</returns>
        public Node.Document Pop()
        {
            if (head == null)
                return null;

            Node.Document doc = new Node.Document(head.document.Type, head.document.Name);
            head = head.nextnode;
            if (head == null)
                tail = null;
            return doc;
        }

        /// <summary>
        /// get the current content of the queue
        /// </summary>
        /// <returns>string with current content (line per entry)</returns>
        public string DisplayContents()
        {
            string content = "";
            Node node = head;
            if (node == null)
                return "PrintQueue is empty";

            content = node.document.Name + ": " + node.document.Type;
            while (node.nextnode != null)
            {
                node = node.nextnode;
                content += "\r\n" + node.document.Name + ": " + node.document.Type;
            }
            return content;
        }

        public class Node
        {
            public Document document { get; private set; }
            public Node nextnode { get; private set; }

            public Node(string strType, string strName)
            {
                document = new Document(strType, strName);
            }

            public void setNext(Node node)
            {
                nextnode = node;
            }

            public class Document
            {
                public string Type { get; private set; }
                public string Name { get; private set; }

                public Document(string strType, string strName)
                {
                    Name = strName;
                    Type = strType;
                }
            }
        }
    }
}

PrintQueue pq = new PrintQueue();
pq.Push("cpp", "main.cpp");
pq.Push("c#", "main.cs");
pq.Push("c", "main.c");
pq.Push("h", "myinclude.h");

Console.WriteLine(pq.DisplayContents());
Console.WriteLine("===");

PrintQueue.Node.Document doc;
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
doc = pq.Pop();
Console.WriteLine("{0}: {1}", doc.Name, doc.Type);
Console.WriteLine("===");

Console.WriteLine(pq.DisplayContents());
Console.WriteLine("===");

pq.Push("xls", "workbook.xls");
Console.WriteLine(pq.DisplayContents());

告诉我上面的代码将被接受为我粘贴在顶部的2个问题。感谢

0 个答案:

没有答案