国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

免費咨詢在線醫(yī)生百度推廣seo自學(xué)

免費咨詢在線醫(yī)生,百度推廣seo自學(xué),web網(wǎng)頁設(shè)計尺寸規(guī)范,wordpress blod雙向鏈表實質(zhì)上是在單向鏈表的基礎(chǔ)上加上了一個指針指向后面地址 單向鏈表請參考http://t.csdn.cn/3Gxk9 物理結(jié)構(gòu) 首先我們看一下兩種鏈表的物理結(jié)構(gòu) 我們可以看到:雙向在單向基礎(chǔ)上加入了一個指向上一個地址的指針,如此操作我們便可以向數(shù)組一樣操作…

雙向鏈表實質(zhì)上是在單向鏈表的基礎(chǔ)上加上了一個指針指向后面地址

單向鏈表請參考http://t.csdn.cn/3Gxk9

物理結(jié)構(gòu)
首先我們看一下兩種鏈表的物理結(jié)構(gòu)
在這里插入圖片描述
我們可以看到:雙向在單向基礎(chǔ)上加入了一個指向上一個地址的指針,如此操作我們便可以向數(shù)組一樣操作了,而且尾插也更加方便,復(fù)雜度從原來的O(n)變?yōu)镺(1),并且查找也可以運用二分查找。

一些基礎(chǔ)操作

頭插

在這里插入圖片描述

頭刪

在這里插入圖片描述

尾插

在這里插入圖片描述

尾刪

在這里插入圖片描述

接下來我們來進行代碼實現(xiàn)

頭文件以及要實現(xiàn)的函數(shù)聲明

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int LTDataType;
typedef struct Slist
{LTDataType val;struct Slist* next;struct Slist* random;
}ListNode;// 創(chuàng)建返回鏈表的頭結(jié)點.
ListNode* ListCreate();
// 雙向鏈表銷毀
void ListDestory(ListNode* pHead);
// 雙向鏈表打印
void ListPrint(ListNode* pHead);
// 雙向鏈表尾插
void ListPushBack(ListNode* pHead, LTDataType x);
// 雙向鏈表尾刪
void ListPopBack(ListNode* pHead);
// 雙向鏈表頭插
void ListPushFront(ListNode* pHead, LTDataType x);
// 雙向鏈表頭刪
void ListPopFront(ListNode* pHead);
// 雙向鏈表查找
ListNode* ListFind(ListNode* pHead, LTDataType x);
// 雙向鏈表在pos的前面進行插入
void ListInsert(ListNode* pos, LTDataType x);
// 雙向鏈表刪除pos位置的節(jié)點
void ListErase(ListNode* pos);
// 擴容
ListNode* my_malloc(LTDataType x);

函數(shù)實現(xiàn)

#include "dslist.h"ListNode* my_malloc(LTDataType x)//由于后續(xù)要頻繁使用到擴容,所以我們直接創(chuàng)一個擴容函數(shù)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));newnode->val = x;newnode->random = NULL;newnode->next = NULL;return newnode;
}ListNode* ListCreate()  //創(chuàng)建一個雙向鏈表
{ListNode* head = (ListNode * )malloc(sizeof(ListNode));head->val = -1;    head->next= NULL;head->random = NULL;return head;
}void ListDestory(ListNode* pHead)  //銷毀這個雙線鏈表
{while (pHead)//將每個節(jié)點都free掉{ListNode* mid = pHead;pHead = pHead->next;mid->next = NULL;free(mid);}
}void ListPrint(ListNode* pHead)   //打印雙向鏈表
{ListNode* mid = pHead;while (mid)  //循環(huán)一個一個打印{printf("%d->", mid->val);mid = mid->next;}printf("NULL");
}void ListPushBack(ListNode* pHead, LTDataType x)    //尾插
{ListNode* newnode = my_malloc(x);if (pHead->next == NULL)       //判斷鏈表是否為空,如果為空則只需要插入一個。{newnode->random = pHead;    //由于循環(huán)鏈表,需要將頭節(jié)點的random指向插入元素  newnode->next = NULL;pHead->next = newnode;pHead->random = newnode;}else             //如果不為空則正常尾插{ListNode* mid = pHead->random;    //由于雙向  頭節(jié)點的random指針直接指向尾部,所以不需要循環(huán)找尾mid->next = newnode;newnode->random = mid;pHead->random = newnode;}
}void ListPopBack(ListNode* pHead)   //尾刪
{if (pHead->next == NULL)   //判斷是否為空{return;}else{ListNode* mid = pHead->random;   //正常尾刪pHead->random = mid->random;mid->random->next = NULL;free(mid);}
}void ListPushFront(ListNode* pHead, LTDataType x)    //頭插
{if (pHead->next == NULL) //如果為空  則相當(dāng)于尾插  調(diào)用尾插函數(shù)即可{ListPushBack(pHead, x);}else    //不為空正常頭插{ListNode* nownode = my_malloc(x);   nownode->next = pHead->next;     //將nownode  的next指向  phead的nextnownode->random = pHead;     //nownode的random指向  pheadpHead->next = nownode;          //phead的next指向nownodenownode->next->random = nownode;}
}void ListPopFront(ListNode* pHead)    //頭刪
{if (pHead->next == NULL){return;}else{if (pHead->next == pHead->random){ListPopBack(pHead);}else{ListNode* mid = pHead->next;pHead->next = mid->next;mid->next->random = pHead;free(mid);}}
}ListNode* ListFind(ListNode* pHead, LTDataType x)   //尋找元素
{ListNode* left = pHead->next;ListNode* right = pHead->random;while (left && right)    //二分查找{if (left->val == x){return left;}if (right->val == x){return right;}left = left->next;right = right->random;}return NULL;
}void ListInsert(ListNode* pos, LTDataType x)
{ListNode* newnode = my_malloc(x);ListNode* mid = pos->random;mid->next = newnode;pos->random = newnode;newnode->next = pos;
}void ListErase(ListNode* pos)
{ListNode* next = pos->next;ListNode* last = pos->random;next->random = last;last->next = next;free(pos);
}

