前幾天找實習的時候,乙個面試官給我留了乙個題,做乙個鍊錶demo,要求實現建立、插入、刪除等操作。
鍊錶是一種常見的資料結構,它是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。
我是用c++**來寫的。首先,定義乙個linklist.h檔案,該檔案定義了鍊錶的結點和鍊錶支援的方法。如下所示:
[cpp]view plain
copy
定義鍊錶結點和方法。
#include
using
namespace
std;
struct
info
; //鍊錶定義
struct
node
};
class
linklist
; 然後,定義乙個linklist.cpp檔案,是鍊錶方法的實現。如下所示:
[cpp]view plain
copy
鍊錶方法的實現。
#include "stdafx.h"
#include
#include "linklist.h"
using
namespace
std;
//建構函式
linklist::linklist()
//析構函式
linklist::~linklist()
} //得到鍊錶長度
intlinklist::length()
//在鍊錶頭部插入結點
void
linklist::inserthead(info val)
//插入結點
void
linklist::insert(info val,
intpos)
intindex = 1;
node *temp = head;
node *node = new
node(val);
if(pos == 0)
while
(temp!=null && index
if(temp == null)
node->next = temp->next;
temp->next = node;
length++;
} //刪除結點
void
linklist::remove(info val)
if(pos == 1)
intindex = 2;
node *temp = head;
while
(index < pos)
temp = temp->next;
temp->next = temp->next->next;
length--;
} //查詢結點位置
intlinklist::find(info val)
return
-1;
//不存在返回-1
} //鍊錶反序
void
linklist::reverse()
head->next=null;
head=curnode;
} //列印鍊錶
void
linklist::print()
node *temp = head;
while
(temp!=null)
cout<}
最後,定義乙個main.cpp,用來測試鍊錶功能,如下所示:
[cpp]view plain
copy
// main.cpp : 測試鍊錶功能。
#include "stdafx.h"
#include
#include
#include "linklist.h"
using
namespace
std;
int_tmain(
intargc, _tchar* argv)
測試結果如下圖:
c 實現單向鍊錶基本操作
最近又開始了資料結構的學習,去年下半年也學過一段時間,沒能堅持下去,希望這次能堅持久一點,把基礎的資料結構都能掌握 這是我最近對單向鍊錶的一些學習情況 我先是聽mooc的浙大資料結構的課程,在頭腦裡建立起資料結構的形象和特徵,這種方法不一定很好,只是目前我對資料結構的一種學習方法 在看完一種資料結構...
鍊錶基本操作實現 c語言
include include typedef int elemtype typedef struct node linklist,linknode 鍊錶初始化 linklist initlinklist head next null printf 鍊錶初始化成功 n return head 頭插法...
鍊錶的基本操作(c 實現)
跟c語言不同點 1.結點建立方法與釋放方法 2.c 類 加入了建構函式和析構函式 3.每個函式有略微改動 c語言版 keep on going never give up author vinegar tree lang c blog date 2020 10 4 19 32 pragma gcc ...