1. 程式人生 > >用c++實現單向連結串列和雙向連結串列

用c++實現單向連結串列和雙向連結串列

連結串列是一種非常基礎的資料結構,本身也比較靈活,突破了陣列在一開始就要確定長度的限制,能夠做到隨時使用隨時分配記憶體。同時還有新增,刪除,查詢等功能。

總的來說,連結串列是由幾個模組構成的。
一,單向連結串列

//連結串列基本元素

struct Node
{
    int num;
    Node * next;
};

//建立節點

    Node * current=nullptr;
    Node * head=nullptr;//用以存放第一個節點,有了這麼一個首節點後就相當於有了一個基點
    Node * pre=nullptr;
    int n;
    while
(cin >> n, n != -1)//輸入-1時結束建立連結串列 { current = new Node; current->next = nullptr; current->num = n; if (head == nullptr) head = current; else pre->next = current; pre = current; }

//遍歷節點

    current = head;
    while
(current != nullptr) { cout << current->num << endl; current = current->next; }

//刪除節點

    current = head;
    while (current != nullptr)
    {
        Node * temp;//如果先釋放了current,那麼current將無法指向它的下一個節點
        temp = current;
        delete temp;
        current = current->next;
    }

二,雙向連結串列
雙向連結串列相對於單向連結串列來說更為靈活方便,且實現起來也不是很難,在單向連結串列的基礎上加上previous的指標就行了。
//基本元素

struct Node
{
int num;
Node * next;
Node * pre;
};

//具體實現

node * head=nullptr;
node * current=nullptr;
node * pre=nullptr;
while (cin >> n, n != -1)
{
current = new node;//先申請一塊記憶體用以存放新的節點
current->next = nullptr;
current->pre = nullptr;
current->num = n;
if (head == nullptr)
head = current;//指標本質也不過是一種變數而已
else
{
current->pre = pre;
pre->next = current;
}
pre = current;//這裡沒有寫成 current=current->next(之前就有犯了這種錯),否則之後申請了新的記憶體之後指向就發生錯誤了
}
current->next = head;
head->pre = current;
current = head->pre;
while (current != head)
{
cout << current->num << endl;
current = current->pre;
}

current = head;
//int count = 0;
while (current != nullptr)
{
node * temp;
temp = current;
current = current->next;
delete temp;
//cout << ++count << endl;
}

以上只是連結串列的基本實現,關於如何實現其他一些功能,我們以後再談。

相關推薦

c++實現單向連結串列雙向連結串列

連結串列是一種非常基礎的資料結構,本身也比較靈活,突破了陣列在一開始就要確定長度的限制,能夠做到隨時使用隨時分配記憶體。同時還有新增,刪除,查詢等功能。 總的來說,連結串列是由幾個模組構成的。 一,單向連結串列 //連結串列基本元素 struct Nod

結構與演算法(03):單向連結串列雙向連結串列

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent) # 一、連結串列

c#實現簡單的登入註冊功能

      這兩天c#大作業要求做一個簡單的通訊錄系統,我就先做了登入和註冊的功能,在網上看了一些程式碼,自己再做,終於做出來了。做的不是很美觀,但是可以簡單實現。    首先用sqlserver建表。我建了一個名為user_info的表,新增username和passdwo

資料結構(java)——單鏈表、雙端連結串列雙向連結串列

單鏈表    連結串列大家都很熟悉,連結串列是由若干個節點串起來的一個結構。類似於火車一樣,擁有一個頭結點(火車頭)之後掛著一個個的節點,每個節點後面跟上另一個節點。每個節點分為兩個域,一個數據域,用來存放這個節點的資料,一個是節點域,用來存放下一個節點。    所以對於單鏈

單鏈表,迴圈連結串列雙向連結串列

單鏈表:  一.單鏈表與順序表相比:   1.順序表可以方便的隨機存取表中的任一節點,速度快;但是在表中插入刪除一個數據時,為了保持其他元素的相對次序不變,平均需要移動一半的元素,效率很低;還有若事先對錶長估計不足,過小會形成記憶體浪費,過大則需要拷貝到一個更大的陣列,時間開

