带有计时器

时间:2017-09-27 16:03:15

标签: c timer linked-list fifo

我需要实现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。请有人帮帮我吗?

0 个答案:

没有答案