順序結構雙鏈表的實現

雙鏈表是用最快的時間實現鏈表的一種方式,具體的實現代碼如下:

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int LTDataType;
typedef struct ListNode
{LTDataType data;struct ListNode* next;//下一個節點struct ListNode* prev;//上一個節點
}LTNode;//初始化
LTNode* LTInit();
//銷毀
void LTDestroy(LTNode* phead);
//打印
void LTPrint(LTNode* phead);
//bool LTEmpty(LTNode* phead);
//尾插
void LTPushBack(LTNode* phead, LTDataType x);
//尾刪
void LTPopBack(LTNode* phead);
//頭插
void LTPushFront(LTNode* phead, LTDataType x);
//頭刪
void LTPopFront(LTNode* phead);
#include"dlist.h"
//創建新節點
LTNode* CreateLTNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;newnode->prev = NULL;return newnode;
}
//初始化
LTNode* LTInit()
{LTNode* phead = CreateLTNode(-1);phead->next = phead;phead->prev = phead;return phead;
}
//銷毀
void LTDestroy(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){LTNode* next = cur->next;free(cur);cur = next;}free(phead);phead = NULL;
}
//打印
void LTPrint(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){printf("%d<=>", cur->data);cur = cur->next;}printf("NULL\n");
}
//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{LTNode* newnode = CreateLTNode(x);LTNode* tail = phead->prev;newnode->prev = tail;newnode->next = phead;tail->next = newnode;phead->prev = newnode;
}
//尾刪
void LTPopBack(LTNode* phead)
{assert(phead);LTNode* tail = phead->prev;tail->prev->next = phead;phead->prev = tail->prev;free(tail);tail = NULL;
}
//頭插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = CreateLTNode(x);LTNode* next = phead->next;phead->next = newnode;newnode->prev = phead;newnode->next = next;next->prev = newnode;
}
//頭刪
void LTPopFront(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;phead->next = cur->next;cur->next->prev = phead;free(cur);cur = NULL;
}

在初始化的過程中,因為要改變phead的值,所以要傳入二級指針?,但是為了保證統一,只需要初始化的時候返回一個節點指針就可以避免傳入二級指針

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904202.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GoFrame 奉孝學習筆記

第一章節 GoFrame 是一款基礎設施建設比較完善的模塊化框架 GoFrame 是一款基礎設施建設比較完善的模塊化框架, Web Server 模塊是其中比較核心的模塊,我們這里將 Web 服務開發作為框架入門的選擇,便于大家更容易學習和理解。 用GOland編寫代碼 go.mod module goframePro…

pinia實現數據持久化插件pinia-plugin-persist-uni

在學習uniapp過程中&#xff0c;看到了pinia-plugin-persist-uni插件&#xff0c;以前面試過程中也有面試過說vuex數據刷新之前的數據就丟失了&#xff0c;之前回答的是把數據存儲到數據庫或者本地存儲。pinia-plugin-persist-uni本質上數據也是本地存儲。 1、安裝 npm instal…

Git 多賬號切換及全局用戶名設置不生效問,GIT進行上傳無權限問題

解決 Git 多賬號切換及全局用戶名設置不生效問題 在軟件開發過程中&#xff0c;我們經常會使用 Git 進行版本控制。有時&#xff0c;我們需要在同一臺機器上管理多個 Git 賬號&#xff0c;最近我在進行使用git的時候因為項目要進行上傳的不同的git賬號&#xff0c;但是通過本地…

基于STM32定時器中斷講解(HAL庫)

基于STM32定時器中斷講解&#xff08;HAL庫&#xff09; 1、定時器簡單介紹 以STM32F103C8T6中幾個定時器為例&#xff1a; TIM1&#xff1a;這是一個高級定時器&#xff0c;不僅具備基本的定時中斷功能&#xff0c;還擁有內外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口以…

UE5 項目遷移 注意事項記錄

做項目的時候項目越做越大 132g的體量一旦移動復制就耗時間 這個時候遷移派上了用場 前置知識&#xff1a;會使用基本ue遷移流程 以下是遷移注意事項 遷移步驟 首先把項目插件plugins復制粘貼到新項目中其次把.project文本形式 全部復制粘貼新項目中開始遷移項目 選中要遷移的…

套接字+Socket連接

制作加載中動畫&#xff1a; 創建Panel&#xff0c;制作預制體&#xff0c;在Image游戲物體中添加DOTween插件&#xff0c;相關設置如下&#xff1a; (此為DOTween Pro,需付費&#xff0c;也可按下面的數值編寫代碼解決) Socket套接字 套接字就是將IP地址與主機端口號合并在一…

第 11 屆藍橋杯 C++ 青少組中 / 高級組省賽 2020 年真題答和案解析

一、選擇題 第 1 題 單選題 題目:表達式 ‘6’ - ‘1’ 的值是 ( ) A. 整數 5 B. 字符 5 C. 表達式不合法 D. 字符 6 答案:A 解析:在 C++ 中,字符常量以 ASCII 碼形式存儲。6 的 ASCII 碼為 54,1 的 ASCII 碼為 49,二者相減結果為 5,是整數類型,因此選 A。 第 2 題 …

使用Rust + WebAssembly提升前端渲染性能:從原理到落地

