我有以下代碼是雙鏈表實現的一部分。然後我必須使用我的ADT實現來創建表格value
(這是一個字符串),address
(它是uint32_t類型)(所以是一個2列表)。雙鏈表插入到特定列表功能和參數
typedef struct {
char *label; // is a string like "mov".
uint32_t labelAddress; // the address of the label.
} individualEntry;
typedef void(*FreeList)(void*);
typedef struct listEntries {
individualEntry newInstr;
struct listEntries *prev;
struct listEntries *next;
} listEntries;
listEntries *head;
/*
* HELPER FUNCTIONS
*/
listEntries *createNewList() {
listEntries *newListPtr = malloc(sizeof(listEntries));
return newListPtr;
}
listEntries *createNewEntry(char *label, uint32_t address) {
listEntries *newEntry = (listEntries*) malloc(sizeof(listEntries));
newEntry->prev = NULL;
newEntry->next = NULL;
newEntry->newInstr.label = label;
newEntry->newInstr.labelAddress = address;
return newEntry;
}
void insert(char *label, uint32_t address) {
listEntries *temp = head;
listEntries *newEntry = createNewEntry(label, address);
if (head == NULL) {
head = newEntry;
return;
}
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newEntry;
newEntry->prev = temp;
}
我需要先創建這個表,然後添加到這個記錄。
我的困難在於插入到這個特定表中的函數的實現。我是否需要另一個插入功能,還是必須編輯我擁有的一個?
如果我需要一個新的函數,它的參數:一個指針型結構listEntries
,字符串和記錄的地址的新表以復加,我需要在參數要考慮的一個和下一個記錄我的列表?
我不知道如何處理插入後的上一個和下一個指針。
有人可以發佈這樣的功能的實現嗎?
http://pastebin.com/egDECvDi – sp2danny
@ sp2danny:這實際上是C++,但思路應該有所幫助。 – PJTraill
恐怕我不明白你的兩個(或者只是一個?)新的功能是要做的。如果你想插入多個條目,這應該建立在你的基本'insert'函數上,那麼你只需要一次就可以完成。如果你想在最後插入(就像你的'insert'那樣),考慮保持一個'tail'和'head',以避免掃描找到結尾。在這種情況下,您可以將頭+尾放入'struct list'中。如果你想讓列表(如頭部所表示的)成爲你的第二個新函數的參數,那麼你應該使該函數成爲基本的'insert'函數。 – PJTraill