數據結構雙向循環鏈表

主程序

#include "fun.h"

int main(int argc, const char *argv[])
{
?? ?double_p H=create_head();
?? ?insert_head(H,10);
?? ?insert_head(H,20);
?? ?insert_head(H,30);
?? ?insert_head(H,40);
?? ?insert_tail(H,50);
?? ?show_link(H);
?? ?del_tail(H);
?? ?show_link(H);
?? ?free_link(H);
?? ?H=NULL;
?? ?show_link(H);
?? ?
?? ?
?? ?return 0;
}

源程序

#include "fun.h"

//創建頭節點
double_p create_head()
{
?? ?double_p H=(double_p)malloc(sizeof(node));
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("節點申請失敗\n");
?? ??? ?return NULL;
?? ?}
?? ?H->prior=H;
?? ?H->next=H;
?? ?H->len=0;
?? ?return H;
}

//創建新節點
double_p create_new(typdata data)
{
?? ?double_p new=(double_p)malloc(sizeof(node));
?? ?if(new==NULL)
?? ?{
?? ??? ?printf("節點申請失敗\n");
?? ??? ?return NULL;
?? ?}
?? ?new->prior=NULL;
?? ?new->next=NULL;
?? ?new->data=data;
?? ?return new;
}
//判空
int empty_link(double_p H)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
?? ??? ?return -1;
?? ?}
?? ?return H->len==0;
}
//頭插
void insert_head(double_p H,typdata data)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
?? ??? ?return;
?? ?}

?? ?
?? ?double_p new=create_new(data);
?? ?new->next=H->next;
?? ?H->next=new;
? ? new->next->prior=new;
?? ?new->prior=H;

?? ?H->len++;
}
//遍歷
void show_link(double_p H)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
?? ??? ?return;
?? ?}
?? ?if(empty_link(H))
?? ?{
?? ??? ?printf("鏈表已空,無需遍歷\n");
?? ??? ?return;
?? ?}
?? ?double_p p=H;
?? ?while(p->next!=H)
?? ?{
?? ??? ?p=p->next;
?? ??? ?printf("<-%d->",p->data);
?? ?}
?? ?putchar(10);
}
//尾插
void insert_tail(double_p H,typdata data)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
?? ??? ?return;
?? ?}
? ? double_p p=H;
?? ?while(p->next!=H)
?? ?{
?? ??? ?p=p->next;
?? ?}
?? ?double_p new=create_new(data);
?? ?new->next=p->next;
?? ?p->next=new;
?? ?new->prior=p;
?? ?H->prior=new;


?? ?H->len++;
}

//尾刪
void del_tail(double_p H)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
? ? ? ? return;
?? ?}
?? ?if(empty_link(H))
?? ?{
?? ??? ?printf("鏈表已空,無需刪除\n");
?? ??? ?return;
?? ?}
?? ?
?? ?double_p p=H;
?? ?while(p->next->next!=H)
?? ?{
?? ??? ?p=p->next;
?? ?}
?? ?free(p->next);
?? ?p->next=NULL;
?? ?p->next=H;
? ? H->prior=p;

?? ?H->len--;
}
//釋放鏈表
void free_link(double_p H)
{
?? ?if(H==NULL)
?? ?{
?? ??? ?printf("入參為空,請檢查\n");
?? ?}?
? ? ? ? while(H->next != H)
? ? ? ? {
? ? ? ? ? ?del_tail(H);
? ? ? ? }
? ??
? ? ? ? free(H);
? ? ? ? H=NULL;
?? ??? ?
? ??
? ? ? ?
? ??
}

? ? ? ? ? ? ? ? ? ? 頭文件

#ifndef __FUN_H_
#define __FUN_H_

#include <myhead.h>

typedef int typdata;
typedef struct node
{
?? ?union
?? ?{
?? ??? ?typdata data;
?? ??? ?int len;
?? ?};
?? ?struct node * prior;
?? ?struct node *next;
}node,*double_p;

double_p create_head();//創建頭節點
double_p create_new(typdata data);//創建新節點
int empty_link(double_p H);//判空
void insert_head(double_p H,typdata data);//頭插
void show_link(double_p);//遍歷
void insert_tail(double_p H,typdata data);//尾插
void del_tail(double_p H);//尾刪
void free_link(double_p H);//釋放鏈表
#endif

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

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

