簡體   English   中英

C中鏈表的指針基礎和頂部

[英]Pointer base and top for linked list in C

基於鏈表的數據結構堆棧具有基礎指針和頂部指針
指向堆棧的成員。

struct node
{
     struct node* next;
     int val;
};
struct stack
{
    struct node* base;
    struct node* top;
}

所以我的問題是我們可以使用相同的方法來創建鏈接列表嗎?
如果我們想將新成員添加到列表的末尾,則不需要
遍歷整個列表。

 struct listnode
    {
         struct listnode* next;
         int val;
    };
    struct linkedlist
    {
        struct listnode* base;
        struct listnode* top;
    }

這合適嗎?

堆棧僅需要頂部指針。 也許您正在使用該數據結構作為queue ,從頭開始添加到末尾。

鏈表只需要一個 ,但對於追加到最后一個尾巴將是有益的。

struct linkedlist
{
    struct listnode* head;
    struct listnode* tail;
    int count; // Might be useful
}

(我使用了常規名稱。)

可能有人會提到雙重鏈表

struct node
{
     struct node* previous;
     struct node* next;
     int val;
};

這將允許頭和尾的完全對稱使用。

沒有什么可以阻止您使用上面定義的任意一對結構創建數據結構的。 但是,如果您可以在鏈表的前面或后面添加和刪除元素而無需遍歷該列表,則它更像是將雙端列出 類似地,您可以從任一端添加或獲取元素的堆棧也趨向於出隊。

我認為正在發生的事情是您在正式接口和基礎數據結構之間感到困惑。 因此,如果您使用API​​創建代碼,該API允許在您可以遍歷並從中插入/刪除的項目的鏈表的任一端添加或刪除元素,則可以使用它來顯示堆棧或鏈表或出隊,具體取決於您使用API​​的哪些部分以及如何命名。

暫無
暫無

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

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