天梯赛——包装机 (c语言数组模拟实现)

 

 嗯,首先看看题目描述,显然,这是一道关于队列,栈的数据结构题,但是对于用c的朋友们来说有没有不用c++ STL库里面的函数用数组模拟队列,栈而写出来呢?

还是有方法的,这里就是一个小白闲着无聊,模拟着模拟着就出来了,

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
char ch[105][1000];
char st_ack[10000];
int t_op=0,tops[10001];
int n,m,len,k;
void p_op(int k) {
	if (t_op > 0) {
		printf("%c",st_ack[t_op]);
		t_op--;
	}
}
void p_ush(int k) {
	if (t_op >= len) {
		p_op(k);
	}
	t_op++;
	st_ack[t_op] = ch[k][tops[k]++];
}
int main() {
	memset(tops,0,sizeof(tops));
	scanf("%d%d%d",&n,&m,&len);
	for (int i=1; i<=n; i++) {
		scanf("%s",&ch[i]);
	}
	while (scanf("%d",&k) != EOF) {
		if (k == -1) {
			break;
		}
		if (k == 0) {
			p_op(k);
		}
		if (k != 0 && tops[k] < m) {
			p_ush(k);
		}
	}
	return 0;
}

 不想在代码段写注释了,方便复制的朋友们直接copy了,这里简单讲一下思路,

1.用二维字符串数组先把这些输入的字符串存进去。

(此代码中存进去的字符串方法若看不懂请翻书)

2.创建一个字符串数组st_ack来模拟栈,一个t_op表示st_ack栈顶

3.创建一个tops数组表示n个队列的顶部

(如tops【1】表示第一个字符串数组ch【1】【】这个字符串的顶部,后面每次推进去st_ack,顶部就向后退一个直到退到m为止)

4.写函数,p_op函数就是从栈推出去一个元素了,p_ush就推进去栈里一个元素

(注意坑点,这里面,最好把先判断tops【k】< M 这个条件先判断了)

(讲人话就是先判断你目前的第K列字符串是否顶部超过了M,是的话就不进行操作)

不要放在p_ush()里面判断,因为p_ush()这个函数只要进去了,就一定要推进去东西,我被这个小点给卡掉了半小时,debug发现没啥错误的地方,然后幡然醒悟。。

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值