1、编程序判断一个字符序列是否是回文,要求采用链式队列和链式堆栈。
2、编程实现中序表达式转换成后序表达式,并把后序表达式的运行结果打印出来。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MaxQueueSize 100
#define MaxStackSize 100
typedef char DataType;
typedef char ElemType;
#include "SeqQueue.h"
#include "SeqStack.h"
void main(void)
{
void HuiWen(char str[]);
char str1[]="ABCDCBA";
char str2[]="ABCDEDCAB";
HuiWen(str1);
HuiWen(str2);
}
void HuiWen(char str[])
{
LQueue myQueue;
SeqStack myStack;
char x,y;
int i,length;
length=strlen(str);
QueueInitiate(&myQueue);
StackInitiate(&myStack);
for(i=0;i<length;i++)
{
QueueAppend(&myQueue,str[i]);
StackPush(&myStack,str[i]);
}
while(QueueNotEmpty(myQueue)==1&&StackNotEmpty(myStack)==1)
{
if(QueueDelete(&myQueue,&x)==1&&StackPop(&myStack,&y)==1&&x!=y)
{
printf("%s不是回文!\n",str);
return ;
}
}
if(QueueNotEmpty(myQueue)||StackNotEmpty(myStack))
printf("%s不是回文!\n",str);
else
printf("%s是回文!\n",str);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MaxQueueSize 100
#define MaxStackSize 100
#define M 100
typedef char DataType;
typedef char ElemType;
#include "SeqQueue.h"
#include "SeqStack.h"
#include "JS.H"
char f1[2]={'*','/'};
char f2[2]={'+','-'};
int compare(char c1, char c2)
{
if((c1==f1[0]||c1==f1[1])&&(c2==f2[0]||c2==f2[1]))
return 1;
else
return 0;
}
void main()
{
SeqStack s;
StackInitiate(&s);
char c[50],b[50];
char a,d,e;
int j=0,k,sum;
scanf("%s",c);
int len=strlen(c);
for(int i=0;i<len;i++)
{
if(c[i]!='+'&&c[i]!='-'&&c[i]!='/'&&c[i]!='*'&&c[i]!='('&&c[i]!=')')
{
printf("%c",c[i]);
b[j]=c[i];
j++;
}
else if(!StackNotEmpty(s))
StackPush(&s,c[i]);
else if(c[i]=='(')
{
StackPush(&s,c[i]);
}
else if(c[i]==')')
{
while(StackNotEmpty(s)&&StackTop(s,&a)&&a!='(')
{
printf("%c",a);
b[j]=a;
j++;
StackPop(&s,&a);
}
StackPop(&s,&a);
}
else if(StackNotEmpty(s)&&StackTop(s,&a)&&compare(c[i],a))
StackPush(&s,c[i]);
else if(StackNotEmpty(s)&&StackTop(s,&a)&&!compare(c[i],a))
{
while(StackNotEmpty(s)&&StackTop(s,&a)&&!compare(c[i],a)&&a!='('&&a!=')')
{
printf("%c",a);
b[j]=a;
j++;
StackPop(&s,&a);
}
StackPush(&s,c[i]);
}
}
while(StackNotEmpty(s)&&StackTop(s,&a))
{
printf("%c",a);
b[j]=a;
j++;
StackPop(&s,&a);
}
printf("\n");
printf("\n\n****************************************\n\n");
k=j;
for(j=0;j<k;j++)
{
printf("%c",b[j]);
}
printf("\n");
jisuan(b,k);
printf("\n");
}