最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和雙向鏈表操作

 更新時(shí)間:2017年03月17日 17:05:31   作者:jesson20121020  
這篇文章主要介紹了C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)雙向鏈表操作,需要的朋友可以參考下

數(shù)據(jù)結(jié)構(gòu)  雙向鏈表的實(shí)現(xiàn)

雙向鏈表中的每一個(gè)結(jié)點(diǎn)都含有兩個(gè)指針域,一個(gè)指針域存放其后繼結(jié)點(diǎn)的存儲地址,另一個(gè)指針域則存放其前驅(qū)結(jié)點(diǎn)的存儲地址。

雙向鏈表結(jié)點(diǎn)的類型描述:

//雙向鏈表的類型描述 
typedef int ElemType; 
typedef struct node{ 
 ElemType data; 
 struct node *prior,*next; 
}DuLNode,*DuLinkList; 
  

 其中,prior域存放的是其前驅(qū)結(jié)點(diǎn)的存儲地址,next域存放的是其后繼結(jié)點(diǎn)的存儲地址。

雙向鏈表有兩個(gè)特點(diǎn):

一是可以從兩個(gè)方向搜索某個(gè)結(jié)點(diǎn),這使得鏈表的某些操作(如插入和刪除)變得比較簡單; 二是無論利用前鏈還是后鏈都可以遍歷整個(gè)雙向鏈表。

        雙向鏈表的操作基本和單鏈表的操作相同;

        1. 頭插法創(chuàng)建帶頭結(jié)點(diǎn)的雙向鏈表Create_DLinkListF(int n)

//頭插法創(chuàng)建帶頭結(jié)點(diǎn)的雙向鏈表 
DuLinkList Create_DLinkListF(int n){ 
 DuLinkList L,p; 
 int i = n - 1; 
 ElemType x; 
 //新建頭結(jié)點(diǎn) 
 L = (DuLinkList)malloc(sizeof(DuLNode)); 
 L->prior = NULL; 
 L->next = NULL; 
 
 //添加第一個(gè)結(jié)點(diǎn) 
 scanf("%d",&x); 
 p = (DuLinkList)malloc(sizeof(DuLNode)); 
 p->data = x; 
 L->next = p; 
 p->prior = L; 
 p->next = NULL; 
 
 //加入其他結(jié)點(diǎn) 
 while(i > 0){ 
 scanf("%d",&x); 
 p = (DuLinkList)malloc(sizeof(DuLNode)); 
 p->data = x; 
 
 p->next = L->next; 
 L->next->prior = p; 
 p->prior = L; 
 L->next = p; 
 
 i--; 
 } 
 return L; 
} 

         2. 尾插法創(chuàng)建帶頭結(jié)點(diǎn)的雙向鏈表Create_DLinkListR(int n)

//尾插法創(chuàng)建帶頭結(jié)點(diǎn)的雙向鏈表 
DuLinkList Create_DLinkListR(int n){ 
 DuLinkList L,p,lastNode; 
 int i = n - 1; 
 ElemType x; 
 //新建頭結(jié)點(diǎn) 
 L = (DuLinkList)malloc(sizeof(DuLNode)); 
 L->prior = NULL; 
 L->next = NULL; 
 
 //添加第一個(gè)結(jié)點(diǎn) 
 scanf("%d",&x); 
 p = (DuLinkList)malloc(sizeof(DuLNode)); 
 p->data = x; 
 L->next = p; 
 p->prior = L; 
 p->next = NULL; 
 
 lastNode = p; 
 //加入其他結(jié)點(diǎn) 
 while(i > 0){ 
 scanf("%d",&x); 
 p = (DuLinkList)malloc(sizeof(DuLNode)); 
 p->data = x; 
 
 lastNode->next = p; 
 p->prior = lastNode; 
 p->next = NULL; 
 
 lastNode = p; 
 i--; 
 
 } 
 return L; 
 
} 
    

3. 在指定結(jié)點(diǎn)之前插入新結(jié)點(diǎn)Insert_DLinkListBefore(DuLinkList p,ElemType x)

//在指定結(jié)點(diǎn)之前插入新結(jié)點(diǎn) 
void Insert_DLinkListBefore(DuLinkList p,ElemType x){ 
 DuLinkList newNode; 
 //判斷結(jié)點(diǎn)p之前的結(jié)點(diǎn)的合法性: 
 if(p->prior == NULL) 
 printf("結(jié)點(diǎn)不合法,不能在該結(jié)點(diǎn)之前插入結(jié)點(diǎn)\n"); 
 else{ 
 newNode = (DuLinkList)malloc(sizeof(DuLNode)); 
 newNode->data = x; 
 
 newNode->next = p; 
 p->prior->next = newNode; 
 newNode->prior = p->prior; 
 p->prior = newNode; 
 } 
} 

4. 在指定結(jié)點(diǎn)之后插入新結(jié)點(diǎn)Insert_DLinkListAfter(DuLinkList p,ElemType x)

