簡體   English   中英

C中的全局變量“鏈表”隊列? (初始化器元素不是恆定的)

[英]Global variable Linked Lists queue in C? (Initializer element is not constant)

我正在從事一個涉及一系列隊列的項目。 這些隊列旨在通過一系列功能來處理和修改,因此它們的作用域是全局的。 截至目前,我的實現引發了“ Initializer元素不是常量”標志。 我理解為什么,在大多數情況下,但我想知道是否還有其他方法可以實現這一目標。 (即包含每個隊列的數組?)這可能嗎?

main.c

LIST* queue0 = ListCreate();  //0
LIST* queue1 = ListCreate();   //1
LIST* queue2 = ListCreate();   //2

int main(){......}

ListCreate發生如下:

工具

LIST *ListCreate()
{
    int popped = popList();
    if (popped != -1){
        //Create list
        lists[popped].currSize = 0;
        return &lists[popped];
    }
    else{
        return NULL;
    }
}

(請記住,我被要求在不使用malloc的情況下構建一個鏈表。)

LIST* queue0 = NULL;
LIST* queue1 = NULL;
LIST* queue2 = NULL;

void initQueues(void) {
    queue0 = ListCreate();
    queue1 = ListCreate();
    queue2 = ListCreate();
}

void main(int argc, char *argv[]) {
    initQueues();
    // ... (i.e. other stuff)

}

您實際上不需要動態分配鏈表。 您可以將它們放在全局(或靜態)內存中,但是必須手動對其進行初始化,這對於較小的列表是可行的(注意:初始化值都是恆定的,或者至少在編譯時是可計算的)。 例:


struct llist {
        struct llist *next;
        // Whatever
        char *payload;
        };

struct llist lists[] =
{{ lists+1, "one" }
,{ lists+2, "two" }
,{ lists+3, "three" }
,{ lists+4, "four" }
,{ lists+5, "five" }
,{ lists+6, "six" }
,{ lists+7, "seven" }
,{ lists+8, "eight" }
,{ lists+9, "nine" }
,{ NULL, "ten" }
        };

struct llist *freelist = lists;
struct llist *queue = NULL;

        /* example for constructor / destructor */
struct llist *newnode (void)
{
struct llist *this ;
this = freelist;
if (this) freelist = this->next;
return this;
}

void freenode (struct llist *ptr)
{
if (!ptr) return;
ptr->next = freelist;
freelist= ptr;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM