# C# 中的优先队列

Minahil Noor 2021年3月21日 Csharp

## 在 C# 中使用列表作为优先队列

``````PUSH(HEAD, VALUE, PRIORITY)
Step 1: Create a new node with VALUE and PRIORITY
Step 2: Check if HEAD has lower priority. If true follow Steps 3-4 and end. Else goto Step 5.
Step 3: NEW -> NEXT = HEAD
Step 5: Set TEMP to head of the list
Step 6: While TEMP -> NEXT != NULL and TEMP -> NEXT -> PRIORITY > PRIORITY
Step 7: TEMP = TEMP -> NEXT
[END OF LOOP]
Step 8: NEW -> NEXT = TEMP -> NEXT
Step 9: TEMP -> NEXT = NEW
Step 10: End
Step 2: Set the head of the list to the next node in the list. HEAD = HEAD -> NEXT.
Step 3: Free the node at the head of the list
Step 4: End
Step 1: Return HEAD -> VALUE
Step 2: End
``````

`push` 操作会将元素添加到优先队列，以使优先级最高的元素始终位于最前面。弹出操作将从队列中删除具有最高优先级的元素。最上面的操作将检索最高优先级的元素，而不会将其删除。下面的程序显示了如何从优先队列中推送，弹出和放置顶部元素。

``````
using System;

class PriorityQueue
{

public class Node
{
public int data;
public int priority;
public Node next;
}

public static Node node = new Node();

public static Node newNode(int d, int p)
{
Node temp = new Node();
temp.data = d;
temp.priority = p;
temp.next = null;
return temp;
}

{
}

{
}

int d, int p)
{
Node temp = newNode(d, p);
{
}
else
{
while (start.next != null &&
start.next.priority < p)
{
start = start.next;
}
temp.next = start.next;
start.next = temp;
}
}
{
return ((head) == null) ? 1 : 0;
}
public static void Main(string[] args)
{
Node queue = newNode(1, 1);
queue = push(queue, 9, 2);
queue = push(queue, 7, 3);
queue = push(queue, 3, 0);

while (isEmpty(queue) == 0)
{
Console.Write("{0:D} ", top(queue));
queue = pop(queue);
}
}
}
``````

``````3 1 9 7
``````

`priority` 值较小的元素具有较高优先级。