1. 程式人生 > >連結串列的認識及連結串列元素的插入

連結串列的認識及連結串列元素的插入

連結串列的定義:

連結串列(Linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每一個節點裡存到下一個節點的指標(Pointer)。

因為連結串列不用必須按順序進行儲存,因此可以對連結串列進行增、刪、改、查等操作,下面先介紹連結串列的幾個插入的例子:

1.連結串列的插入:

連結串列的插入可以分為頭插和尾插和按位置插入,顧名思義就是從頭插入元素和從尾部插入元素還有從某一位置插入;

頭插法:

申請一個新節點,讓頭結點的指標域指向新節點的資料域,新節點的指標域儲存第一個元素的地址,則插入成功;

參考程式碼如下:

bool InsertHead(PLink phead, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }              //判斷連結串列是否為空

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }            //申請新節點

    pnewnode->pnext = phead->pnext;
    phead->pnext = pnewnode;     //新節點插入
    return true;
}

尾插法:

先從頭開始遍歷,找到連結串列的尾結點,尾結點的指標域儲存新節點的地址,則元素插入成功 ;

參考程式碼如下:

bool InsertTail(PLink phead, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }         //判斷連結串列是否為空

    PLink pCur = phead;
    while (pCur->pnext != NULL)
    {
        pCur = pCur->pnext;
    }          // 遍歷整個連結串列,找到到尾結點

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }                 //申請新節點

    pCur->pnext = pnewnode;   // 插入新節點
    return true;
}

按位置插入:

元素插入步驟:

1.判斷結構是否合理;

2.判斷插入位置是否合理;

3.查詢要插入位置的前置結點

4.插入

       先遍歷連結串列,找到要插入元素的位置,將申請的新節點進行插入,遍歷時應先找到插入位置的前一個結點,讓其指標域儲存新節點的地址,再讓新節點的指標域指向下一個元素的地址,則插入成功;

  參考程式碼如下:

bool InsertPos(PLink phead, int pos, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }                  // 判斷結構是否合理

    if (pos  < 0 || pos > GetLength(phead))
    {
        return false;
    }                 // 判斷插入位置是否合理

    PLink pfront = phead;
    for (int i = 0; i < pos; ++i)
    {
        pfront = pfront->pnext;
    }               //查詢要插入位置的前置結點

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }
    pnewnode->pnext = pfront->pnext;
    pfront->pnext = pnewnode;  //插入
    return true;
}
 

相關推薦

連結串列認識連結串列元素插入

