c# - 显示队列中的项目
问题描述
我创建了一个简单的 Windows 表单应用程序,它允许names
用户names
从queue
.
我已经创建了所有需要的方法,但是我希望每次单击Add
andRemove
按钮时都显示队列中的所有项目。
目前我的代码仅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";
}
}
解决方案
为清楚起见,您是否在问如何显示完整队列?如果是这样,您最好使用列表框而不是标签来显示名称,并且每次添加名称时,您只需说类似
lstNames.Items.Add(names.Peek());
添加名称后, lstNames 是 Listbox 实例。然后,当您决定从队列中删除一个项目时,可以说类似
lstNames.Items.RemoveAt(0);
希望对您有所帮助,如果我误解了这个问题,请见谅。
编辑:不确定您是否编辑了您的问题,或者我只是误读了它,但我很清楚您现在要问的是什么。
Edit2:对不起,我的意思是 lstNames.Items.Add(NameTextBox.Text),而不是 names.peek()!
推荐阅读
- typescript - TypeScript 中的部分响应查询构建器
- javascript - 表单方法 POST 给我 GET 参数
- sql - 在 ORDER BY 中使用 CAST 引用子查询而不是主查询
- python - 有没有办法以编程方式限制 python 对存储的访问?
- javascript - 在 axios 调用上收到不明确的超时
- c++ - 桌面复制 API - 屏幕捕获在 1366x768 (opencv) 上不起作用
- karate - 专门针对一种场景覆盖 karate-config 文件中设置的全局标头
- reactjs - 从 React.Component 中重定向
- c# - 根据基础对象属性的多个条件对对象列表字典进行排序
- php - 如何使用 like 运算符在 Laravel 中搜索加密数据