//在指定結(jié)點(diǎn)之后插入新結(jié)點(diǎn) 
void Insert_DLinkListAfter(DuLinkList p,ElemType x){ 
 
 DuLinkList newNode; 
 newNode = (DuLinkList)malloc(sizeof(DuLNode)); 
 newNode->data = x; 
 
 //當(dāng)插入位置是最后一個(gè)結(jié)點(diǎn)之后時(shí) 
 if(p->next == NULL){ 
 p->next = newNode; 
 newNode->prior = p; 
 newNode->next = NULL; 
 } 
 else{ 
 newNode->next = p->next; 
 p->next->prior = newNode; 
 p->next = newNode; 
 newNode->prior = p; 
 } 
} 

5. 刪除指定結(jié)點(diǎn)Delete_DLinkList(DuLinkList p)

//刪除指定結(jié)點(diǎn) 
void Delete_DLinkList(DuLinkList p){ 
 //如果刪除的是最后一個(gè)元素 
 if(p->next == NULL) 
 p->prior->next = NULL; 
 
 else{ 
 p->prior->next = p->next; 
 p->next->prior = p->prior; 
 
 } 
 free(p); 
} 

6. 后鏈輸出雙向鏈表Print_DLinkListN(DuLinkList L)

//后鏈輸出雙向鏈表 
void Print_DLinkListN(DuLinkList p){ 
 
 while(p != NULL){ 
 printf("%d\t",p->data); 
 p = p->next; 
 } 
 printf("\n"); 
 
} 

  7.前鏈輸出雙向鏈表Print_DLinkListP(DuLinkList p)

//前鏈輸出雙向鏈表 
void Print_DLinkListP(DuLinkList p){ 
 
 while(p != NULL){ 
 printf("%d\t",p->data); 
 p = p-prior; 
 } 
 printf("\n"); 
} 
 

至于雙向鏈表的其他操作,如定位,和單鏈表的操作類同,不再贅述。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Qt實(shí)現(xiàn)獲取文件大小與磁盤空間大小

    Qt實(shí)現(xiàn)獲取文件大小與磁盤空間大小

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt實(shí)現(xiàn)獲取文件大小與磁盤空間大小,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 用c語言實(shí)現(xiàn)2000內(nèi)既能被3整除又能被7整除的個(gè)數(shù)

    用c語言實(shí)現(xiàn)2000內(nèi)既能被3整除又能被7整除的個(gè)數(shù)

    本篇文章是對使用c語言實(shí)現(xiàn)2000內(nèi)既能被3整除又能被7整除的個(gè)數(shù),用實(shí)例進(jìn)行了分析說明,需要的朋友參考下
    2013-05-05
  • 在matlab中實(shí)現(xiàn)for循環(huán)的方法

    在matlab中實(shí)現(xiàn)for循環(huán)的方法

    for循環(huán)用來循環(huán)處理數(shù)據(jù),break用于終止離它最近的一層for循環(huán),continue用于跳過離它最近的一層for循環(huán),接著執(zhí)行下一次循環(huán),本文重點(diǎn)給大家介紹在matlab中實(shí)現(xiàn)for循環(huán)的方法,感興趣的朋友一起看看吧
    2021-11-11
  • C++下標(biāo)運(yùn)算符詳解

    C++下標(biāo)運(yùn)算符詳解

    C語言中的下標(biāo)運(yùn)算符用于訪問數(shù)組或指針變量中的元素,它使用方括號 [] 來表示,并在方括號內(nèi)指定元素的索引位置,本文給大家詳細(xì)的講解一下C++的下標(biāo)運(yùn)算符,需要的朋友可以參考下
    2023-09-09
  • C++中兩種字符串定義方式和區(qū)別介紹

    C++中兩種字符串定義方式和區(qū)別介紹

    大家好,本篇文章主要講的是C++中兩種字符串定義方式和區(qū)別介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用

    C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用

    為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)
    2022-08-08
  • 基于C語言string函數(shù)的詳解

    基于C語言string函數(shù)的詳解

    本篇文章是對C語言中string函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 解析C++中臨時(shí)對象的產(chǎn)生情況

    解析C++中臨時(shí)對象的產(chǎn)生情況

    臨時(shí)對象的產(chǎn)生和銷毀都是有成本的,都會影響程序的執(zhí)行性能和效率,所以如果能了解臨時(shí)對象產(chǎn)生的原因,就可以提升程序的性能和效率,下面小編就來和大家聊聊臨時(shí)對象產(chǎn)生的幾種情況吧
    2023-06-06
  • C語言GetStdHandle函數(shù)使用方法

    C語言GetStdHandle函數(shù)使用方法

    這篇文章介紹了C語言GetStdHandle函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論

湛江市| 阜平县| 孝感市| 涟水县| 治县。| 临沂市| 沁水县| 大兴区| 永川市| 平罗县| 广元市| 无锡市| 历史| 方城县| 莱芜市| 肥东县| 威信县| 太谷县| 绿春县| 河北省| 盐池县| 博野县| 青铜峡市| 琼中| 东兰县| 凌源市| 民和| 永春县| 云龙县| 佛教| 什邡市| 波密县| 平和县| 遂溪县| 犍为县| 阳西县| 寿宁县| 阳谷县| 贵德县| 罗定市| 武功县|