相關文章

Python 傳遞參數和返回值

Python是一種功能強大的編程語言&#xff0c;它以其簡潔和易用性而廣受歡迎。在Python編程中&#xff0c;參數傳遞和返回值是函數調用中兩個非常重要的概念。理解這些概念對于編寫高效且可維護的代碼至關重要。 一、參數傳遞 在Python中&#xff0c;函數參數可以通過以下幾種…

Linux 網絡時間同步:NTP 與 Chrony 的終極對決

Linux 網絡時間同步&#xff1a;NTP 與 Chrony 的終極對決 在網絡世界中&#xff0c;時間同步是一項至關重要的任務。無論是確保分布式系統的一致性&#xff0c;還是維護安全協議的完整性&#xff0c;準確的時間同步都是必不可少的。網絡時間協議&#xff08;NTP&#xff09;和…

Golang期末作業之電子商城(源碼)

作品介紹 1.網頁作品簡介方面 &#xff1a;主要有&#xff1a;首頁 商品詳情 購物車 訂單 評價 支付 總共 5個頁面 2.作品使用的技術:這個作品基于Golang語言&#xff0c;并且結合一些前端的知識&#xff0c;例如:HTML、CSS、JS、AJAX等等知識點&#xff0c;同時連接數據庫的&…

統信UOS軟件包標識化工具deepin-sbom-tools使用

原文鏈接&#xff1a;統信UOS上使用軟件包標識化工具deepin-sbom-tools Hello&#xff0c;大家好啊&#xff01;今天給大家帶來一篇關于在統信UOS上使用軟件包標識化工具deepin-sbom-tools的文章。deepin-sbom-tools是一個強大的工具&#xff0c;可以幫助開發者和系統管理員更好…

Linux初始化新的git倉庫

1.在git服務器上找到項目常部署的git地址可以根據其他項目的git地址確認 例如ssh://git192.168.10.100/opt/git/repository.git 用戶名&#xff1a;git&#xff08;前面的是用戶&#xff09; 服務器地址&#xff1a;192.168.10.100 git倉庫路徑&#xff1a;/opt/git/ 2.在服務器…

數據結構之折半查找

折半查找的算法思想&#xff1a; 折半查找又稱二分查找&#xff0c;它僅僅適用于有序的順表。 折半查找的基本思想&#xff1a;首先將給定值key與表中中間位置的元素&#xff08;mid的指向元素&#xff09;比較。midlowhigh/2&#xff08;向下取整&#xff09; 若key與中間元…

C#—Json序列化和反序列化

C#—Json序列化和反序列化 在C#中&#xff0c;可以使用System.Web.Script.Serialization.JavaScriptSerializer類來序列化和反序列化JSON數據。 可以使用Newtonsoft.Json庫進行JSON的序列化。 可以使用.NET內置的System.Text.Json庫來進行JSON的序列化。 json文件格式 [ { …

搜索引擎優化培訓機構怎么選?這篇文章告訴你答案

搜索引擎優化&#xff08;SEO&#xff09;已成為網絡生存必備技能。然而面對眾多培訓機構&#xff0c;如何選擇優秀者&#xff1f;本文將為您揭曉此事&#xff0c;助您找到騰飛之地。 一、培訓機構的多樣性&#xff1a;琳瑯滿目的選擇 當前SEO培訓市場繁蕪復雜&#xff0c;既…

C++ 八股(1)

C語言中strcpy為什么不安全&#xff1f;如何解決&#xff1f; 主要原因是缺乏對輸入長度的邊界檢查&#xff0c;容易導致緩沖區溢出漏洞。 解決&#xff1a;可以使用strncpy函數替代&#xff0c;或者在程序最頂端加入代碼段 #define _CRT_SECURE_NO_WARNINGS 緩沖區溢出 …

javascript高級部分筆記

javascript高級部分 Function方法 與 函數式編程 call 語法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義&#xff1a;調用一個對象的一個方法&#xff0c;以另一個對象替換當前對象。 說明&#xff1a;call 方法可以用來代替另一個對象調用一個方法。cal…

