【資料結構】雙向非迴圈連結串列
#include <iostream> using namespace std; struct doubleNode { int data; doubleNode *next; doubleNode *prior; }; typedef doubleNode* LinkList; void init(LinkList *List); bool insert(LinkList *List, int location, int data); void show_position(LinkList List); void show_reverse(LinkList List); bool Delete(LinkList *List, int location); int main() { LinkList List; init(&List); for (int i = 1; i <= 10; i++) { insert(&List, i, i * 10); } Delete( &List,11); show_position(List); show_reverse(List); system("pause"); return 0; } void init(LinkList *List) { LinkList s = (LinkList)malloc(sizeof(doubleNode)); s->data = -1; s->next = 0; s->prior = 0; *List = s; } bool insert(LinkList *List,int location,int data) { int j = 1; LinkList p = *List; if (location < 1) { cout << "erro" << endl; return false; } while (j < location&&p != NULL) { j++; p = p->next; } if (p == NULL) { cout << "insert erro" << endl; return false; } LinkList s = (LinkList)malloc(sizeof(doubleNode)); s->data = data; s->prior = p; s->next = p->next; if (p->next)//非迴圈雙向連結串列,在表尾插入節點時,不進行改操作。原因是空指標。 { s->next->prior = s; } p->next = s; return true; } // void show_position(LinkList List) { List = List->next; cout << "position direction display: "; while (List) { cout << List->data << " "; List = List->next; } cout << endl; } void show_reverse(LinkList List) { while (List->next) { List = List->next; } cout << "reverse direction display: "; while (List->prior) { cout << List->data << " "; List = List->prior; } cout << endl; } bool Delete(LinkList *List, int location) { int j = 1; LinkList p = *List; if (location < 1) { cout << "delete erro" << endl; return false; } while (j < location&&p->next != NULL) { p = p->next; j++; } if (p->next == NULL) { cout << "delete erro" << endl; return false; } p = p->next;//待刪除指標 p->prior->next = p->next; if (p->next)//如果不是刪除尾節點 { p->next->prior = p->prior; } free(p); return true; }
插入操作:需要注意的是,如果是要在尾節點插入,不需要s->next->piror=s這一步,因為s->next為空。
刪除操作:需要注意的是,如果是刪除最後一個節點,不需要
p->next->prior = p->prior;
因為p->next是空指標
相關推薦
【資料結構】雙向非迴圈連結串列
#include <iostream> using namespace std; struct doubleNode { int data; doubleNode *next; doubleNode *prior; }; typedef doubleNod
【資料結構】28、判斷連結串列是否有環
因為最近小米電話面試被問到如何判斷一個連結串列是否有環,那今天正好實現以下這個演算法 1.連結串列 package y2019.Algorithm.LinkedList; /** * @ProjectName: cutter-point * @Package: y2019
【資料結構】雙向帶頭結點迴圈連結串列
在之前我們寫了不帶頭結點的單鏈表,但它在資料操作時也有繁瑣之處,而雙向帶頭結點迴圈連結串列則優化了單鏈表的操作,使連結串列更加方便。雙向帶頭結點迴圈連結串列在單鏈表的基礎上增加了以下幾點: (1)在資料結構上附加一個域,使它存放指向前一個結點的指標; (2)增加了一個頭結點,前驅指向連結串列
【資料結構】雙向連結串列的實現
文章目錄 LinkList.h LinkLish.c LinkList.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include <stdio.h>
資料結構--雙向非迴圈連結串列
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; typedef struct node { int id; struct
【C/C++】【資料結構】雙向連結串列操作
目錄 標頭檔案定義 測試檔案 雙向連結串列操作 像雙向連結串列的求長,判空,遍歷,查詢,檢索,之類的操作都和單鏈表一樣的。不過我還是在了文中。 標頭檔案定義 #ifndef _DOUBLELINKLIST_H_ #def
資料結構開發(9):迴圈連結串列與雙向連結串列
0.目錄 1.迴圈連結串列的實現 2.雙向連結串列的實現 3.小結 1.迴圈連結串列的實現 什麼是迴圈連結串列? 概念上 任意資料元素都有一個前驅和一個後繼 所有的資料元素的關係構成一個邏輯上的環 實現上 迴圈連結串列是一種特殊的單鏈表
【資料結構】3.5迴圈佇列(附實現程式碼)
迴圈佇列節約了一定的空間,仍然用陣列實現。 要注意的是 rear是隊尾元素下一個單元的下標 front == rear時佇列為空 人為地讓一個儲存單元不儲存任何資訊,判滿條件為 (rear+1+MAXSIZE)%MAXSIZE == front 之所以能成
【資料結構】單鏈表迴圈左移K位
例如連結串列資料有:1 2 3 4 5 6 7 8 910 左移2位 結果為 3 4 5 6 7 8 9 10 1 2 需要處理邊界情況 :左移11位 顯示錯誤 ,左移0位 顯示錯誤 ,左移10位 顯示錯誤。 void leftshift(LinkList List,
python資料結構與演算法-單向迴圈連結串列
單向迴圈列表與單鏈表的區別是:讓原有單鏈表的尾節點的指標區指向頭結點 單向迴圈連結串列的初始構造: class SingleLinkList(object): #單向迴圈連結串列 def __init__(self,node=None)
資料結構自學記錄(四):迴圈連結串列 武大李春葆
迴圈連結串列是另一種形式的鏈式儲存結構形式: 迴圈單鏈表:將表中尾節點的指標域改為指向表頭節點,整個連結串列形成一個環。由 此從表中任一節點出發均可找到連結串列中其他節點。節點型別與普通單鏈表節點型別相同. 迴圈雙鏈表:...形成兩個環。節點型別與普通雙鏈表節點型別相同.
C語言實現雙向非迴圈連結串列(帶頭結點尾結點)的基本操作
我在之前一篇部落格中《C語言實現雙向非迴圈連結串列(不帶頭結點)的基本操作》中詳細實現了不帶頭尾節點的雙向非迴圈連結串列的很多操作。其實同單鏈表一樣,不帶頭結點的連結串列很多操作都是比較麻
資料結構Java實現04----迴圈連結串列、模擬連結串列
單向迴圈連結串列雙向迴圈連結串列模擬連結串列 一、單向迴圈連結串列: 1、概念: 單向迴圈連結串列是單鏈表的另一種形式,其結構特點是連結串列中最後一個結點的指標不再是結束標記,而是指向整個連結串列的第一個結點,從而使單鏈表形成一個環。 和單鏈表相比,迴圈單鏈表的長
大話資料結構,雙端迴圈連結串列,源程式
在網上找了下大話資料結構這本書的原始碼,發現第三章雖然有說到雙端連結串列卻沒給出實現,於是自己線上性連結串列的基礎上修改了一下,原始碼如下: 我將只有一個頭結點的時候,頭結點的next和prior都指向自己。 主要是注意一下插入的時候基本都遵循這個模型:,也就是找到要插入的
【資料結構】單鏈表(無頭單向非迴圈連結串列)各個介面的實現
順序表存在的問題: 中間/頭部的插入刪除,時間複雜度為O(N) 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗 增容一般是呈2倍的增長,勢必會有一定的空間浪費。 例如當前容量為100,滿了以後增容到200,如果再繼續插入了5個數據,後面沒有資料插入了,
【資料結構】迴圈連結串列和非迴圈單鏈表的區別
注意:這裡的迴圈連結串列是以尾指標為起始。非迴圈單鏈表判斷結束的標誌為指標為空。而迴圈連結串列判斷結束的標誌是指標不是頭節點。在插入操作中,非迴圈單鏈表判斷迴圈結束是指標為空。若迴圈結束後,發現指標變為空,說明要求插入的位置不合理:位置大於Length+1。bool ins
【資料結構】線性表的鏈式儲存(二)迴圈連結串列
線性錶鏈式儲存的迴圈單鏈表 迴圈連結串列從任意一點出發,可以訪問全部節點。 一般為了便於操作,將連結串列的頭指標變為尾指標,指向尾節點,連結串列的頭節點則為尾指標的next。 程式碼收穫 用尾指標進行操作雖然省下迴圈,但是插入刪除等操作都需要移動尾指標導致
【資料結構】單向迴圈連結串列
寫的中間發現一個問題,我試了一下,final修飾的引用是指該引用只能指向一個物件不能更改指向其他物件,但是該引用調該物件的方法進行內部資訊修改是OK的 package 連結串列.迴圈連結串列; import java.util.NoSuchElement
【資料結構】順序表、單鏈表、迴圈連結串列的插入與刪除
寫在前面的 順序表 插入 刪除 定位 單鏈表 插入 刪除 總結 寫在前面的 在複習資料結構的過程中對於連結串列的操作總是容易忘記,時不時的就不知道具體的該怎麼
【資料結構】高效雙向連結串列list、樹tree(二叉樹)
vi正常模式下: "shift + g" 跳到最後一行 "gg" 跳到第一行 <效率更高的雙向連結串列結構程式碼>/*程式碼*/ 01link.c #include <stdlib.h> #include "01link.h" //連結串列初始化 v