tst12_4

文章讨论了12.3例题中使用指针成员表示前置元素的问题。作者指出,按照eg12_3的实现,不断push和pop会导致栈为空,无法通过指针获取前趋点。作者提出了自己的解决方案,强调栈内元素连续,不需要指针跳转来保存路径信息。文章还附带了一个图形,显示了空间需求与最短路径的关系。
摘要由CSDN通过智能技术生成

tst_12_4_1

为什么12.3 的例题 不能用一个指针成员表示前置?

根据eg12_3 的写法,会不停的push() pop(), 最后达到终点时整个stack 完全是空的。
既然stack里面没有元素,怎么用指针成员获取前趋点呢?

我个人写法里并未直接弹出,但是stack内的元素都是,完全连续的,不需要指针跳转

tst_12_4_2

0,0
1,0
2,0
3,0
2,1
4,0
2,2
4,1
2,3
1,2
4,2
2,4
0,2
3,4
1,4
0,3
4,4
0,4

先附上图,很直接的可以计算出queue需要多少的空间
从上到下,从左到右,累计右多少个节点,即为最少需要的空间
也就是和最短路径,以及分岔路的数量有关

请帮我解释这段代码:#include "cmd_parse.h" static int bufed_uart_rcv_1B(void *ref, uint8_t *c) { BUFED_UART_T *h = ref; return bufed_uart_rcv(h, c, 1); } CMD_PARSE_T *cmd_ps_1; osThreadId rx_cmp_tst_hd; extern RNG_HandleTypeDef hrng; void uart1_fast_loopback_test(uint32_t fatfs_ok) { uint8_t *tx_buf, *rx_buf; tx_buf= pvPortMalloc(URT_TST_BUF_LEN); if(tx_buf == NULL){ GS_LOGPRT_ERR("tx_buf pvPortMalloc failed.\r\n"); goto err_00; } rx_buf= pvPortMalloc(URT_TST_BUF_LEN); if(rx_buf == NULL){ GS_LOGPRT_ERR("tx_buf pvPortMalloc failed.\r\n"); goto err_01; } FIL *fp = pvPortMalloc(sizeof(*fp)); if(fp==NULL){ GS_LOGPRT_ERR("tx_buf pvPortMalloc failed.\r\n"); goto err_02; } bfdurt_tst_01.rx_buf = rx_buf; bfdurt_tst_01.tx_buf = tx_buf; bfdurt_tst_01.buf_size = URT_TST_BUF_LEN; bfdurt_tst_01.err_cnt = 0; for(uint32_t i = 0; i < URT_TST_BUF_LEN; i++) tx_buf[i] = HAL_RNG_GetRandomNumber(&hrng); osThreadDef(rx_cmp_tst_tsk, uart_rx_cmp, osPriorityBelowNormal, 0, 200); rx_cmp_tst_hd = osThreadCreate(osThread(rx_cmp_tst_tsk), &(bfdurt_tst_ptr)); osDelay(120); uint32_t lp; cmdprs_init(&cmd_ps_1, 256, &RBFD_UART_GET_UART(urt2), bufed_uart_rcv_1B); uint32_t f_num = 0; size_t n; while(1){ GS_Printf("Input test data length\r\n"); cmdprs_read_1line(cmd_ps_1); char ch; int scn = sscanf((void*)cmd_ps_1->buf->data,"%lu%c", &lp, &ch); if(scn == 2){ if(ch == 'M' || ch == 'm') lp <<= 10U; else if(ch == 'G' || ch == 'g') lp <<= 20U; else if(ch == 'K' || ch == 'k') ; else lp >>= 10U; lp /= (URT_TST_BUF_LEN/1024); }else{ GS_Printf("ERROR\r\n"); break; }
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值