数据结构 作业 --栈和队列

本文介绍了一种将混合字符串转换为特定格式(SSSHHH)的算法,通过使用栈实现。此外,还探讨了如何利用栈和队列来判断一个序列是否为回文序列,提供了一个实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

刚开始题目看了半天,没看懂。。。
其实就是将SH混合字符串输出为SSSHHH的形式
思路
遍历遇到H入栈暂存,遇到S直接添加到输出字符串中

//火车入栈问题
//使用顺序栈
char* TrainSeat(char *out, const char *in)
{
	SqStack<char> seatStack;
	int i = 0;
	while (*in != '\0')
	{
		if (*in == 'H')
		{
			seatStack.Push(*in++);
		}
		else
		{
			*(out + i++) = *in++;
		}
	}
	//将栈中的'H'出栈
	int length = seatStack.StackLength();	//获得栈长
	char c = '\0';
	seatStack.GetTop(c);		//获得栈顶元素
	for (int j = 0; j<length; j++)
	{
		*(out + i++) = c;
	}
	*(out+i) = '\0';
	return out;
}

在这里插入图片描述

Status Compare(const char *c)
{
	SqStack<char> seqStack;
	SqQueue<char> seqQueue;
	char c1 = '\0';
	char c2 = '\0';

	for (int i = 0; c[i] != '@'; i++)
	{
		//入栈,入队
		seqStack.Push(c[i]);
		seqQueue.EnQueue(c[i]);
	}

	while (!seqStack.IsEmpty() && !seqQueue.IsEmpty())
	{
		seqStack.Pop(c1);
		seqQueue.DeQueue(c2);
		if (c1 != c2)
		{
			return ERROR;
		}
	}

	if (seqStack.IsEmpty() && seqQueue.IsEmpty())
	{
		return OK;
	}
}

测试

int main()
{
	const char *a = "abcdedcba@";
	if (Compare(a))
	{
		cout << a << "(不包括@)是回文序列!~" << endl;
	}
	return 0;
}

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值