gpt4 book ai didi

c - 字符数组作为 C 中的队列

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:53 25 4
gpt4 key购买 nike

我正在为 AVR 编写一段代码。我想建立一个可以push和pop的队列,这个队列是一个chars(字符串)数组。所以当我按下“a”时:
['b', 'c', 'd', 'e', 'f']
变成:
['a','b', 'c', 'd', 'e', 'f']
当我弹出时,f 就出来了。我写了这段代码,但它只将 1 个字符插入队列,就好像它删除了整个队列一样。这是我的队列代码:

char queue[50] = "";
char* queue_tail = &queue[0];
char* queue_head = &queue[0];

void queue_push(char l_item)
{
if(queue_head != &queue[strlen(queue) - 1]) //if queue is not full, do the job
{
//Push all elements one step further
char* traveler = queue_head;
for(; traveler != queue_tail; --traveler)
{
*(traveler+1) = *traveler;
*traveler = '';
}
++queue_head;
*queue_tail = l_item;
}
}

char queue_pop()
{
char temp = *queue_head;
*queue_head = '';
--queue_head;
return temp;
}

这是我的主要功能:

#include <mega32.h>
#include <alcd.h>
#include <delay.h>
#include <string.h>

void main(void)
{

const char text[] = "Hello world!";
int col_counter = 0;
char* p_head = '';

lcd_init(32);
p_head = &text[12];

while(1)
{
lcd_clear();

if(col_counter + strlen(text) > 32)
{
queue_push(*p_head);
--p_head;
}

lcd_gotoxy(col_counter, 0);
lcd_puts(text);
lcd_gotoxy(0,0);
lcd_puts(queue);
delay_ms(200);
++col_counter;

}
}

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

我把queue_head的意思从队列中的最后一个元素改成了最后一个元素,并调整了代码。

修改后的代码(main()为普通PC测试代码):

#include <stdio.h>

char queue[50] = "";
char* queue_tail = &queue[0];
char* queue_head = &queue[0];

void queue_push(char l_item)
{
if(queue_head != queue + sizeof(queue)/sizeof(*queue)) //if queue is not full, do the job
{
//Push all elements one step further
char* traveler = queue_head;
for(; traveler != queue_tail; --traveler)
{
*traveler = *(traveler - 1);
}
++queue_head;
*queue_tail = l_item;
}
}

char queue_pop(void)
{
char temp;
if (queue_head == queue_tail) return '\0'; // the queue is empty
--queue_head;
temp = *queue_head;
*queue_head = '\0';
return temp;
}

int main(void) {
queue_push(100);
queue_push(110);
printf("%d\n",queue_pop());
printf("%d\n",queue_pop());
return 0;
}

关于c - 字符数组作为 C 中的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com