数据结构与算法·实验四

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");
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值