今天花了一天時間把單向鍊錶的建立,增加,刪除,修改,查詢,遍歷等問題用c++實現了一遍,把以前好多模糊的地方,終於弄清楚了。現在把這些內容記錄下來。
1. 建立單向鍊錶結點
我們通常用乙個結構體表示鍊錶結點,如下:
struct listnode
};
2. 插入新結點
bool insertlistnode(listnode* head, int pos, int data)
listnode* p = head;
listnode* q = (listnode*)(malloc(sizeof(listnode))); //為新插入結點分配記憶體
q->data = data; //新插入結點資料為data
int count = 0;
if (pos >= 0)
} q->next = p->next; //開始插入q結點,讓p的後繼結點稱為q的後繼結點
p->next = q; //讓q成為p的後繼結點
return true;
} }
3.刪除指定結點
bool deletelistnode (listnode* head, int pos)
int count = 0;
listnode* p = head;
if (pos > 1)
p = p->next;
}listnode* temp = p->next; //要定義乙個中間變數來儲存要刪除的結點,這樣才能釋放刪除結點所佔記憶體,從而防止記憶體洩露
p->next = temp->next;
free(temp);
//若這樣直接賦值p->next = p->next->next;會造成記憶體洩露
return true;
}}
4.查詢指定結點
bool findlistnode(listnode* head, int data)
listnode* p = head->next;
while (p != null)
p = p->next;
}}
5.修改指定結點資料
bool modifylistnode(listnode* head, int data, int new_data)
listnode* p = head;
while (p != null)
p = p->next;
}}
6. 迴圈遍歷鍊錶
void looplistnode(listnode* head)
listnode* p = head;
while (p != null)
}
7.遞迴遍歷鍊錶
void recursivelistnode(listnode* head)
std::cout << head->data;
recursivelistnode(head->next);
//如果將列印放在遞迴呼叫後面執行,則會實現鍊錶的逆序列印,原因是遞迴是用棧儲存中間變數的,利用了棧的後進先出原理
}
單向鍊錶的操作
1.單向鍊錶的建立 鍊錶建立後,其實,此時我們只可以知道head,而後通過head訪問每乙個節點成員。這是比較簡單的鍊錶,其中沒有其它的資訊了。如果需要建立有環的鍊錶,則將尾節點的next指標指向中間乙個節點即可。首先找到尾節點,而後將尾部節點的next指向中間乙個節點即可。如何判斷乙個鍊錶是否存在...
單向鍊錶的操作
include using namespace std typedef char elemtype 定義char型別的elemtype,方便修改 typedef struct lnode 定義乙個結構體 linklist void initlist linklist l void createlis...
單向鍊錶的操作
has head list.h ifndef has head list h define has head list h define crt secure no warnings include include include define debug format,do while 0 def...