user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <create@plt>
L96:
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0xc(%rbp),%eax
  cmp    $0x4,%eax
  je     L39
  cmp    $0x4,%eax
  jg     L77
  cmp    $0x3,%eax
  je     L21
  cmp    $0x3,%eax
  jg     L77
  cmp    $0x1,%eax
  je     L56
  cmp    $0x2,%eax
  je     L7
  jmp    L77
L56:
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <insert_by_priority@plt>
  jmp    L5
L7:
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <delete_by_priority@plt>
  jmp    L5
L21:
  mov    $0x0,%eax
  call   <display_pqueue@plt>
  jmp    L5
L39:
  mov    $0x0,%edi
  call   <exit@plt>
L77:
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L5:
  jmp    L96
```

tool_calls: name: extract_symbolic_data
arguments: tag: D59
datatype: string
name: extract_symbolic_data
arguments: tag: D76
datatype: string
name: extract_symbolic_data
arguments: tag: D75
datatype: string
name: extract_symbolic_data
arguments: tag: D81
datatype: string
name: extract_symbolic_data
arguments: tag: D36
datatype: string
name: extract_symbolic_data
arguments: tag: D91
datatype: string
name: extract_symbolic_data
arguments: tag: D38
datatype: string
name: extract_symbolic_data
arguments: tag: D105
datatype: string
name: extract_symbolic_data
arguments: tag: D30
datatype: string

tool: D59: 
1 - Insert an element into queue

tool: D76: 
2 - Delete an element from queue

tool: D75: 
3 - Display queue elements

tool: D81: 
4 - Exit

tool: D36: 
Enter your choice : 

tool: D91: %d

tool: D38: 
Enter value to be inserted : 

tool: D105: 
Enter value to delete : 

tool: D30: 
Choice is incorrect, Enter a correct choice

assistant: ```c
void main() {
  int n, ch;
  printf("\n1 - Insert an element into queue");
  printf("\n2 - Delete an element from queue");
  printf("\n3 - Display queue elements");
  printf("\n4 - Exit");
  create();
  while (1) {
    printf("\nEnter your choice : ");
    scanf("%d", &ch);
    switch (ch) {
    case 1:
      printf("\nEnter value to be inserted : ");
      scanf("%d", &n);
      insert_by_priority(n);
      break;
    case 2:
      printf("\nEnter value to delete : ");
      scanf("%d", &n);
      delete_by_priority(n);
      break;
    case 3:
      display_pqueue();
      break;
    case 4:
      exit(0);
    default:
      printf("\nChoice is incorrect, Enter a correct choice");
    }
  }
}
```