一、問題背景&#xff1a;為什么選擇WebAssembly&#xff1f; 最近在開發數據可視化大屏項目時&#xff0c;我們遇到了一個棘手的問題&#xff1a;前端需要實時渲染10萬數據點的動態散點圖&#xff0c;使用純JavaScript Canvas方案在低端設備上幀率不足15FPS。經過性能分析&a…

【沐風老師】3DMAX按元素UV修改器插件教程

3DMAX按元素UV修改器UV By Element是一個腳本化的修改器插件。對于需要創建隨機化紋理效果的用戶而言&#xff0c;3DMAX的UV By Element修改器無疑是一款高效工具&#xff0c;它將以偽隨機量偏移、旋轉和/或縮放每個元素的UV坐標。 【版本要求】 3dMax 2016及以上 【安裝方法】…

【神經網絡與深度學習】改變隨機種子可以提升模型性能?

引言 隨機種子在機器學習和數據處理領域中至關重要&#xff0c;它決定了模型訓練、數據劃分以及參數初始化的隨機性。雖然固定隨機種子能確保實驗的可重復性&#xff0c;但改變隨機種子有時會意外提升模型性能。本文將探討這一現象的潛在原因&#xff0c;并揭示隨機性如何影響…

java技術總監簡歷模板

模板信息 簡歷范文名稱&#xff1a;java技術總監簡歷模板&#xff0c;所屬行業&#xff1a;其他 | 職位&#xff0c;模板編號&#xff1a;XDNUTA 專業的個人簡歷模板&#xff0c;邏輯清晰&#xff0c;排版簡潔美觀&#xff0c;讓你的個人簡歷顯得更專業&#xff0c;找到好工作…

OpenLayers:偵聽縮放級別的變化

在實際開發中我們常常需要根據不同的縮放級別設置不同的展示效果或者執行不同的操作&#xff0c;因此偵聽縮放級別的變化就很重要。想要偵聽變化就需要依賴于OpenLayers中的事件系統&#xff0c;下面我將介紹兩個相關的事件。 一、地圖事件 moveend 1.介紹 在地圖的移動結束…

Langchain4j基于ElasticSearch的向量數據庫配置后,啟動報錯

報錯信息: co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/search] failed: [search_phase_execution_exception] all shards failedat co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:34…

如何解決 403 錯誤:請求被拒絕,無法連接到服務器

解決 403 錯誤&#xff1a;請求被拒絕&#xff0c;無法連接到服務器 當您在瀏覽網站或應用時&#xff0c;遇到 403 錯誤&#xff0c;通常會顯示類似的消息&#xff1a; The request could not be satisfied. Request blocked. We can’t connect to the server for this app o…

PyTorch 2.0編譯模式深度評測:圖優化對GPU利用率的影響

一、編譯革命的性能拐點 PyTorch 2.0的torch.compile通過TorchDynamo與XLA兩種編譯模式&#xff0c;將動態圖執行效率推向新高度。本文基于NVIDIA A100與Google TPUv4硬件平臺&#xff0c;通過ResNet-50、Transformer-XL等典型模型&#xff0c;揭示不同編譯策略對GPU資源利用率…

在CentOS環境中安裝MySQL數據庫保姆級教程

一.確認當前系統版本 1.1登錄系統&#xff0c;切換至root賬戶 如圖所示&#xff1a; 1.2&#xff1a;在終端中執行如下命令查看系統版本 cat /etc/redhat-release 二.添加 MySQL Yum 源 2.1訪問MySQL開發者專區 https://dev.mysql.com/downloads/repo/yum/ TIPS: 1.發布包命…

SpringBoot智能排課系統源碼開發與實現

概述 基于SpringBoot框架開發的智能排課系統。該系統是一款功能完善的校園管理系統&#xff0c;包含管理員、教師和學生三種角色權限&#xff0c;實現了課程管理、排課算法、成績錄入等核心功能&#xff0c;是學習SpringBoot開發和企業級項目實踐的優質資源。 主要內容 1. 管…

探秘 RocketMQ 的 DLedgerServer:MemberState 的技術解析與深度剖析

在 RocketMQ 構建高可靠、強一致性消息系統的架構中&#xff0c;DLedgerServer 扮演著舉足輕重的角色&#xff0c;而 MemberState 作為 DLedgerServer 內部用于描述節點狀態的核心類&#xff0c;更是整個分布式日志模塊穩定運行的關鍵。深入理解 MemberState 的設計理念、功能特…

字符串匹配 之 KMP算法

文章目錄 習題28.找出字符串中第一個匹配項的下標1392.最長快樂前綴 本博客充分參考靈神和知乎的另一位博主 靈神KMP算法模版 知乎博主通俗易懂講解 對于給定一個主串S和一個模式串P,如果讓你求解出模式串P在主串S中匹配的情況下的所有的開始下標簡單的做法又稱為Brute-Force算…

Nginx相關知識

目錄 一.HTTP請求數據在服務器中的傳輸與處理詳解 1.2 套字節 1.3 零拷貝技術 二.I/O模型 2.1 I/O模型簡介 2.2 常見的I/O模型及其特點 1.同步/異步 2.阻塞vs 非阻塞 3. 同步/異步與阻塞/非阻塞的關系 4.多路復用I/O模型 5.異步I/O模型 三.Nginx模塊 3.1 概述ng…