实验二、栈及其应用

  • 格式:docx
  • 大小:157.43 KB
  • 文档页数:14
B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母;
C:再次遍历数组,将数组元素依次入队。(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。
D:将队列中元素赋值给demon[ i ]。如果此时flag=1,则再次重复C过程。直至所有元素为人类语言。
栈和队列及其应用上机实验报告
课程名称:数据结构
班级:
实验日期:
姓名:
学号:
指导教师:
实验序号:
实验成绩:
一、实验名称:魔王语言解释
二、实验目的及要求
问题描述
有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:
temp=(LinkStack)malloc(sizeof(LinkStackNode));
if(temp==NULL) return FALSE;/*申请空间失败*/
temp->data1=x;
temp->next=top->next;
top->next=temp;/*修改当前栈顶指针*/
return TRUE;
break;
}
if(p1->next==NULL) break;
else p1=p1->next;
}
fclose(fp);
if((fp=fopen("mean.txt","wt"))==NULL)
{
printf("读用户信息文件错误!\n");
return;
}
while(p2)
{
if((fprintf(fp,"%c %s\n",p2->data1,p2->data2))==0)
fp=fo");
if(fp==NULL)
{
printf("\n\n含义文件不存在,请建立\n");
head->next=NULL;
return head;
}
p1=(MEAN *)malloc(sizeof(MEAN));
while(1)
{
p1=(MEAN *)malloc(sizeof(MEAN));
}
while(p3)
{
if((fprintf(fp,"%s\n",p3->data1))==0)
{
printf("写翻译结果文件错误!\n");
break;
}
if(p3->next==NULL) break;
else p3=p3->next;
}
fclose(fp);
}
void menu()/*菜单*/
if(NewNode!=NULL)
{
NewNode->data1=x;
NewNode->next=NULL;
q->rear->next=NewNode;
q->rear=NewNode;
return TRUE;
}
else return FALSE;
}
int DeleteQueue(LinkQueue *q,char *x)/*出队操作*/
{
printf("\n\n规则文件不存在,请建立\n");
head->next=NULL;
return head;
}
while(1)
{
p1=(RULE *)malloc(sizeof(RULE));
if(fscanf(fp,"%c %s\n",&p1->data1,p1->data2)==2)
{
p2->next=p1;
if(fscanf(fp,"%c %s\n",&p1->data1,p1->data2)==2)
{
p2->next=p1;
p2=p1;
}
else
{
p2->next=NULL;
free(p1);
return head;
}
}
fclose(fp);
}
RULE *append_rule(RULE *head)/*添加规则*/
{
RULE *p1,*p2;
char x,a[8];
int n;
p2=head;
while(p2->next!=NULL)
p2=p2->next;
while(n)
{
printf("请已α->β1β2β3β4...形式输入规则");
p1=(RULE *)malloc(sizeof(RULE));
flushall();
scanf("%c->%s",&x,a);
p1->data1=x;
strcpy(p1->data2,a);
p1->next=NULL;
printf("输入的规则是%c->%s",p1->data1,p1->data2);
p2->next=p1;
p2=p1;
printf("继续输入规则吗?\n1-继续0-不继续\n请选择:[ ]\b\b");
{
char data1;
char data2[20];
struct mean *next;
}MEAN;
void InitStack(LinkStack top)/*链栈的初始化*/
{
top->next=NULL;
}
int Push(LinkStack top,char x)/*进栈操作*/
{
LinkStack temp;
typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
typedef struct rule/*定义链表存储规则*/
{
char data1;
char data2[20];
struct rule *next;
}RULE;
typedef struct mean/*定义链表存储字母含义*/
p2=p1;
printf("继续输入规则吗?\n1-继续0-不继续\n请选择:[ ]\b\b");
scanf("%d",&n);
flushall();
}
return head;
}
void save_file(RULE *p1,MEAN *p2,RESULT *p3)/*将规则、含义及翻译结果存入文件*/
(1)α->β1β2…βm
(2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ
在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
基本要求
用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。
printf("\n\n\t****************请选择(0-2):[ ]\b\b");
}
LinkQueue *translate1()/*去括号*/
{
LinkQueue *q1=(LinkQueue *)malloc(sizeof(LinkQueue)),*q2=(LinkQueue *)malloc(sizeof(LinkQueue)),
(1)B-> tAdA
(2)A-> sae
三、实验环境
VisualC++ 6.0
四、实验过程
(1)以一维数组demon[ i ]表示魔王语言.
(2)魔王语言由用户输入,初始保存在demon[ i ]中.
(3)魔王语言与人类语言对应关系固化在程序中.
(4)实现过程:
A:初始,魔王语言接收后存放在demon[ i ]中.
p1=(MEAN *)malloc(sizeof(MEAN));
flushall();
scanf("%c->%s",&p1->data1,p1->data2);
p1->next=NULL;
printf("输入的含义是:%c->%s",p1->data1,p1->data2);
p2->next=p1;
}
int Pop(LinkStack top,char *x)/*出栈操作*/
{
LinkStack temp;
temp=top->next;
if(temp==NULL) return FALSE;/*栈为空*/
top->next=temp->next;
*x=temp->data1;
free(temp);/*释放存储空间*/
typedef struct result/*定义链表存储翻译结果*/
{
char data1[20];
struct result *next;
}RESULT;
typedef struct Node/*定义链队列*/
{
char data1;
struct Node *next;