c++單項鍊表原始碼
c++單向連結串列原始碼
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
/******************************************************************************************
* 日期:2016-08-07
* 作者:忠義乾坤
* 描述:
* 1. 單向連結串列
* 2. 可在連結串列【頭】和【尾】刪除結點
* 3. 僅能在連結串列【尾】新增新結點
* 4. 採用類模板,可自定義資料型別
* 說明:該程式碼放在linlist.h標頭檔案中,在原始檔中直接包含include"linklist.h"即可
********************************************************************************************/
//*******************************************************************************
// 類 名:ListNode
// 功能描述:建立一個結點類
//*******************************************************************************
template<class DataType>
class LinkList; //宣告類LinkList,使其可以作為LinkNode的友元類
template<typename DataType> //模板類宣告
class ListNode
{
friend class LinkList<DataType>; //新增LinkList為友元類,使類LinkList能訪問ListNode
//(若不宣告友元類,則將ListNode的資料改為public:)
public:
//*****************************有引數時LinkNode的建構函式****************************
ListNode(const DataType &tempData)
{
data = tempData;
nextPtr = NULL;
}
//*******************************解構函式,使節節點指標清零*****************************
~ListNode(void) //LinkNode的解構函式
{
nextPtr = NULL;
}
// ********************************** 獲取節點內的資料*********************************
DataType getData()const //獲取節點內的資料
{
return data;
}
// ************************************ 獲取指標域 *************************************
ListNode<DataType>* getNextPtr()const //獲取指標域
{
return nextPtr;
}
private:
ListNode<DataType> *nextPtr; //指向下一個節點的指標
DataType data; //節點中的資料
};
//*******************************************************************************
// 類 名:LinkList
// 功能描述:建立一個連結串列類
//*******************************************************************************
template <typename DataType>
class LinkList
{
public:
//****************************【建構函式,清零頭結點】**************************************
LinkList(void)
{
head = NULL; //初始化頭結點
length = 0;
}
//*****************************【解構函式,清空連結串列,釋放記憶體】****************************
~LinkList(void)
{
cleanAll();
}
//******************************【判斷連結串列是否為空】****************************************
bool isEmpty(void)
{
if(head==NULL) //頭結點為空表明連結串列是空連結串列
return true;
else
return false;
}
//******************************【向連結串列尾插入一個結點】************************************
void insertAtBack(const DataType &newData)//插入節點
{
//開闢一個結點類記憶體空間,用於連結串列的插入
ListNode<DataType> * newPtr = new ListNode<DataType>(newData);
ListNode<DataType> * tempPtr ;//遊標指標
length++; //連結串列長度加1
if(isEmpty() == true) //如果連結串列為空,數放在頭結點
{
head = newPtr;
}
else //資料放在最後一個結點的nextPtr
{
tempPtr = head;
while(tempPtr->nextPtr != NULL)
{
tempPtr = tempPtr->nextPtr;
}
tempPtr->nextPtr = newPtr;
}
}
//******************************【刪除連結串列頭結點節點】**************************************
bool removeFromFront()
{
ListNode<DataType> *tempPtr; //遊標指標
if(isEmpty() == true)
{
cout<<"刪除失敗,原因:連結串列為空"<<endl;
return false;
}
else
{
tempPtr = head;
head = head->nextPtr;
delete tempPtr;
length--; //連結串列長度減1
return true;
}
}
//******************************【刪除連結串列尾結點節點】**************************************
bool removeFromBack()
{
ListNode<DataType> *tempPtr; // 遊標指標
if(isEmpty()==true)
{
cout<<"刪除失敗,原因:連結串列為空!"<<endl;
return false;
}
else
{
tempPtr = head;
if(tempPtr->nextPtr == NULL)
{
delete tempPtr;
head = NULL;
}
else
{
while(tempPtr->nextPtr->nextPtr != NULL)
{
tempPtr =tempPtr->nextPtr;
}
delete tempPtr->nextPtr->nextPtr;
tempPtr->nextPtr =NULL;
}
length --; //連結串列長度減1
return true;
}
}
//******************************【清空連結串列釋放記憶體空間】************************************
void cleanAll(void)
{
ListNode<DataType> *tempPtr; //遊標指標
length = 0;
if(isEmpty() == true)
return ;
else
{
while(head->nextPtr!=NULL)
{
tempPtr = head;
head = head->nextPtr;
delete tempPtr ;
}
head = NULL;
}
}
//******************************【列印連結串列】僅支援內建資料型別******************************
void print(void)
{
ListNode<DataType> *tempPtr;
tempPtr = head;
while(tempPtr !=NULL)
{
cout<<tempPtr->data<<"\t"<<tempPtr<<endl;//輸出連結串列的資料和地址,方便測試
tempPtr = tempPtr->nextPtr;
}
}
//*******************************【返回連結串列長度】*******************************************
int getLength() const
{
return length;
}
private:
ListNode<DataType> *head; //頭節點
int length; //連結串列長度
};
#endif
相關推薦
c++單項鍊表原始碼
c++單向連結串列原始碼 #ifndef _LINKLIST_H_ #define _LINKLIST_H_ /**********************************************************************
關於c語言單項鍊表尾新增
猶豫了幾天,看了很多大牛寫的關於c語言連結串列,感觸很多,終於下定決心,把自己對於連結串列的理解隨之附上,可用與否,自行裁奪。由於作者水平有限也是第一次寫,不足之處,竭誠希望得到各位大神的批評指正。製作不易,不喜勿噴,謝謝!!! 在正文開始之前,我先對陣列和連結串列進行簡單的對比分析。 連結串列也
Java實現兩個有序的單項鍊表的合併
無意中看到一道題,如下: 現有兩個有序(升序)的單向連結串列,請編寫程式將這兩個連結串列合併成一個,並確保合併後的連結串列也是升序的 單向升序連結串列定義: public class ListNode { int val; ListNode next;
單項鍊表操作
using namespace std; struct ListNode{ int dat; ListNode* next; }; ListNode * head = NULL; ListNode * createNode(void) { ListNode * newNode
CPP單項鍊表插入資料初試
//vs2015_unit #include #include using namespace std; int Flag=0; typedef int DATA; struct SNode { DATA data; SNode* pNext; }; class CLink { SNod
連結串列與單項鍊表
單向連結串列 單向連結串列也叫單鏈表,是連結串列中最簡單的一種形式,它的每個節點包含兩個域,一個資訊域(元素域)和一個連結域。這個連結指向連結串列中的下一個節點,而最後一個節點的連結域則指向一個空值。 表元素域elem用來存放具體的資料。 連結域next用來存放下一個節
C++ 單管道《單管道原始碼》
1、執行效果 2、單管道標頭檔案 enum PipeType { UnKnowPipe,
C# 新增Excel表單控制元件(Form Controls)
在Excel中,新增的控制元件可以和單元格關聯,我們可以操作控制元件來修改單元格的內容,在下面的文章中,將介紹在Excel中新增幾種不同的表單控制元件的方法,包括: 新增文字框(Textbox) 單選按鈕(Radio button) 複選框(Checkbox
卜若的程式碼筆記系列-Web系列-SpringBoot-第九章:使用c#上傳表單-3209
1.首先,c#向web服務上傳資料其實是通過一個 HttpWebRequest物件,這個物件不是通過new出來的,是通過建立url連線產生的物件,我們可以這樣 HttpWebRequest request = WebRequest.Create(url) as HttpW
【C++】c++單繼承、多繼承、菱形繼承記憶體佈局(虛擬函式表結構)
單繼承:只有一個基類和一個派生類 class Base { public: virtual void fun1() { cout << "Base::func1()" << endl;
c++單繼承、多繼承、菱形繼承的記憶體佈局(虛擬函式表結構)
單繼承:只有一個基類和一個派生類 class Base { public: virtual void fun1() { cout << "Base::func1()" << endl; } vir
C語言CGI程式--POST表單/GET表單處理
#include <stdio.h> #include <stdlib.h> #define MAXLEN 80 #define EXTRA 5 /* 4個位元組給欄位"data", 1個位元組留給"=" */ #define MAXINPUT MAXLEN+EXTRA+
c++單繼承、多繼承、菱形繼承記憶體佈局(虛擬函式表結構)
單繼承:只有一個基類和一個派生類 class Base { public: virtual void fun1() { cout << "Base::func1()" << endl; } vir
C++單繼承、多繼承情況下的虛擬函式表分析
C++的三大特性之一的多型是基於虛擬函式實現的,而大部分編譯器是採用虛擬函式表來實現虛擬函式,虛擬函式表(VTAB)存在於可執行檔案的只讀資料段中,指向VTAB的虛表指標(VPTR)是包含在類的每一個例項當中。當使用引用或指標呼叫虛擬函式時,首先通過VPTR找到VTAB,然後通過偏移量找到虛擬函式地址並呼叫。
c語言-單鏈表(一)
printf blog 定義 單鏈表 mage 操作 img 生成 return 定義節點: typedef struct Node { int data; Node* pNext; }NODE, *PNODE; 細節說明,PNode 就代表str
C#單例模式的多種寫法
code if語句 規則 最簡 lock 實現 readonly led 三種 它的主要特點不是根據客戶程序調用生成一個新的實例,而是控制某個類型的實例數量-唯一一個。(《設計模式-基於C#的工程化實現及擴展》,王翔)。也就是說,單例模式就是保證在整個應用程序的生命周期中,
Swift、Objective-C 單例模式 (Singleton)
app 賦值 uil imp ide 效果 func instance 發現 本文的單例模式分為嚴格單例模式和不嚴格單例模式。單例模式要求一個類有一個實例,有公開接口可以訪問這個實例。嚴格單例模式,要求一個類只有一個實例;不嚴格單例模式,可以創建多個實例。 有的類只能有一個
C++:順序表類實現約瑟夫問題_密碼不同
class josephus main clu 定義 void seq esp while //.h #pragma once#include <iostream>using namespace std;#define MAXSIZE 100 template
C#單例模式的三種寫法
lock help static gin -a ont singleton pub ria 第一種…… public class Singleton { private static Singleton _instance = null;
06-圖1 列出連通集 25分C語言鄰接表實現
aop iba mdx cab hid ctr and shang tel %E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E8%99%9A%E6%8B%9F%E6%9C%BA5---%E5%AD%97%E8%8A%82%E7%A0%81%