我需要实现FIFO链接列表队列,该队列可以使用当前元素进行布局,并为用户选择排队/出队/退出选项。 如果选择了enqueue选项,请输入一个字符串并将此字符串排入队列。如果选择了出列,则将一个元素出列。 同时,程序每5秒将一个元素出列一个元素,并且每10秒将一个元素(例如:a1,a2,a3,...)排入队列。 从链接列表中排队/出列后,显示队列中的当前元素并准备好进行下一个选择。 当入队(10秒)/出队(5秒)/退出时,UI更新/刷新。如果队列中没有元素或没有输入选择,则不需要更新。
这是数据结构。
QElement* head;
QElement* tail;
typedef struct{
char element[20];
QElement* next;
}QElement;
enq();
deq();
示例场景:
当前元素:N / A. 当前时间:17:59:12 请输入选项(1.Enq; 2. Deq,3.Exit):ß无输入 元素:a1入队。 17距离17:59:12 10秒
当前元素:a1 当前时间:17:59:22 请输入选项(1.Enq; 2. Deq,3.Exit):ß无输入 元素:a1已出列。 17从17:59:22开始5秒
当前元素:N / A. 当前时间:17:59:27 请输入选项(1.Enq; 2. Deq,3.Exit):1 请输入字符串:ABC 元素:ABC入队。
当前元素:ABC 当前时间:17:59:28 请输入选项(1.Enq; 2. Deq,3.Exit):1 请输入字符串:DEF 元素:DEF入队。
当前元素:ABC-> DEF 当前时间:17:59:29 请输入选项(1.Enq; 2. Deq,3.Exit): 元素:a2入队。从17:59:22起10秒 元素:ABC已经出局。从17:59:27开始5秒
当前元素:DEF-> a2 当前时间:17:59:32 请输入选项(1.Enq; 2. Deq,3.Exit): 请输入字符串:IJK 元素:IJK入队。
当前元素:DEF-> a2-> IJK 当前时间:17:59:34 请输入选项(1.Enq; 2. Deq,3.Exit):
我的代码未完成:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>
#include <unistd.h>
typedef struct A{
char element[20];
struct QElement* next;
}QElement;
QElement* head = NULL;
QElement* tail = NULL;
int main()
{
char data[] = "a";
int i = 2;
while(i--) {
if (Isitempty(head,tail)) {
printf("Current Element: N/A\n");
}
else {
Print();
}
time_t now = time(NULL);
printf("Current time: %s",ctime(&now));
printf("Please enter the option(1.Enq; 2. Deq, 3.Exit):\n");
//SetTimer(NULL, 1, 100, enq(data));
enq(data);
enq(data);
}
return 0;
}
int Isitempty(QElement* front,QElement* end) {
if (front==NULL && end == NULL) {
return 1;
}
return 0;
}
void enq(char data[]) {
QElement* temp = (QElement*)malloc(sizeof(QElement));
strcpy(temp->element,data);
temp->next = NULL;
if (head == NULL && tail == NULL) {
head = temp;
tail = temp;
printf("Element: %s is enqueued\n", temp->element);
return;
}
tail->next = temp;
tail = temp;
printf("Element: %s is enqueued\n", temp->element);
free(temp);
return;
}
void Print() {
QElement* temp = (QElement*) malloc(sizeof(QElement));
temp = head;
for (temp ; temp != NULL ; temp=temp->next) {
printf("Current Element: %s",temp->element);
//temp = temp->next;
}
}
idk为什么在Print()函数中,for循环不会结束?我认为最后temp必须为NULL。但它不起作用。我真的不知道如何处理计时器和用户选择enq / deq / exit。请有人帮帮我吗?