日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构学习——双向链表

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构学习——双向链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言——雙向鏈表含義
  • 一、雙向鏈表結構(圖解)
  • 二、 雙向鏈表的實際操作
    • 1、 結構
    • 2、創建頭結點
    • 3、打印
    • 4、插入
    • 5、定位
    • 6、刪除
    • 完整代碼
  • 運行結果


前言——雙向鏈表含義

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。一般我們都構造雙向循環鏈表。

一、雙向鏈表結構(圖解)

二、 雙向鏈表的實際操作

1、 結構

/*** Double linked list of integers. The key is char.*/ typedef struct DoubleLinkedNode {char data;struct DoubleLinkedNode *previous;struct DoubleLinkedNode *next; }DLNode,*DLNodePtr;

2、創建頭結點

/*** Initialize the list with a header.* @return The pointer to the header.*/ DLNodePtr initLinkList(){DLNodePtr tempHeader =(DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));tempHeader->data = '\0';tempHeader->previous = NULL;tempHeader->next=NULL;return tempHeader; }

3、打印

/*** Print the list.* @param paraHeader The header of the list.*/ void printList(DLNodePtr paraHeader) {DLNodePtr p= paraHeader->next;while(p!=NULL){printf("%c",p->data);p = p->next;}printf("\r\n"); }

4、插入

void insertElement(DLNodePtr paraHeader,char paraChar,int paraPosition) {DLNodePtr p,q,r;p = paraHeader;int i;for (i=0;i< paraPosition;i++){p=p->next;if(p==NULL){printf("The position %d is beyond the scope of the list.",paraPosition);return;}}q=(DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));q->data = paraChar;r = p->next;q->next = p->next;q->previous = p;p->next = q;if(r!=NULL){r->previous = q;} }

5、定位

void locateELement(DLNodePtr paraHeader,char paraChar) {DLNodePtr p,q,r;int i=1;p=paraHeader;while((p->next !=NULL)&&(p->next->data !=paraChar)){p=p->next;i++;}if(p->next == NULL){printf("The char '%c' does not exist.\r\n",paraChar);return;}printf("%d\n",i); }

6、刪除

void deleteElement(DLNodePtr paraHeader,char paraChar) {DLNodePtr p,q,r;p=paraHeader;while((p->next !=NULL)&&(p->next->data !=paraChar)){p=p->next;}if(p->next == NULL){printf("The char '%c' does not exist.\r\n",paraChar);return;}q=p->next;r=q->next;p->next=r;if(r!=NULL){r->previous = p;}free(q); }

完整代碼

#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef struct DoubleLinkedNode {char data;struct DoubleLinkedNode *previous;struct DoubleLinkedNode *next; }DLNode,*DLNodePtr;DLNodePtr initLinkList(){DLNodePtr tempHeader =(DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));tempHeader->data = '\0';tempHeader->previous = NULL;tempHeader->next=NULL;return tempHeader; }void printList(DLNodePtr paraHeader) {DLNodePtr p= paraHeader->next;while(p!=NULL){printf("%c",p->data);p = p->next;}printf("\r\n"); }void insertElement(DLNodePtr paraHeader,char paraChar,int paraPosition) {DLNodePtr p,q,r;p = paraHeader;int i;for (i=0;i< paraPosition;i++){p=p->next;if(p==NULL){printf("The position %d is beyond the scope of the list.",paraPosition);return;}}q=(DLNodePtr)malloc(sizeof(struct DoubleLinkedNode));q->data = paraChar;r = p->next;q->next = p->next;q->previous = p;p->next = q;if(r!=NULL){r->previous = q;} }void locateELement(DLNodePtr paraHeader,char paraChar) {DLNodePtr p,q,r;int i=1;p=paraHeader;while((p->next !=NULL)&&(p->next->data !=paraChar)){p=p->next;i++;}if(p->next == NULL){printf("The char '%c' does not exist.\r\n",paraChar);return;}printf("%d\n",i); }void deleteElement(DLNodePtr paraHeader,char paraChar) {DLNodePtr p,q,r;p=paraHeader;while((p->next !=NULL)&&(p->next->data !=paraChar)){p=p->next;}if(p->next == NULL){printf("The char '%c' does not exist.\r\n",paraChar);return;}q=p->next;r=q->next;p->next=r;if(r!=NULL){r->previous = p;}free(q); }void insertDeleteTest() {DLNodePtr tempList = initLinkList();printList(tempList);insertElement(tempList,'p',0);insertElement(tempList,'o',1);insertElement(tempList,'l',2);insertElement(tempList,'l',3);insertElement(tempList,'e',4);insertElement(tempList,'n',5);printList(tempList) ;locateELement(tempList,'l');deleteElement(tempList,'o');deleteElement(tempList,'e');printList(tempList);}void basicAddressTest(){DLNode tempNode1,tempNode2;tempNode1.data = 4;tempNode1.next = NULL;tempNode2.data = 6;tempNode2.next = NULL;printf("The first node: %d,%d,%d\r\n",&tempNode1,&tempNode1.data,&tempNode1.next);printf("The Second node: %d,%d,%d\r\n",&tempNode2,&tempNode2.data,&tempNode2.next);tempNode1.next = &tempNode2;}int main() {insertDeleteTest();basicAddressTest(); }