有什么疑惑歡迎大家留言。

http://aloenet.com.cn/news/45837.html

相關(guān)文章:

  • 免費開源的建站系統(tǒng)成免費crm軟件有哪些優(yōu)點
  • 制冷 網(wǎng)站建設(shè) 中企動力微指數(shù)官網(wǎng)
  • 做網(wǎng)站用源碼百度百科官網(wǎng)
  • 梅林 做服務(wù)器 網(wǎng)站seo掛機賺錢
  • 如何做醫(yī)療網(wǎng)站的專題頁網(wǎng)站營銷方案模板
  • 網(wǎng)站制作實例公司網(wǎng)站建設(shè)流程
  • 建網(wǎng)站需要什么設(shè)計專業(yè)注冊城鄉(xiāng)規(guī)劃師教材
  • 大連 做網(wǎng)站廣西壯族自治區(qū)
  • 網(wǎng)站開發(fā)b2b網(wǎng)上推廣平臺有哪些
  • dede換網(wǎng)站媒體平臺推廣
  • 做推廣賺錢的網(wǎng)站有哪些建網(wǎng)站費用
  • 做網(wǎng)站推廣哪家公司好百度風(fēng)云榜電視劇排行榜
  • php asp網(wǎng)站開發(fā)營銷推廣有哪些形式
  • 不用代碼做網(wǎng)站 知乎活動推廣方案策劃
  • 國際網(wǎng)站建設(shè)標(biāo)準(zhǔn)長沙推廣引流
  • 做網(wǎng)站業(yè)務(wù)員怎么查找客戶最佳bt磁力搜索引擎
  • 網(wǎng)站建設(shè)的客戶需求調(diào)查與分析軟文推廣怎么做
  • 網(wǎng)站專題二級頁怎么做今日國際重大新聞事件
  • 煙臺哪家公司可以做網(wǎng)站2022年度關(guān)鍵詞
  • 廈門企業(yè)做網(wǎng)站市場調(diào)研的方法
  • 做曖免費觀看網(wǎng)站常州seo排名收費
  • 站長工具永久更新網(wǎng)址查詢工具
  • 怎樣讓自己的網(wǎng)站被收錄軟文營銷文章案例
  • 北京旅游網(wǎng)站建設(shè)關(guān)鍵詞排名優(yōu)化易下拉排名
  • 權(quán)威的網(wǎng)站建設(shè)排行榜app如何推廣以及推廣渠道
  • 工程管理畢業(yè)設(shè)計代做網(wǎng)站百度網(wǎng)址大全下載安裝
  • 網(wǎng)站批量發(fā)布杭州網(wǎng)站推廣與優(yōu)化
  • 網(wǎng)站源碼怎么搭建百度官網(wǎng)認證多少錢一年
  • 織夢做的的網(wǎng)站首頁顯示空白站長工具箱
  • 網(wǎng)站開發(fā)的形式深圳網(wǎng)站設(shè)計小程序