附整段代码 整段代码为用c语言进行魔王语言解释

#include <stdio.h>
#include <string.h>
#include <malloc.h>
//定义队列和栈的结点
typedef struct node{
char data;
struct node *next;
}LinkNode;
//定义栈的栈顶指针
typedef struct {
LinkNode *top;
}LinkStack;
//定义队列的队头和队尾
typedef struct{
LinkNode * rear,*front;
}LinkQueue;
//初始化队列
void InitQueue(LinkQueue *queue) {
queue->front = queue->rear = NULL;
}
//初始化栈
void InitStack(LinkStack *stack){
stack->top = NULL;
}
//入栈
void push(LinkStack *stack,char x){
LinkNode *p = (LinkNode *)malloc(sizeof (LinkNode));
p->data = x;
p->next = stack->top;
stack->top = p;
}
//入队
void InQueue(LinkQueue *queue,char x){
LinkNode *p = (LinkNode*) malloc(sizeof (LinkNode*));
p->data = x;
p->next = NULL;
if(queue->front ==NULL){
queue->front = queue->rear = p;
}
else {
queue->rear->next = p;
queue->rear = p;
}
}
//出栈
char pop(LinkStack *stack ){
if(stack->top==NULL){
return 0;
}
// 出栈
LinkNode *p = stack->top;
stack->top = p->next;
char temp = p->data; //保存出栈的值
free(p);
return temp;
}
//出队列
char DeQueue(LinkQueue *queue){
if(queue->front ==NULL){
return 0;
}
LinkNode *p = queue->front;
char temp = p->data; //保存出队列的值
queue->front = p->next;
free(p);
return temp;
}
//判断出栈结束位置
void deal(LinkQueue *queue,LinkStack *stack){
char res = pop(stack);
// 当遇到闭括号时出栈结束
while(res !=')') {
InQueue(queue,res);
res = pop(stack);
}
char first = DeQueue(queue); //保留第一个希腊字母
push(stack,first);
while(queue->front!=NULL){
res = DeQueue(queue);
// 压入原先字母和第一个希腊字母和
push(stack,res);
push(stack,first);
}
}
//匹配文字,输出结果
void metch(char x){
char password[11] = "tdsaezgxni";
char chinese[10][8] = {"天","地","上","一个","鹅","追","赶","下","蛋","恨"};
for(int i = 0;i< strlen(password);i++){
if(x ==password[i]){
printf("%s",chinese[i]);
}
}
}
//把翻译出来的密码进行翻译,得到最终结果
void printresult(char x){
c