連結串列的認識及連結串列元素的插入
連結串列的定義:
連結串列(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