連結串列的定義: 連結串列(Linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每一個節點裡存到下一個節點的指標(Pointer)。 因為連結串列不用必須按順序進行儲存,因此可以對連結串列進行增、刪、改、查等操作,下面

c++ -- map的insert[]兩種元素插入方式比較

首先需要明確的是:map中不允許存在相同的key  對於c++中map容器,可以使用insert或者[]操作插入元素,這兩個方式有什麼區別了?下面分別從功能,效率,安全性等方面進行分析 1 insert方式 Because element keys in a map a

單鏈表(線性連結串列)資料元素插入和刪除

資料元素的插入:為插入資料元素x,首先要生成一個數據域為x的結點,然後插入在單鏈表中,根據插入操作的邏輯定義,還需要修改結點a中的指標域,令其指向節點x,而結點x中的指標域應指向結點b,從而實現3個元素a,b和x之間邏輯關係的變化。 資料元素的刪除:線上性

資料結構連結串列題目1:查詢、插入、刪除基本操作 解析

1.連結串列的查詢插入刪除 有問題的程式碼: #include<iostream> #define ok 0 #define error -1 using namespace std; class ListNode { public: int data; ListNode

單鏈表的基本操作連結串列面試題

單鏈表的基本操作及連結串列面試題 程式程式碼如下: LinkList.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include <stdio.h> #include <stdlib.

演算法題007 -- [對給定的排好序的連結串列,刪除重複的元素,只留下出現一次的元素] by java

對給定的排好序的連結串列,刪除重複的元素,只留下出現一次的元素 舉例: 1->1->2, return 1->2. 1->1->2->3->3, return 1->2->3. 程式碼 package algori

順序表連結串列

順序表——將表中元素一個接一個的存入一組連續的儲存單元中,這種儲存結構是順序結構。 利用陣列單元的物理位置上的 優點:儲存空間連續,允許元素隨機訪問;缺點:長度固定,在分配記憶體之前要先確定好陣列長度,致使可能造成空間浪費;   單鏈表——用一組任意的儲存單元存放線性表的元素,只包

【資料結構與演算法01】- 陣列、連結串列對比應用

1. 陣列和連結串列的區別 1.1 底層儲存結構 陣列需要一塊連續的記憶體空間進行儲存 連結串列通過“指標”將一組零散的記憶體塊串聯起來使用 1.2 效能 連結串列和陣列的(增刪查)時間複雜度正好相反 陣列使用連續的記憶體空間,可以藉助快取機制提高效率

C寫連結串列與線性表的建立插入與刪除

連結串列 #include <bits/stdc++.h> typedef struct node { int data; struct node *next; } Lnode; Lnode *L; void dele(int pos){ Lnode *p;

連結串列的建立、查詢、插入、刪除

#include<iostream> #include<algorithm> #include<stdio.h> #include<malloc.h> #include<stack> using namespace

矩陣加法(基於十字連結串列C語言程式碼實現

矩陣之間能夠進行加法運算的前提條件是:各矩陣的行數和列數必須相等。 在行數和列數都相等的情況下,矩陣相加的結果就是矩陣中對應位置的值相加所組成的矩陣,例如: 圖1 矩陣相加 十字連結串列法 之前所介紹的都是採用順序儲存結構儲存三元組,在類似於矩陣的加法運算中,矩陣中的資料元素變化較大(這裡的變化主

C++ 單鏈表基本操作分析與實現 連結串列   連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結

連結串列   連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。 相比於線性表

C++ 連結串列的基本操作:頭插入、尾插入、遍歷、判斷連結串列是否為空、清空、求長度、插入、刪除、逆置連結串列和排序

// // main.cpp // List: // 連結串列的操作: // 1.頭插入 // 2.尾插入建立連結串列; // 3.遍歷連結串列; // 4.連結串列是否為空 // 5.清空連結串列 // 6.求連結串列的長度 // 7.

C++ 連結串列常用函式實現

#include<iostream> using namespace std; typedef struct Node { int data; struct Node* next; }Node; typedef struct Stack { Node* to

連結串列C++ | 實現頭部、尾部插入資料_1

頭部插入 #include<iostream> struct ListNode{ int m_nValue; ListNode* m_pNext; }; void AddToTop(ListNode** pHead, int Value) { ListNo

佇列 佇列的陣列實現連結串列實現

#include<iostream> #include<stdlib.h> using namespace std; typedef struct Node {int value;struct Node *next; }node,*link; link front=NULL,rear=

2順序表連結串列基本運算實現

實驗目的 深入掌握線性表的兩種儲存方法,即順序表和連結串列。體會這兩種儲存結構之間的差異。 實驗內容 1. 編寫一個程式exp2-1.cpp,實現順序表的各種運算(假設順序表的元素型別為char) 並在此基礎上完成如下功能: (1)初始化順序表L; (2)採用尾插法依次插入

C語言-動態連結串列的建立遍歷與插入

#include<stdio.h> #include<stdlib.h> #include<string.h> #define P printf typedef struct num {int id;struct num *next; }

淺談連結串列 棧 佇列 連結串列的逆序輸出應用

連結串列就是有n各結點連結形成一個表,所謂結點就是包含了本身的資料元素,和一個指示直接後繼的儲存位置,即結點包含兩個部分(資料域  指標域)。但是連結串列的存取必須是從頭指標開始進行的,頭指標指向第一個結點的儲存位置,用head 表示,但head只是指向了頭結點,本身不是一

malloc的連結串列,建立連結串列,遍歷連結串列插入節點,刪除節點

#include <iostream> #include <malloc.h> #include <stdlib.h> using namespace std; //節點 typedef struct Node { int d