1. 程式人生 > >【資料結構】雙向非迴圈連結串列

【資料結構】雙向非迴圈連結串列

#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