c語言列隊(duì)能進(jìn)行動(dòng)態(tài)擴(kuò)容嗎

小樊
81
2024-10-16 22:48:27
欄目: 編程語言

在C語言中,數(shù)組的大小是固定的,不能在運(yùn)行時(shí)動(dòng)態(tài)改變。如果你需要一個(gè)可以動(dòng)態(tài)擴(kuò)容的數(shù)據(jù)結(jié)構(gòu),可以考慮使用鏈表(linked list)或者動(dòng)態(tài)數(shù)組(如C++中的vector或者Python中的list)。

鏈表是一種線性數(shù)據(jù)結(jié)構(gòu),每個(gè)元素都包含一個(gè)指向下一個(gè)元素的指針。鏈表的優(yōu)點(diǎn)是可以動(dòng)態(tài)擴(kuò)容,當(dāng)需要添加新元素時(shí),只需分配一個(gè)新的內(nèi)存空間,并將新元素添加到鏈表的末尾。鏈表的缺點(diǎn)是訪問元素的時(shí)間復(fù)雜度較高,為O(n)。

動(dòng)態(tài)數(shù)組是一種類似于數(shù)組的線性數(shù)據(jù)結(jié)構(gòu),但它可以在運(yùn)行時(shí)動(dòng)態(tài)調(diào)整大小。動(dòng)態(tài)數(shù)組的優(yōu)點(diǎn)是訪問元素的時(shí)間復(fù)雜度較低,為O(1)。但是,動(dòng)態(tài)數(shù)組在擴(kuò)容時(shí)需要重新分配內(nèi)存并將原數(shù)組的元素復(fù)制到新數(shù)組中,這可能會(huì)導(dǎo)致較高的時(shí)間和空間開銷。

以下是一個(gè)簡(jiǎn)單的C語言鏈表示例:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void appendNode(Node** head, int data) {
    if (*head == NULL) {
        *head = createNode(data);
        return;
    }

    Node* current = *head;
    while (current->next != NULL) {
        current = current->next;
    }

    current->next = createNode(data);
}

void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

int main() {
    Node* head = NULL;
    appendNode(&head, 1);
    appendNode(&head, 2);
    appendNode(&head, 3);
    printList(head);
    return 0;
}

這個(gè)示例展示了如何創(chuàng)建一個(gè)鏈表并在運(yùn)行時(shí)動(dòng)態(tài)添加新元素。

0