MySQL運維實戰之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

作者&#xff1a;俊達 如果后端MySQL使用了Group Replication&#xff0c;可通過配置mysql_group_replication_hostgroups表來實現高可用 1 mysql_group_replication_hostgroups 字段描述writer_hostgroup寫hostgroup。read_only和super_read_only OFF的節點。backup_writer…

Vue3 pdf.js將二進制文件流轉成pdf預覽

好久沒寫東西&#xff0c;19年之前寫過一篇Vue2將pdf二進制文件流轉換成pdf文件&#xff0c;如果Vue2換成Vue3了&#xff0c;順帶來一篇文章&#xff0c;pdf.js這個東西用來解決內網pdf預覽&#xff0c;是個不錯的選擇。 首先去pdfjs官網&#xff0c;下載需要的文件 然后將下載…

第4章 IT服務規劃設計

第4章 IT服務規劃設計 4.1 概述 規劃設計處于整個IT服務生命周期中的前端&#xff0c;可以幫助IT服務供方了解客戶的需求&#xff0c;并對其進行全面的需求分析&#xff0c;然后通過對服務要素&#xff08;包括人員、資源、技術和過程&#xff09;、服務模式和服務方案的具體…

OpenHarmony4.x 系統模擬器環境

先下載源碼和編譯程序&#xff1a; 首先查看 OpenHarmony4.1源碼下載、編譯&#xff0c;生成OHOS_Image可執行文件的最簡易流程 準備在QEMU模擬器中運行ARM Cortex-M4的輕型開源鴻蒙系統 官方支持的開發板和模擬器種類-編譯形態整體說明OpenAtom OpenHarmony 已支持的示例工…

ArduPilot開源代碼之AP_MSP

ArduPilot開源代碼之AP_MSP 1. 源由2. Library設計2.1 啟動代碼2.2 支持特性2.3 MSP DisplayPort v.s. DJI FPV OSD 3. 重要例程3.1 AP_MSP::init3.2 AP_MSP::loop3.3 AP_MSP::init_backend 4. 實例理解5. 總結6. 參考資料 1. 源由 AP_MSP是處理MSP協議格式的報文數據應用類。…

反向業務判斷邏輯

業務功能需求&#xff1a; 根據id扣減用戶余額 包括&#xff1a;判斷用戶狀態是否正常判斷用戶余額是否充足 正向邏輯&#xff1a; 判斷用戶為正常下&#xff0c;判斷用戶余額充足&#xff0c;進行余額扣減&#xff1b; 》正向邏輯&#xff0c;多重嵌套&#xff0c;代碼不美觀…

??一文帶你入門【NestJS】

??引言 在現代Web開發領域&#xff0c;框架和技術的迭代速度令人咋舌。其中&#xff0c;NestJS作為一款基于Node.js的后端框架&#xff0c;以其卓越的設計理念和強大的功能集&#xff0c;迅速吸引了眾多開發者的眼球。本文將帶你深入了解NestJS的起源、發展&#xff0c;以及…

SpringIOC原理

SpringIOC原理 1.概念 Spring通過一個配置文件描述Bean及Bean之間的依賴關系&#xff0c;利用Java語言的反射功能實例化Bean并建立Bean之間的依賴關系。Spring的IOC容器在完成這些底層工作的基礎上&#xff0c;還提供了Bean實例緩存、生命周期管理、Bean實例代理、事件發布、…

AI提示詞:AI輔導「數學作業」

輔導孩子作業對許多家長來說可能是一件頭疼的事&#xff0c;但這部分工作可以在一定程度上交給AI來完成。 打開ChatGPT4,輸入以下內容&#xff1a; # Role 數學輔導專家## Profile - author: 姜小塵 - version: 02 - LLM: Kimi - language: 中文 - description: 專門為小學生…

加密算法詳解:對稱加密、非對稱加密、Hash算法

對稱加密、非對稱加密和哈希算法是信息安全中的三種主要加密技術&#xff0c;它們各自有不同的特點和用途&#xff1a; 對稱加密&#xff08;Symmetric Encryption&#xff09; 工作原理&#xff1a;使用相同的密鑰進行加密和解密。速度&#xff1a;通常非常快&#xff0c;適…