1. 程式人生 > >單鏈表(線性連結串列)資料元素插入和刪除

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

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

資料元素的刪除:線上性表中刪除元素b時,為在單鏈表中實現元素a,b和c之間邏輯關係的變化,僅需要修改結點a中的指標域即可。下面演算法分別為ListInsert和ListDelete在單鏈表中的實現

Status ListInsert_L(LinkList &L,int i,ElemType e){
   //在帶頭結點的單鏈線性表L中第i個位置之前插入元素e
p=L;j=0; while(p&&j<i-1){p=p->nest;++j;} //尋找第i-1個結點 if(!p||j>i-1)return ERROR; //i小於1或者大於表長加1 s=(LinkList)malloc(sizeof(LNode)); //生成新結點 s->data=e;s->next=p->next; //插入L中 p->next=s; return OK; }//ListInsert_L Status ListDelete_L(LinkList &L,int i,ElemType &
e){ //在帶頭結點的單鏈線性表L中,刪除第i個結點,並由e返回其值 p=L;j=0; while(p->next&&j<i-1){ //尋找第i個節點,並令p指向其前驅 p=p->next; ++j; } if(1(p->next)||j>i-1)return ERROR; //刪除位置不合理 q=p->next;p->next=q->next; //刪除並釋放結點 e=q->data; free(q); return OK; }//listDelete_L
//建立線性表的鏈式儲存的過程就是一個動態生成連結串列的過程。即從“空表”的初始狀態起,依次建立各元素結點,並逐個插入連結串列。 //以下演算法為一個從表尾到表頭逆向建立單鏈表的演算法,其時間複雜度為O(n)

void CreateList_L(LinkList &L,int n){
//逆位序輸入n個元素的值,建立帶表頭結點的單鏈線性表L。
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //先建立一個帶頭結點的單鏈表
for(i=n;i>0;–i){
p=(LinkList)malloc(sizeof(LNode)); //生成新結點
scanf(&p->data); //輸入元素值
p->next=L->next;L->next=p; //插入到表頭
}
}//CreateList_L

相關推薦

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

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

Leetcode之合併有序單鏈簡單 連結串列 遞迴

合併兩個已排序的連結列表並將其作為新列表返回。新列表應該通過拼接前兩個列表的節點來完成。 例: 輸入: 1-> 2-> 4,1-> 3-> 4 輸出: 1-> 1-> 2-> 3-> 4-> 4 直接遞迴實現,程式碼來了 /**

購物動態連結串列+鬧鐘提醒多執行緒

基本連結串列的應用 增 刪 查 找 排 模糊查詢 核心程式碼如下: #include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> #incl

資料結構作業程式碼儲存-2.1 單向迴圈連結串列的建立,插入刪除指標移動

在此感謝我親愛的大神同學們!一個Z妹子講情了思路,一個M妹子提供了更高階的雙向迴圈連結串列的程式碼借鑑(雖然有些還是沒怎麼看懂。。。 我的作業就完成啦!儲存程式碼當個紀念! 1,往操作位置順時針的下一位插入一個元素,並將操作位置移到新元素上。 2,刪掉操作位置順時針方

資料結構——線性 順序單鏈、靜態連結串列、迴圈連結串列、雙向連結串列

提示:以下內容不適合零基礎人員,僅供筆者複習之用。 一、線性結構的基本特徵: 1.集合中必存在唯一的一個“第一元素”; 2.集合中必存在唯一的一個 “最後元素”; 3.除最後元素在外,均有 唯一的後繼; 4.除第一元素之外,均有 唯一的前驅。 如:j

資料結構之線性順序單鏈,迴圈連結串列,雙向連結串列-- 圖書管理系統

順序表 #include <iostream> #include <cstring> #include <cstdlib>///exit()標頭檔案exit(0):正常執行程式並退出程式。exit(1):非正常執行導致退出程式 #incl

【 C# 資料結構】 -------------------------- 泛型帶頭節點的單鏈,雙向連結串列實現

在程式設計領域,資料結構與演算法向來都是提升程式設計能力的重點。而一般常見的資料結構是連結串列,棧,佇列,樹等。事實上C#也已經封裝好了這些資料結構,在標頭檔案 System.Collections.Generic 中,直接建立並呼叫其成員方法就行。不過我們學習當然要知其然,亦知其所以然。 本文實現的是連結

線性陣列、單鏈、靜態連結串列、迴圈連結串列、雙向連結串列

線性表的定義 線性表(List):零個或多個數據元素的有限序列。 有幾個地方需要強調: 首先它是一個序列,也就是說元素之間是有順序的,若元素存在多個,則第一個元素無前驅,最後一個元素無後繼,其他每個元素都有且只有一個前驅和後繼。 然後線性表強調的是有限的。 最

資料結構單鏈之建立連結串列尾插法

接上一篇內容,這次使用尾插法來建立單鏈表: 1.同樣建立連結串列成員結構體: struct listnode { int value; listnode* next; }; 2.然後下面就是通過尾插法建立單鏈表的程式,這裡面稍稍要去理解

資料結構與演算法』連結串列單鏈、雙鏈、環形連結串列

> 微信搜尋:碼農StayUp > 主頁地址:[https://gozhuyinglong.github.io](https://gozhuyinglong.github.io/) > 原始碼分享:[https://github.com/gozhuyinglong/blog-demos](h

資料結構與演算法——線性錶鏈式儲存單迴圈連結串列

今天總結迴圈單鏈表 什麼是單迴圈連結串列? 單鏈表終端結點的指標域是指向空的,如果將其指向頭結點,這樣就形成了一個環,那麼這種首尾相接的環就夠成了單迴圈連結串列. 單鏈表中我們都是用頭指標來表示的,但是在單迴圈連結串列裡,用尾指標(指向最後一個節點)。為什麼要這樣,因為如果

單鏈,迴圈連結串列,雙鏈及其基本操作C++實現

    最近在學習嚴蔚敏教授的《資料結構》,有一些感想,在這裡寫下來,留做筆記,希望能對以後學習有所幫助。     我們知道,線性表就是n個數據元素的有限序列,它有兩種實現方式,其一為順序表,即陣列+偽指標的方式實現,另一為連結串列,採用的是指標的方式實現。由於順序表的知識

資料結構——約瑟夫環迴圈連結串列

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:

資料結構學習筆記Day2-單鏈用java實現

一、首先說一下線性表 1. 什麼是線性表,線性表的邏輯特性? 1)有一個頭(表頭),有一個尾(表尾) 2)表頭與表尾之間的元素有且只有一個前驅元素,有且只有一個後繼元素 2.線性表有兩種儲存方式? 順序表和連結串列 3.順序表和連結串列的區別? 1)順序表是一邊

【python資料結構與演算法】連結串列——連結串列中環的入口節點、兩個連結串列的第一個公共節點相交連結串列

如題,這類問題在LeetCode上和劍指offer上總共有這些涉及: LeetCode:141,142,160 劍指offer:兩個連結串列的第一個公共節點(預設是無環單鏈表)、連結串列中環的入口節點 補充:兩個未知是否有環的單鏈表第一個公共節點 我直接敘述第三個問題,

C語言資料結構----連結串列靜態連結串列

看了老唐的靜態連結串列,越發的覺得自己是菜鳥了,因為看的過程實在是太糾結了。下面就把自己看老唐靜態連結串列的內容寫下來。 一、靜態連結串列的基礎知識 1.單鏈表的缺陷:單鏈表的實現嚴重依賴指標,每一個數據元素都要有額外的指標域。 2.在靜態表中我們把資料元素放在一個數組裡,

C語言單鏈線性的鏈式儲存實現程式碼

linklist.h  //標頭檔案:資料 及 函式的宣告#ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include <stdio.h> #include <stdlib.h> typedef in

資料結構】順序單鏈、迴圈連結串列插入刪除

寫在前面的 順序表 插入 刪除 定位 單鏈表 插入 刪除 總結 寫在前面的        在複習資料結構的過程中對於連結串列的操作總是容易忘記,時不時的就不知道具體的該怎麼

線性錶鏈式儲存靜態連結串列及其12種操作的實現

該表格中的所有複雜度均指的是當前程式中演算法的複雜度,同一個操作演算法不同複雜度不同。 對於空間複雜度:沒有程式的空間複雜度為0,任何程式的執行必須要空間。當所需的空間是常數的,就是O(1);是線性的,就是O(n),以此類推。 操作 時間複雜度(T(n)) 空間複

Polynomial 一元多項式的表示及相加 線性連結串列實現 嚴蔚敏版

1、貼程式碼: #include <iostream> #include <cstdio> using namespace std; struct Node { double coef; int expn; Node *next; }; v