1. 單鏈表是什麼?
單鏈表是一種常見的簡單資料結構,鍊錶由很多個結點組成,每個結點有儲存資料的資料域和指向下乙個結點的位址。因為每個結點都有下乙個結點的位址,因此通過當前結點可以找到下乙個結點,將各種資料就像鍊子一樣連線起來。相比於陣列,鍊錶的優點就是大小可以改變,刪除和插入資料也不必作太大的改動,缺點是不可以隨機訪問(必須通過乙個結點訪問下乙個結點來訪問你想訪問的結點)。2. 單鏈表的實現(c++)
#pragma once
#include
#include
template
class node
;template
class singlylinklist
;//————————————————————————————————//node類的實現
template
node::node(node* pnext /*= null*/, elemtype* pdata /*= null*/)
:m_pnext(pnext),m_pdata(pdata)
template
void node::setnext(node* val)
template
node* const& node::getnext() const
template
void node::setdata(elemtype val)
template
elemtype const& node::getdata() const
//————————————————————————————————//singlylink類實現
template
singlylinklist::singlylinklist()
:m_pheadnode(new node()),m_length(0)
template
bool singlylinklist::insert(elemtype elem, unsigned
int pos)
for(node* pcurrentnode = m_pheadnode; pcurrentnode != null; pcurrentnode = pcurrentnode->getnext())
}assert(false && "error: singlylink insert failed for unknow reason!");
return
false;
}template
bool singlylinklist::delete(unsigned
int pos, elemtype* elem)
for(node* pcurrentnode = m_pheadnode; pcurrentnode != null; pcurrentnode = pcurrentnode->getnext())
}assert(false && "error: singlylink pos delete failed for unknow reason!");
return
false;
}template
unsigned
intconst& singlylinklist::getlength() const
template
bool singlylinklist::search(unsigned
int pos, elemtype* elem) const
for(node* pcurrentnode = m_pheadnode; pcurrentnode != null; pcurrentnode = pcurrentnode->getnext())
}return
false;
}template
bool singlylinklist::visit(elemtype* elem, const
unsigned
int& pos) const
return search(pos,elem);
}template
bool singlylinklist::empty()
#pragma once
namespace util
printf("%d ",tempelem);
}printf("\n");
}}
#include "util.h"
#include "singlylinklist.h"
#include
using
namespace
std;
typedef
int elemtype;
int main()
for (int i = 0; i != 2; i++)
return
0;}
3. 程式執行結果
testsinglylinklist is empty.printmemory:
insert:1
testsinglylinklist is not empty.
printmemory: 1
insert:2
testsinglylinklist is not empty.
printmemory: 1 2
insert:3
testsinglylinklist is not empty.
printmemory: 1 2 3
insert:4
testsinglylinklist is not empty.
printmemory: 1 2 3 4
insert:5
testsinglylinklist is not empty.
printmemory: 1 2 3 4 5
delete:1
testsinglylinklist is not empty.
printmemory: 2 3 4 5
delete:3
testsinglylinklist is not empty.
printmemory: 2 4 5
單鏈表演算法
遍歷 就是把單鏈表中的各個節點挨個拿出來,就叫遍歷 遍歷要點 不能遺漏,不能重複,追求效率 方法 從頭指標 頭節點 順著鍊錶掛接指標依次訪問鍊錶的各個節點,取出這個節點的資料,然後再往下乙個節點,知道最後乙個節點,結束返回 include include include 構建乙個鍊錶的節點 stru...
單鏈表演算法
設帶頭結點的非空單鏈表 l,設計乙個演算法刪除 l 中奇數序號 的結點,即刪除 l 中第 1 3 5 結點。應該是對的,唉,我也忘了 設計演算法刪除單鏈表奇數序號的節點 include include include define elemtype int typedef struct node l...
演算法 單鏈表之和
今天看到 待字閨中 的一道演算法題 兩個單鏈表,每乙個節點裡面乙個0 9的數字,輸入就相當於兩個大數了。然後返回這兩個數字的和 乙個新的list 這兩個輸入的list長度相等。要求 1 不用遞迴 2 要求演算法的時間和空間複雜度盡量低 分析 0 9之間的數相加,最大的進製是1,如果只要求遍歷兩個鍊錶...