1. 程式人生 > >c++單項鍊表原始碼

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%