運行結果

總結

以上是生活随笔為你收集整理的数据结构学习——双向链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 妖精视频污 | 成人免费看视频 | 操色网| 后进极品白嫩翘臀在线视频 | 冲田杏梨在线 | 性欧美丰满熟妇xxxx性 | 日韩少妇高潮抽搐 | 精品一区电影国产 | 亚洲精品1234 | 风间由美在线视频 | www.youjizz.com视频 | 51精产品一区一区三区 | a视频在线免费观看 | 日批在线 | 992av| 国产原创视频在线 | 波多野结衣亚洲 | 人妻久久久一区二区三区 | 亚洲精品美女视频 | 亚洲黄色第一页 | 久草新在线 | 国产精品久久久久久 | 亚洲永久精品国产 | 国产农村熟妇videos | 亚洲开心网 | 国产三级免费观看 | 岛国精品在线播放 | av在线第一页 | 在线观看的网站 | 亚洲精品一区二区三区精华液 | 四季av中文字幕一区 | 日本不卡一区 | 久久久亚洲精品视频 | 国产男女视频在线观看 | 中国色老太hd | 四虎国产精品成人免费入口 | 91禁在线看 | 黄色网址哪里有 | 日本一二三区在线视频 | 中文字幕不卡在线观看 | 国产精品2区 | 噼里啪啦国语版在线观看 | jizz内谢中国亚洲jizz | 欧美成人亚洲 | 激情午夜网 | 久久福利国产 | 一区二区三区四区久久 | 午夜网| 亚洲精品久久久久久动漫器材一区 | 亚洲最大的成人网 | 日韩中文字幕亚洲 | 中文字幕一区二区人妻电影 | 亚洲天堂资源在线 | 少妇无内裤下蹲露大唇视频 | 国产又爽又黄无码无遮挡在线观看 | 国产成a人亚洲精v品无码 | 久久99精品久久只有精品 | 五月av在线 | 国产在线国偷精品免费看 | 欧美日韩国产中文字幕 | 毛片无遮挡高清免费观看 | 女人脱下裤子让男人桶 | 黄色大视频 | 91网站在线观看视频 | 五月天激情开心网 | 人人爽人人干 | 亚洲天堂自拍偷拍 | 亚洲破处视频 | 欧美大肚乱孕交hd孕妇 | 北条麻妃一二三区 | 国产乱人伦精品一区二区 | 国产女厕一区二区三区在线视 | www.我爱av| 黄色片子一级 | 欧美色鬼| 日本高清在线一区 | 91福利片| 亚洲97色| 五月婷婷六月香 | 国产精品视频一二区 | 成人激情视频在线 | 久久久久免费精品 | 六月婷婷七月丁香 | 欧美国产精品一区二区三区 | 日本大尺度做爰呻吟 | 麻豆av片| 国产无遮挡呻吟娇喘视频 | 欧洲美熟女乱又伦 | 日韩丝袜一区 | 私人毛片 | 欧洲一区二区三区 | 日韩国产一级 | 懂色av一区二区三区免费观看 | 久久久久久国产精品免费 | 国产一区二区在线播放视频 | 久草麻豆| 婷婷一级片 | 在线观看一区二区三区视频 | 久草资源在线 |