首页 > 解决方案 > 显示队列中的项目

问题描述

我创建了一个简单的 Windows 表单应用程序,它允许names用户namesqueue.

我已经创建了所有需要的方法,但是我希望每次单击AddandRemove按钮时都显示队列中的所有项目。

目前我的代码仅head在使用时显示队列的.Peek()

请看下图:

我的窗体应用程序

队列类代码

class Queue
    {
        private readonly int maxsize = 10;
        private string[] store;
        private int head = 0;
        private int tail = 0;
        private int numItems;

        public Queue()
        {
            store = new string[maxsize];
        }

        public Queue(int size)
        {
            maxsize = size;
            store = new string[maxsize];
        }

        public void Enqueue(string value)
        {
            numItems++;
            store[tail] = value;
            if (++tail == maxsize)
            {
                tail = 0;
            }
        }

        public string Dequeue()
        {
            string headItem;
            //numItems--;
            headItem = store[head];
            if (headItem != null)
            {
                store[head] = null;
                numItems--;
                if (++head == maxsize)
                    head = 0;
            }

            return headItem;

        }

        public bool IsEmpty()
        {
            return tail == 0; //returns the boolean result of the comparison between head and 0
        }

        public bool IsFull()
        {
            return tail == maxsize;
        }
        public int CountQueue() //counts the number of items inside the queue
        {
            return tail - head;
        }

        public int Tail //property
        {
            set { this.tail = value; }
            get { return tail; }
        }

        public int Head //property
        {
            set { this.head = value; }
            get { return head; }
        }

        public string Peek()
        {
            return store[head];
        }

    }

表格代码

public partial class Form1 : Form
    {
        Queue names = new Queue();
        public Form1()
        {
            InitializeComponent();
        }

        private void AddButton_Click(object sender, EventArgs e)
        {

            names.Enqueue(NameTextBox.Text);
            CountLabel.Text = "Number of entries: " +  Convert.ToString(names.CountQueue());

            if (names.CountQueue() > 0)
            {
                DisplayLabel.Text = names.Peek();
            }
            else
                DisplayLabel.Text = "No names entered";

        }

        private void RemoveButton_Click(object sender, EventArgs e)
        {
            names.Dequeue();
            if (names.CountQueue() == 0)
                CountLabel.Text = "Queue is empty";

            else
                CountLabel.Text = "Number of entries: " + Convert.ToString(names.CountQueue());

            if (names.CountQueue() > 0)
            {
                DisplayLabel.Text = names.Peek();
            }
            else
                DisplayLabel.Text = "No names entered";


        }
    }

标签: c#

解决方案


为清楚起见,您是否在问如何显示完整队列?如果是这样,您最好使用列表框而不是标签来显示名称,并且每次添加名称时,您只需说类似

lstNames.Items.Add(names.Peek());

添加名称后, lstNames 是 Listbox 实例。然后,当您决定从队列中删除一个项目时,可以说类似

lstNames.Items.RemoveAt(0);

希望对您有所帮助,如果我误解了这个问题,请见谅。

编辑:不确定您是否编辑了您的问题,或者我只是误读了它,但我很清楚您现在要问的是什么。

Edit2:对不起,我的意思是 lstNames.Items.Add(NameTextBox.Text),而不是 names.peek()!


推荐阅读