Python實現單向迴圈連結串列

直接看程式碼,有詳細註解 class Node(object): """節點""" def __init__(self, elem): self.elem = elem self.next = None class SingleCycl

翻轉單向雙向連結串列

分別實現反轉單向連結串列和雙向連結串列的函式。 連結串列長度為N,時間複雜度為O(N),額外空間複雜度為O(1) public class Code_07_ReverseList { public static class Node { public i

c++ 模版程式設計,構造迭代器雙向連結串列

#pragma once #include <iostream> #include <stdexcept> #include "func.h" // 連結串列 template <typename T>class li

C++ 實現單向連結串列

#include<iostream> #include<string> #include<stack> using namespace std; struct Node {int value;Node* Next; }; class List { private:

C# 演算法之連結串列雙向連結串列以及正向反向遍歷實現

1、簡介 連結串列是一種非常基礎的資料結構之一,我們在日常開發種都會接觸到或者是接觸到相同型別的連結串列資料結構.所以本文會使用C#演算法來實現一個簡單的連結串列資料結構,並實現其中幾個簡單的api以供使用.   2、概述 連結串列是一種遞迴的資料結構,他或者為null,或者是指向像一個節點

C++實現單向連結串列(1)

需要在你的主程式中新增#include "ListNode.cpp"ListNode.h#pragma once #include <iostream> using namespace std; template <typename T> clas

Python 實現單向連結串列

寫在前面 最近在看資料結構,看過才發現,只有這些東西才能讓我更加深刻的理解 python 中的資料型別。其實不管語言怎麼變化,資料結構和演算法是恆古不變的,這些東西學會,學一些別的語言會很快的。 我可能太菜了,一個連結串列看了好幾遍,手動捂臉,。 什麼是 連結串

c#實現文件的讀取系列操作

static filename ros ima git int lin {0} ase Gitee代碼鏈接:https://gitee.com/hyr5201314/workcount 1.解題思路 首先要先讀取文件,然後調用函數實現返回文件的字符數,行數,單詞總數。用

c++實現環形陣列的最大子陣列的

分析:對環形陣列確定首元素,從而變成一位陣列。因為有n個元素,所以有n種情況 如圖: 程式程式碼: #include<iostream> using namespace std; int max_sum1(int a[],int n) { int max_sum_h=a[0

劍指offer——二叉搜尋樹雙向連結串列

劍指offer題越往後感覺越不好做呀,本來是不會做,現在是難看懂了,乍一眼看這個題,二叉搜尋樹 ,先把樹給拆了,然後排個序,最後加個鏈。不過實現還是不太容易的。 class Solution: def Convert(self,pRootOfTree): if n

c++實現顏色空間rgb,grey,luvlab的互轉

1 rgb轉grey,rgb轉luv,rgb轉lab 1. 1 rgb轉grey     void RgbToGrey(unsigned char *rgb, double *grey) { double R = ((dou

單向連結串列雙向連結串列

單向連結串列 單向連結串列的特點是連結串列的連結方向是單向的,對連結串列的訪問要通過順序讀取從頭部開始;連結串列是使用指標進行構造的列表;又稱為結點列表,因為連結串列是由一個個結點組裝起來的;其中每個結點都有指標成員變數指向列表中的下一個結點; 列表是由結點構成,head指標指向第一個成

Lava連結串列雙向連結串列---介面實現

在Java中連標配的結點需要用類來封裝,下面的簡單的雙向連結串列實現: class Node { private Object data; private Node next; public Node(Object data) {

資料結構筆記之C++實現順序棧鏈式棧

這裡介紹兩種實現棧的方式:“順序棧”和“鏈式棧”,各有各的優缺點。 不管是“順序棧”還是“鏈式棧”,我們可以先定義一個棧的ADT(抽象資料型別),如下面的“stack.h” #ifndef STACK_H #define STACK_H const int

C++實現兩個已經排序的連結串列進行合併

//定義兩個同種單向連結串列,包含一個整數值和一個指向本節點的型別的指標,該連結串列中的資料都已經排好序 //編制程式,合併兩個連結串列 #include<iostream.h> #include<iomanip.h> struct Node {in