資料結構之單鏈表的基本實現

2021-08-09 01:53:39 字數 1986 閱讀 1600

在資料結構的學習中,鍊錶可以說是我們最早接觸到的一種資料結構了(字串和陣列除外),在各大資料結構及演算法書中,如clrs,或者是清華大學版資料結構中,鍊錶也是最早介紹的一種資料結構。它實現起來比較簡單,同時能實現一些我們平時用陣列難以實現的功能,很適合我們入手資料結構。下面我們簡單來看看鍊錶中最簡單的一種,單鏈表的結構及其實現。

鍊錶是一種線性的資料結構,它由結點構成,每個結點由資料域和指標域組成。其中,除了頭結點外和尾結點外,每個結點都有乙個前驅及後繼。其中結點的資料域儲存資料,指標則指向後繼結點。如圖所示

鍊錶相對於陣列,它的有點在於能夠快速地增加或者刪除元素,只需要改變指標指向,無需移動元素。其增加元素刪除元素的時間複雜度是o(1),而陣列的時間複雜度為o(n)。另外,鍊錶相比之於陣列其劣勢在於無法隨機訪問元素,若要訪問鍊錶中的某一位置的元素,必須從表頭開始遍歷,時間複雜度為o(n),相比之下陣列可以通過下標直接索引,時間複雜度僅為o(n)。另外,由於每個鍊錶結點中,既儲存了資料,又儲存了指標,所以鍊錶的儲存密度小於1。(儲存密度 = (結點資料本身所佔的儲存量)/(結點結構所佔的儲存總量))

下面是簡單的單鏈表的c++源**實現:

首先是linklist.h的標頭檔案,其定義了鍊錶支援的方法。

using namespace std;

struct listnode

};class list

;

接下來是cpp檔案,是鍊錶方法的實現:

// list_1.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "linklist.h"

#include

using

namespace

std;

//鍊錶建構函式

list::list()

//鍊錶的析構函式,遍歷鍊錶並且刪除每個結點

list::~list()

}}//返回鍊錶長度

int list::length()

//判斷鍊錶是否為空

bool list::empty()

//鍊錶末尾插入。

void list::push_back(int val)

++len;

}void list::display()

cout

<< endl;

delete p;

}//在第pos位插入乙個新的元素

void list::insert(int val, int pos)

//若在鍊錶頭部插入,則需要更改頭結點

else

if (pos == 1)

listnode *p = head;

for (int i = 0; i < pos - 2; ++i)

p = p->next;

listnode *s = new listnode(val);

s->next = p->next;

p->next = s;

++len;

}//判斷乙個元素是否在鍊錶內

bool list::search(int val)

delete p;

return

false;

}//刪除pos位的元素

void list::erase(int pos)

//若在頂端刪除,則需要更改頭結點

else

if (pos == 1)

//鍊錶中間刪除

listnode *p = head;

for (int i = 0; i < pos - 2; ++i)

p = p->next;

listnode *s = p->next;

p->next = s -> next;

delete s;

--len;

}int _tmain(int argc, _tchar* argv)

資料結構之單鏈表實現

用兩個月的時間好好把資料結構複習一遍,都算不上覆習了,最後的圖的方面完全是新學,希望能堅持下去。一 單鏈表 煉表相比較於陣列更為靈活,儲存方式是鏈式的,插入刪除操作優於陣列,但是查詢操作優於陣列。還是不多介紹了直接上 吧。參考資料結構與演算法分析 c語言版本 標頭檔案 ifndef list h d...

《資料結構》單鏈表基本操作實現

define ok 1 define error 1 typedef int elemtype typedef int status typedef struct node lnode,linklist 構造空表 status initlist linklist l void creatlist l...

單鏈表基本操作的實現(資料結構)

建立具有10個元素的單鏈表,並能對該錶進行查詢 插入 刪除等基本操作 cpp檔案字尾名 include include typedef int elemtype typedef struct lnode linknode 單鏈表結點型別linknode 尾插法建立單鏈表 從一空表開始依次讀取陣列a中...