演算法導論 單鏈表

2021-07-05 08:52:29 字數 3192 閱讀 8340

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,如果只要求遍歷兩個鍊錶...