雙向鏈表的操作(C語言)

main函數部分:

#include <stdio.h>
#include "./23_doubleLinkList.h"
int main(int argc, const char *argv[])
{   doubleLinkList* head = create_doubleLinkList();insertHead_doubleLinkList(head,12);insertHead_doubleLinkList(head,21);insertHead_doubleLinkList(head,14);insertHead_doubleLinkList(head,16);insertTail_doubleLinkList(head,13);show_doubleLinkList(head);insertBypos_doubleLinkList(head,33,6);show_doubleLinkList(head);deleteHead_doubleLinkList(head);show_doubleLinkList(head);deleteTail_doubleLinkList(head);show_doubleLinkList(head);deleteBypos_doubleLinkList(head,2);show_doubleLinkList(head);                                 return 0;
}

功能函數:

#include<stdio.h>                                                                                                                                                                                                                            
#include <stdlib.h>                                                                                                                                                                                                                          
#include "./23_doubleLinkList.h"                                                                                                                                                                                                             
doubleLinkList* create_doubleLinkList()                                                                                                                                                                                                      
{                                                                                                                                                                                                                                            doubleLinkList* head = (doubleLinkList*)malloc(sizeof(doubleLinkList));                                                                                                                                                                  if(NULL==head)                                                                                                                                                                                                                           {                                                                                                                                                                                                                                        printf("頭結點創建失敗!\n");                                                                                                                                                                                                        return NULL;                                                                                                                                                                                                                         }                                                                                                                                                                                                                                        head->text.len=0;                                                                                                                                                                                                                        head->next=head->prev=NULL;                                                                                                                                                                                                              return head;                                                                                                                                                                                                                             
}                                                                                                                                                                                                                                            
//判斷鏈表是否為空                                                                                                                                                                                                                           
int isEmpty(doubleLinkList* head)                                                                                                                                                                                                            
{                                                                                                                                                                                                                                            return head->next==NULL?1:0;                                                                                                                                                                                                             
}                                                                                                                                                                                                                                            
//頭插                                                                                                                                                                                                                                       
void insertHead_doubleLinkList(doubleLinkList* head,datatype num)                                                                                                                                                                            
{                                                                                                                                                                                                                                            doubleLinkList* temp=(doubleLinkList*)malloc(sizeof(doubleLinkList));                                                                                                                                                                    if(NULL == temp)                                                                                                                                                                                                                         {                                                                                                                                                                                                                                        printf("頭結點創建失敗!\n");                                                                                                                                                                                                        return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        temp->text.data=num;                                                                                                                                                                                                                     temp->next=temp->prev=NULL;                                                                                                                                                                                                              //插入操作                                                                                                                                                                                                                               //需分情況考慮該鏈表是否有元素,以免出現段錯誤                                                                                                                                                                                           if(head->next!=NULL)                                                                                                                                                                                                                 {                                                                                                                                                                                                                                        temp->next = head->next;                                                                                                                                                                                                             head->next=temp;                                                                                                                                                                                                                     temp->prev=head;                                                                                                                                                                                                                     temp->next->prev=temp;                                                                                                                                                                                                               }else                                                                                                                                                                                                                                    {                                                                                                                                                                                                                                        temp->next = head->next;                                                                                                                                                                                                             head->next=temp;                                                                                                                                                                                                                     temp->prev=head;                                                                                                                                                                                                                     }                                                                                                                                                                                                                                        head->text.len++;                                                                                                                                                                                                                        return;                                                                                                                                                                                                                                  }                                                                                                                                                                                                                                            
//尾插                                                                                                                                                                                                                                       
void insertTail_doubleLinkList(doubleLinkList* head,datatype num)                                                                                                                                                                            
{                                                                                                                                                                                                                                            //定義一個新的結點                                                                                                                                                                                                                       doubleLinkList* temp=(doubleLinkList*)malloc(sizeof(doubleLinkList));                                                                                                                                                                    if(NULL == temp)                                                                                                                                                                                                                         {                                                                                                                                                                                                                                        printf("頭結點創建失敗!\n");                                                                                                                                                                                                        return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        temp->text.data=num;                                                                                                                                                                                                                     temp->next=temp->prev=NULL;                                                                                                                                                                                                              //找到尾部的結點,p就是原雙向鏈表的尾部結點                                                                                                                                                                                              doubleLinkList* p=head;                                                                                                                                                                                                                  while(p->next!=NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        p=p->next;                                                                                                                                                                                                                           }                                                                                                                                                                                                                                        p->next=temp;                                                                                                                                                                                                                            temp->next=NULL;                                                                                                                                                                                                                         temp->prev=p;                                                                                                                                                                                                                            head->text.len++;                                                                                                                                                                                                                        return;                                                                                                                                                                                                                                  
}                                                                                                                                                                                                                                            
//按位置插入                                                                                                                                                                                                                                 
void insertBypos_doubleLinkList(doubleLinkList* head,datatype num,int pos)                                                                                                                                                                   
{                                                                                                                                                                                                                                            if(pos<1 || pos>head->text.len+1)                                                                                                                                                                                                        {                                                                                                                                                                                                                                        printf("輸入的位置%d不合法!\n",pos);                                                                                                                                                                                                }                                                                                                                                                                                                                                        //定義一個新的結點                                                                                                                                                                                                                       doubleLinkList* temp=(doubleLinkList*)malloc(sizeof(doubleLinkList));                                                                                                                                                                    if(NULL == temp)                                                                                                                                                                                                                         {                                                                                                                                                                                                                                        printf("頭結點創建失敗!\n");                                                                                                                                                                                                        return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        temp->text.data=num;                                                                                                                                                                                                                     temp->next=temp->prev=NULL;                                                                                                                                                                                                              //找到要插入位置的前一個`結點                                                                                                                                                                                                            doubleLinkList* p=head;                                                                                                                                                                                                                  int i;                                                                                                                                                                                                                                   for(i=0;i<pos-1;i++)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        p=p->next;                                                                                                                                                                                                                           }                                                                                                                                                                                                                                        temp->next=p->next;                                                                                                                                                                                                                      p->next=temp;                                                                                                                                                                                                                            temp->prev=p;                                                                                                                                                                                                                            if(temp->next!=NULL)                                                                                                                                                                                                                     temp->next->prev=temp;                                                                                                                                                                                                                   head->text.len++;                                                                                                                                                                                                                        return;                                                                                                                                                                                                                                  
}                                                                                                                                                                                                                                            
//頭刪                                                                                                                                                                                                                                       
void deleteHead_doubleLinkList(doubleLinkList* head)                                                                                                                                                                                         
{                                                                                                                                                                                                                                            if(head->next==NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        printf("鏈表為空!\n");                                                                                                                                                                                                              return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        //定義一個指針指向要刪除的結點方便后續釋放                                                                                                                                                                                               doubleLinkList* temp;                                                                                                                                                                                                                    temp=head->next;                                                                                                                                                                                                                         head->next=temp->next;                                                                                                                                                                                                                   //需分情況考慮該結點是否為鏈表最后一個結點,以免出現段錯誤                                                                                                                                                                               if(temp->next!=NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        temp->next->prev=head;                                                                                                                                                                                                               }                                                                                                                                                                                                                                        free(temp);                                                                                                                                                                                                                              head->text.len--;                                                                                                                                                                                                                        return;                                                                                                                                                                                                                                  
}                                                                                                                                                                                                                                            
//尾刪                                                                                                                                                                                                                                       
void deleteTail_doubleLinkList(doubleLinkList* head)                                                                                                                                                                                         
{                                                                                                                                                                                                                                            if(head->next==NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        printf("鏈表為空!\n");                                                                                                                                                                                                              return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        //定義一個指針指向要刪除的結點方便后續釋放                                                                                                                                                                                               doubleLinkList* p=head;                                                                                                                                                                                                                  while(p->next!=NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        p=p->next;                                                                                                                                                                                                                           }                                                                                                                                                                                                                                        p->prev->next=NULL;                                                                                                                                                                                                                      free(p);                                                                                                                                                                                                                                 head->text.len--;                                                                                                                                                                                                                        return;                                                                                                                                                                                                                                  }                                                                                                                                                                                                                                            
//按位置刪除                                                                                                                                                                                                                                 
void deleteBypos_doubleLinkList(doubleLinkList* head,int pos)                                                                                                                                                                                
{                                                                                                                                                                                                                                            if(head->next==NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        printf("鏈表為空!\n");                                                                                                                                                                                                              return;                                                                                                                                                                                                                              }                                                                                                                                                                                                                                        //判斷位置是否合法                                                                                                                                                                                                                       if(pos<1 || pos>head->text.len)                                                                                                                                                                                                          {                                                                                                                                                                                                                                        printf("輸入的位置%d不合法!\n",pos);                                                                                                                                                                                                }                                                                                                                                                                                                                                        //定義一個指針指向要刪除的結點方便后續釋放                                                                                                                                                                                               doubleLinkList* p=head;                                                                                                                                                                                                                  int i;                                                                                                                                                                                                                                   for(i=0;i<pos;i++)                                                                                                                                                                                                                       {                                                                                                                                                                                                                                        p=p->next;                                                                                                                                                                                                                           }                                                                                                                                                                                                                                        //p就是要刪除的結點                                                                                                                                                                                                                      p->prev->next=p->next;                                                                                                                                                                                                                   //當結點不為最后一個節點時,需要將該結點的后一位的前驅指針指向上一個結點                                                                                                                                                                 //當結點為最后一個節點則不需要,若不分情況考慮則會出現段錯誤;                                                                                                                                                                           if(p->next!=NULL)                                                                                                                                                                                                                        {                                                                                                                                                                                                                                        p->next->prev=p->prev;                                                                                                                                                                                                                   }                                                                                                                                                                                                                                        free(p);                                                                                                                                                                                                                                 head->text.len--;                                                                                                                                                                                                                        
}                                                                                                                                                                                                                                            
//遍歷                                                                                                                                                                                                                                       
void show_doubleLinkList(doubleLinkList* head)                                                                                                                                                                                               
{                                                                                                                                                                                                                                            doubleLinkList* p=head;                                                                                                                                                                                                                  if(isEmpty(head))                                                                                                                                                                                                                        {                                                                                                                                                                                                                                        printf("鏈表為空!\n");                                                                                                                                                                                                              }                                                                                                                                                                                                                                        while(p->next!=NULL)                                                                                                                                                                                                                     {                                                                                                                                                                                                                                        p=p->next;                                                                                                                                                                                                                       printf("%d ",p->text.data);                                                                                                                                                                                                          }                                                                                                                                                                                                                                        printf("\n");                                                                                                                                                                                                                            return;                                                                                                                                                                                                                                  
}                                                                                                                                                                                                                                            

頭文件:

                                                                                 
#ifndef __doubleLinkList_H__
#define __doubleLinkList_H__
typedef int datatype;
union msg{    //若數據的類型也為int,則不需要這個聯合體
datatype data;
int len;       //放頭結點,記錄鏈表長度
};
typedef struct node{union msg text;struct node* next; //指針,由于指針指向這一整個節點,所以類型為struct node*struct node* prev; 
}doubleLinkList; doubleLinkList* create_doubleLinkList();void insertHead_doubleLinkList(doubleLinkList* head,datatype num);void insertTail_doubleLinkList(doubleLinkList* head,datatype num);void deleteBypos_doubleLinkList(doubleLinkList* head,int pos);
void deleteTail_doubleLinkList(doubleLinkList* head);
void deleteHead_doubleLinkList(doubleLinkList* head);
void insertBypos_doubleLinkList(doubleLinkList* head,datatype num,int pos);
void show_doubleLinkList(doubleLinkList* head); 
#endif                                                                                       

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

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

相關文章

Spark之【基礎介紹】

Spark最初是由美國伯克利大學AMP實驗室在2009年開發&#xff0c;Spark時基于內存計算的大數據并行計算框架&#xff0c;可以用于構建大型的、低延遲的數據分析應用程序。 Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺之一。 Spark的特點 運行速度快 &am…

Uniapp + VUE3.0 實現雙向滑塊視頻裁剪效果

效果圖 <template><view v-if"info" class"all"><video:src"info.videoUrl"class"video" id"video" :controls"true" object-fit"fill" :show-fullscreen-btn"false"play-btn…

網頁數據的解析提取(parsel的使用)

前面&#xff0c;我們已經介紹了Xpath庫和Beautiful Soup庫&#xff08;支持css選擇器&#xff09;來提取頁面信息。它們有各自的優缺點&#xff0c;那可不可以取長補短呢&#xff1f;當然可以&#xff0c;parsel庫就是結合Xpath和css選擇器兩種方式來提取網頁信息。同時&#…

sylar高性能服務器-日志(P30-P35)內容記錄

文章目錄 P30-P32&#xff1a;協程調度01-03一、Scheduler局部變量FiberAndThread&#xff08;任務結構體&#xff09;成員變量調度協程構造函數析構函數startstoprunstopping 二、參考資料 P33-P35&#xff1a;協程調度04-06一、測試1二、測試2 總結 P30-P32&#xff1a;協程調…

開源博客項目Blog .NET Core源碼學習(9:Autofac使用淺析)

開源博客項目Blog使用Autofac注冊并管理組件和服務&#xff0c;Autofac是面向.net 的開源IOC容器&#xff0c;支持通過接口、實例、程序集等方式注冊組件和服務&#xff0c;同時支持屬性注入、方法注入等注入方式。本文學習并記錄Blog項目中Autofac的使用方式。 ??整個Blog解…

Swift基礎知識:28.Swift協議

在 Swift 中&#xff0c;協議&#xff08;protocol&#xff09;是一種定義方法、屬性和其他特定任務的藍圖。類、結構體或枚舉可以遵循&#xff08;adopt&#xff09;協議&#xff0c;從而提供所需的功能。協議定義了一組要求&#xff0c;遵循協議的類型需要提供對應的功能實現…

LED景觀照明燈驅動電路串聯、并聯和恒流3款方案

LED景觀照明燈是現代城市照明中常見的一種燈具。為了保證LED景觀照明燈的正常工作&#xff0c;需要設計合適的驅動電路。LED景觀照明燈的驅動電路可以采用串聯、并聯或恒流的方式來設計。 首先&#xff0c;串聯驅動電路是指將多個LED燈串聯在一起&#xff0c;然后接入電源進行…

【Spring】常見問題總結

目錄 1. 什么是 Spring 框架? 2. 列舉一些重要的Spring模塊&#xff1f; 3. RestController vs Controller 4. Spring IOC & AOP 4.1 談談自己對于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么區別&#xff1f; 5. Spring bean 5.1…

C語言第二十九彈---浮點數在內存中的存儲

?個人主頁&#xff1a; 熬夜學編程的小林 &#x1f497;系列專欄&#xff1a; 【C語言詳解】 【數據結構詳解】 目錄 1、浮點數在內存中的存儲 1.1、練習 1.2、浮點數怎么轉化為二進制 1.3、浮點數的存儲 1.3.1、浮點數存的過程 1.3.2、浮點數取的過程 1.3、題目解析…

FPGA領域頂級學術會議

FPGA領域頂級學術會議主要有FPGA,FCCM,FPL和FPT。 1 FPGA 會議全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 網站是:https://dl.acm.org/conference/fpga FPGA常年在美國舉辦,每年2月,偏FPGA基礎研究; 該會議的論文免費下載。這個比…

【MATLAB源碼-第144期】基于matlab的蝴蝶優化算法(BOA)無人機三維路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 ?蝴蝶優化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶覓食行為的一種新穎的群體智能算法。它通過模擬蝴蝶個體在尋找食物過程中的嗅覺導向行為以及隨機飛行行為&#xff0c;來探索解空間…

vue3前端項目開發,具備純天然的防止爬蟲采集的特征

vue3前端項目開發,具備純天然的防止爬蟲采集的特征&#xff01;眾所周知&#xff0c;網絡爬蟲可以在網上爬取到一些數據&#xff0c;很多公司&#xff0c;為了自己公司的數據安全&#xff0c; 尤其是web端項目&#xff0c;不希望被爬蟲采集。那么&#xff0c;您可以使用vue技術…

spark ui的job數,stage數以及task數

背景 我們在查看spark ui的界面時&#xff0c;一段spark sql的執行經常看到會有對應有幾個job&#xff0c;然后每個job又有幾個stage&#xff0c;而每個stage又有好多個task&#xff0c;那么這些job,stage,task是怎么和spark 算子對應的呢 算子和job數,stage數以及task數的對…

代碼隨想錄算法訓練營29期|day59 任務以及具體安排

第九章 動態規劃part16 583. 兩個字符串的刪除操作 // dp數組中存儲word1和word2最長相同子序列的長度 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for …

Gartner信息圖:2024 年44種安全和風險管理技術采用路線圖

Gartner發布的該信息圖確定了全球企業正在采用的 44 種安全相關技術&#xff0c;并根據采用階段、部署風險和企業價值對它們進行了映射。安全和風險管理領導者可以使用此信息圖將他們的技術投資與同行進行比較。 2024 年安全和風險管理技術采用路線圖 SRM 領導者可以使用此信息…

世微AP8P059 靜態功耗小 太陽能人體紅外線感應IC

概述 AP8P059 是一款集成低壓 LDO 、光 控、充電控制、過充保護、欠壓保護、 PIR 感應、延時為一體的人體感應太陽能 LED 燈控制芯片&#xff0c;只需要很少的外接元件&#xff0c;適 用于鋰電池供電的 PIR 人體感應 LED 燈具 的應用。 外置的一級帶通增益放大 器便…

Python實現視頻轉音頻、音頻轉文本的最佳方法

文章目錄 Python實現視頻轉音頻和音頻轉文字視頻轉音頻步驟 1&#xff1a;導入moviepy庫步驟 2&#xff1a;選擇視頻文件步驟 3&#xff1a;創建VideoFileClip對象步驟 4&#xff1a;提取音頻步驟 5&#xff1a;保存音頻文件 音頻轉文字步驟 1&#xff1a;導入SpeechRecognitio…

RV新聞概要 --- 2024/02/23

來源&#xff1a;https://mp.weixin.qq.com/s/EEJVLQnXvgQTbtU_yrW9lw 晶心科技是一家上市公司&#xff08;TWSE&#xff1a;6533&#xff1b;SIN&#xff1a;US03420C2089&#xff1b;ISIN&#xff1a;US03420C1099&#xff09;&#xff0c;已有18 年的經營歷史&#xff0c;是…

單向循環鏈表的操作

main函數&#xff1a; #ifndef __loopLinkList_H__#define __loopLinkList_H__typedef int datatype;union msg{ //若數據的類型也為int&#xff0c;則不需要這個聯合體datatype data;int len; //放頭結點&#xff0c;記錄鏈表長度};typedef struct node{union msg te…

Istio實戰:Istio Kiali部署與驗證

目錄 前言一、Istio安裝小插曲 注意事項 二、Kiali安裝三、Istio測試參考資料 前言 前幾天我就開始搗騰Istio。前幾天在執行istioctl install --set profiledemo -y 的時候老是在第二步就報錯了&#xff0c;開始我用的istio版本是1.6.8。 后面查看k8s與istio的版本對應關系后發…