数据结构24点游戏源代码文档格式.docx
- 文档编号:19175707
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:29
- 大小:20.84KB
数据结构24点游戏源代码文档格式.docx
《数据结构24点游戏源代码文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构24点游戏源代码文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
,
'
='
intinit_sq(sqlist*l){//初始化链表
l=(sqlist*)malloc(sizeof(sqlist));
if(l==NULL){
exit(-2);
}
l->
next=NULL;
return1;
}
intinsert_sq(sqlist**p,inte,intbl){//链表插入操作
sqlist*q;
q=(sqlist*)malloc(sizeof(sqlist));
q->
num_ch=e;
bol=bl;
(*p)->
next=q;
(*p)=(*p)->
next;
intcheck(sqlistl)//保证输入的数字是给出的四个数字
intright=1,find=0,i;
sqlist*q=&
l;
q=q->
next;
for(;
q->
next!
=NULL;
q=q->
next){
if(q->
bol==1){
if(q->
num_ch<
=39||q->
num_ch>
57||q->
num_ch==44||q->
num_ch==46){
right=0;
printf("
%c不是有效的运算符!
\n"
);
}
}
else{
find=0;
for(i=0;
i<
4;
i++){
if(number[1][i]==0&
&
number[0][i]==q->
num_ch){
number[1][i]=1;
find=1;
break;
}
if(find==0){
%d不在给出的四个数字中!
q->
num_ch);
}//endfor
for(i=0;
if(number[1][i]==0){
printf("
%d没有用上!
number[0][i]);
right=0;
returnright;
intchang(char*s,sqlist*l){//将用户的输入转化为单链表
intt=0;
unsignedinti=0;
intbl,ch;
inta1,a2,a;
sqlist*p=l;
strlen(s);
i++)
{
if(s[i]>
47&
s[i]<
58&
t==0){
a1=(int)s[i]-48;
t++;
elseif(s[i]>
t==1){
a2=(int)s[i]-48;
a=a1*10+a2;
elseif(s[i]<
48&
s[i]>
39&
s[i]!
=44&
=46){
if(t==1){
bl=0;
insert_sq(&
p,a1,bl);
t=0;
elseif(t==2){
p,a,bl);
bl=1;
ch=(int)s[i];
insert_sq(&
p,ch,bl);
t=0;
s[i]);
}//endfor
i=strlen(s)-1;
if(s[i]>
58){
if(s[i-1]>
s[i-1]<
bl=0;
bl=1;
a=35;
insert_sq(&
return(check(*l));
intOperate(inta,inttheta,intb){//计算
switch(theta){
case43:
returna+b;
case45:
returna-b;
case42:
returna*b;
case47:
{
if(b==0){
return-2000;
if(a%b==0){
returna/b;
else{//printf("
不能为小数\n"
return-10000;
default:
return0;
intReturnOpOrd(charop,char*TestOp)//precede()函数调用求优先级
inti;
for(i=0;
i<
OPSETSIZE;
i++)
if(op==TestOp[i])returni;
charprecede(charAop,charBop)
returnPrior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,OPSET)];
intinitstack(sqstack*s)
(s)->
base=(int*)malloc(STACK_INIF_SIZE*sizeof(int));
if((s)->
base==NULL)exit(-2);
top=(s)->
base;
stacksize=STACK_INIF_SIZE;
intgettop(sqstack*s){//取得栈顶元素
inte;
if(s->
top==s->
base){
printf("
栈空,无法取得栈顶元素!
return0;
e=*(s->
top-1);
returne;
intpush(sqstack*s,inte){//压栈
top-s->
base>
=s->
stacksize)
s->
base=(int*)realloc(s->
base,(s->
stacksize+STACKINCREMENT)*sizeof(int));
if(!
s->
base)exit(-2);
stacksize+=STACKINCREMENT;
*(s->
top++)=e;
intpop(sqstack*s,int*e){//出栈
base)
栈空,出栈错误!
*e=*(--s->
top);
intEvaluateExpression(char*MyExpression){//算法3.4----计算表达式的值
//算术表达式求值的算符优先算法。
//设OPTR和&
OPND分别为运算符栈和运算数栈
intresult;
sqstackOPTR;
//运算符栈,字符元素
sqstackOPND;
//运算数栈,实数元素
intc,bl,a,b,theta,top;
sqlist*q,l;
char*s=MyExpression;
init_sq(&
l);
if(chang(s,&
l)!
=0){
q=&
initstack(&
OPTR);
push(&
OPTR,35);
initstack(&
OPND);
q=q->
c=q->
num_ch;
bl=q->
bol;
while((c!
=35||gettop(&
OPTR)!
=35)){
if(bl!
=1){
push(&
OPND,c);
q=q->
c=q->
bl=q->
}//不是运算符则进栈
else{
top=gettop(&
switch(precede((char)top,(char)c)){
case'
:
//栈顶元素优先权低
push(&
OPTR,c);
q=q->
c=q->
bl=q->
//脱括号并接收下一字符
pop(&
OPTR,&
c);
//退栈并将运算结果入栈
theta);
OPND,&
b);
a);
OPND,Operate(a,theta,b));
default:
printf("
没有这个运算符!
return0;
}//switch
}//else
}//while
result=gettop(&
returnresult;
else{
你的输入有错误!
intrandomm()//产生四个随机数
{
inti=0;
srand((unsigned)time(NULL));
number[0][i]=0;
number[0][i]=rand();
number[0][i]%=13;
number[0][i]++;
number[1][i]=0;
returnnumber[2][4];
intCalcOneExpress(intexpression[][2])//计算表达式
//算术表达式求值的算符优先算法。
//设OPTR和&
OPND分别为运算符栈和运算数栈,OP为运算符集合。
intindex=0,result,c,theta,a,b;
initstack(&
push(&
initstack(&
c=expression[index][0];
while(c!
=35)
if(expression[index][1]!
=1)
push(&
index++;
c=expression[index][0];
}//不是运算符则进栈
else
switch(precede((char)gettop(&
OPTR),(char)c))
{
case'
index++;
c=expression[index][0];
break;
pop(&
default:
没有这个运算符\n"
return0;
}//switch
}//else
}//while
result=gettop(&
returnresult;
intEqual24(intn)
if(n==24){
return1;
else
//括号的几种情况
//1无括号
//2(ab)cd同ab(cd),下省略
//3(abc)d
//4(ab)(cd)
//5((ab)c)d
intCalcArray1(intiNumInput[2][4])
//a*b*c*d7个字符
intexpression[8][2],ii,jj,kk;
inti,j,k,l,dRes;
for(j=0;
j<
j++)
if(j==i)
continue;
for(k=0;
k<
k++)
if(k==i||k==j)
{
continue;
for(l=0;
l<
l++)
if(l==i||l==j||l==k)
{
continue;
}
expression[0][0]=iNumInput[0][i];
expression[2][0]=iNumInput[0][j];
expression[4][0]=iNumInput[0][k];
expression[6][0]=iNumInput[0][l];
expression[0][1]=eNumber;
expression[2][1]=eNumber;
expression[4][1]=eNumber;
expression[6][1]=eNumber;
for(ii=0;
ii<
ii++)
for(jj=0;
jj<
jj++)
{
for(kk=0;
kk<
kk++)
{
expression[1][0]=oper[ii];
expression[1][1]=eOperator;
expression[3][0]=oper[jj];
expression[3][1]=eOperator;
expression[5][0]=oper[kk];
expression[5][1]=eOperator;
expression[7][0]=oper[6];
expression[7][1]=eOperator;
dRes=CalcOneExpress(expression);
if(Equal24(dRes))
{
printf("
可以这样运算:
%d%c%d%c%d%c%d\n"
expression[0][0],oper[ii],expression[2][0],oper[jj],expression[4][0],oper[kk],expression[6][0]);
return1;
}
}
}
}//endofforoper
intCalcArray2(intiNumInput[2][4])
//(a*b)*c*d//9number
intexpression[10][2];
intii,jj,i,j,k,l,kk;
intdRes;
expression[1][0]=iNumInput[0][i];
expression[3][0]=iNumInput[0][j];
expression[6][0]=iNumInput[0][k];
expression[8][0]=iNumInput[0][l];
expression[1][1]=eNumber;
expression[3][1]=eNumber;
expression[8][1]=eNumber;
expression[0][0]=oper[4];
expression[0][1]=eOperator;
expression[2][0]=oper[ii];
expression[2][1]=eOperator;
expression[4][0]=oper[5];
expression[4][1]=eOperator;
expression[5][0]=oper[jj];
expression[5][1]=eOperator;
expression[7][0]=oper[kk];
expression[7][1]=eOperator;
expression[9][0]=oper[6];
expression[9][1]=eOperator;
dRes=CalcOneExpress(expression);
if(Equal24(dRes))
{
printf("
%c%d%c%d%c%c%d%c%d\n"
oper[4],expression[1][0],oper[ii],expression[3][0],oper[5],oper[jj],expression[6][0],oper[kk],expression[8][0]);
return1;
}
intCalcArray3(intiNumInput[2][4])
//(a*b*c)*d//9number
if(l==i||l==j||l==k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 24 游戏 源代码