c语言数据结构课程设计恶魔语言1,[问题说明]:
有些恶魔总是用自己非常时髦抽象的语言之一说话,没有人能听懂,但他的语言总能解释大人能听懂的语言。因为他的语言是以下两个法则逐渐抽象的。
(1) (1) 1 2. m
(2) ( 1 2. n) n n-1.1
两种形状都从左到右表示分析。试着用恶魔的语言折叠解释系统,解释大人们能听懂的话。
基本要求:通过两种规则实施:设定代表恶魔语言词汇的大写字母。小写字母表示人的语言词汇。希腊字母表示可以用大写或小写字母替换的变量。恶魔的语言可以包含人的词汇。
(1) b 骑
(2)Asae
二、[基本要求]:
以以下两个具体规则和上述规则格式(2)实现:设定表示恶魔语言的大写字母、表示人语言词汇的小写字母、表示可以用大写或小写字母代替的变量的希腊字母。恶魔的语言可以包含人的词汇。
例如:
(1) b 骑
(2)Asae
三、[选择为内容]:
替代变量的数量没有限制。也就是说,程序启动时读取第一种形式的规则集。此规则集固定在程序中。第二条规则只能固定在程序中。
第四,[编程基本思想、原理和算法说明]:
(1)将魔王语言表示为一维阵列lan[ I]。
(2)魔王语言由用户输入,首次存储在lan[ I]中。
(3)魔王语言和人类语言的规则手动输入,规则2固定在程序上。
(4)实施过程:
答:最初,收到魔王语言后,会将其保存在局域网[ I]中。
b:第一次遍历数组,将数组括号中的元素从左到右放入堆栈。
c:按顺序堆叠堆叠的堆叠顶端元素,并按顺序处理堆叠顶端元素。
d:如果堆叠顶部元素为左括号,则套用flag=1,套用规则2;如果堆叠顶部元素为右括号,则套用flag=0,规则1。括号中的元素存储在数组中,以相反的顺序应用规则1输出。
1:设定堆叠的摘要资料类型定义。
ADT stack{}
数据对象:d={ ai | aicharset,I=1,2,n,n=0}
数据关系:R1={| ai-1,ai-d,I=2,n}
基本任务:
Init stack (&s)
操作结果:构成空堆栈。
推送(&s,e)
初始条件:堆栈s已存在。
操作结果:将新堆栈顶部元素e,放在堆栈s的堆栈顶部
Pop (&s&e)
初始条件:堆栈s已存在。
操作结果:删除s的堆栈顶部元素,并将该值返回到e。
}ADT stack
23360此程序包含四个模块:
1)主函数模块。
2)堆栈处理模块中的元素。
3)翻译大写处理模块。
4)翻译括号内的元素模块。
模块之间的调用关系:
主函数模块
元素在堆栈处理模块中;
翻译模块
翻译括号内的元素处理模块。
}
}
五、[我的源代码]:
#include
#include
#include
#include
#include
#define OK 1
#define OVERFLOW -1
#define status int
#define elemtype char
#define STACK_INIT_SIZE 100
#define STACKINCREAMENT 10
#define maxn 10010
Typedef struct
Elemtype * base
Elemtype * top
Int stacksize
} Sqstack
Status Init(Sqstack *S)
s-base=(elem type *)malloc(stack _ init _ size * size of(elem type));
If(!S-base)
exit(OVERFLOW);
S-top=S-base;
s-stacksize=STACK _ INIT _ SIZE;
Return OK
}
Status pop (sqstack * s,elemtype * e)//删除堆栈顶部元素,然后使用e返回其值。
if(S-top==S-base)return 0;
* e=*-s-top;
return * e;
}
Statuspush (sqstack * s,elemtype e)//插入堆叠顶部元素
If(S-top-S-base=S-stacksize)
s-base=(elem type *)realloc(s-base,(s-stack size stack increament)* size of(elem type)
If(!S-base)
exit(OVERFLOW);
S-top=S-base S-stacksize;
s-stack size=stack increament;
}
* S-top=e;
Return OK
}
Int main()
sq stack s;
init(s);//建立堆叠;
Chara [maxn]、b [maxn]、LAN [maxn]、f [maxn]、d[maxn];
Char c1、c2、C3;
输入Printf('规则1: \n ')。);
scanf(“% c-% s”,c1,a);//printf('%c-%s\n ',c1,a);
getchar();
scanf(“% c-% s”,c2,b);//printf(“% c-% s \ n”,c2,b);
getchar();
int len _ a=str len(a);
int len _ b=str len(b);
int f _ len=0;
for(int I=0);I=0;I-()//将魔王语言从右向左堆叠;
Push(s,LAN[I]);
}
char e;
int flag=0;
int d _ len=0;
Printf(“翻译的语言是”);
for(int I=0);I=0;J-)//右括号占用空间,因此长度减去2。
If(j)
Printf('%c%c ',c3,d[j]);
Else
printf(“% c”,d[j]);
}
}
Else if(flag!=1)
printf(“% c”,e);
}
put char(\ n);
return 0;
}
3、运行结果: