LinkList

LinkList是非常神奇的東西
他算是一種結構和指標搭配的一種產物,我們可以經由這種方式,
不經由陣列這種相對位址,而找到下一個data,這部分,對二元數的處理有很大的幫助

以下紀錄一下可用的sample code

struct linklist {
    char data;
    struct linklist *nextPtr;
};

typedef struct linklist  ListNode;
typedef ListNode* ListNodePtr;

CWinApp theApp;
void insert(ListNodePtr*  , char );
void printList(ListNodePtr );

void main(  ){
        ListNodePtr startPtr = NULL;
        char item;
        while (1){
            cout << "Enter a character: ";
            cin  >> item;
            insert(&startPtr , item);
            printList(startPtr);
        }
 }

void insert(ListNodePtr *sPtr , char value){
    ListNodePtr newPtr;
    ListNodePtr previousPtr;
    ListNodePtr currentPtr;

    newPtr = (ListNodePtr )malloc(sizeof(ListNode));
    if ( newPtr != NULL){
        newPtr->data = value;
        newPtr->nextPtr = NULL;
        previousPtr = NULL;
        currentPtr = *sPtr;

        while( currentPtr != NULL && value > currentPtr->data){
            previousPtr = currentPtr;
            currentPtr = currentPtr->nextPtr;
        }
        if(previousPtr == NULL){
            // 建立第一個Node
            newPtr->nextPtr = *sPtr;
            *sPtr = newPtr;
        }else{
            // 建立新Node
            previousPtr -> nextPtr = newPtr;
            newPtr->nextPtr = currentPtr;
        }
    }else{
        cout << value <<" not inserted.No memory avaliable"<
    }
}

void printList(ListNodePtr currentPtr){
    if( currentPtr == NULL){
        cout <<"List is empty"<
    }else{
        cout << "the List is "<
        while(currentPtr != NULL){
            cout << currentPtr->data <<"--> ";
            currentPtr = currentPtr->nextPtr;
        }
        cout << "NULL";
    }
    cout << endl;
}

留言

Peter Pan寫道…
您好~現在剛開始看EFI code對這些用法很不熟悉,當初沒有學得很深入.

因為發現在EFI當中使用頻率很高,所以此篇文章內容對我的幫助很大,謝謝!
Eddie Chen寫道…
hi,peter Pan,
很高興對你有幫助,
我也是BIOS領域的新人
大家一起努力吧

這個網誌中的熱門文章

如何在VS2022 Community 簡要的設定UDK2018的環境

自製讀取 H 檔案並找出 define 的程式

如何Build UDK2018