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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【2019暑假刷题笔记-链表】总结自《算法笔记》

發(fā)布時(shí)間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2019暑假刷题笔记-链表】总结自《算法笔记》 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目? 錄

一、創(chuàng)建鏈表節(jié)點(diǎn)

二、創(chuàng)建鏈表

三、創(chuàng)建鏈表

四、查找元素

五、插入元素?

?六、刪除元素

七、靜態(tài)鏈表


一、創(chuàng)建鏈表節(jié)點(diǎn)

/* struct node{typename data; //數(shù)據(jù)域node* next; //指針域 };選擇帶頭結(jié)點(diǎn)的鏈表*/struct node{int x;node* next; }

二、創(chuàng)建鏈表

  • (C語(yǔ)言)malloc與free: /*在頭文件#include <stdlib.h>申請(qǐng)一個(gè)內(nèi)容空間typename* p=(typename*)malloc(sizeof(typename));但是malloc(sizeof(typename))返回的是未確定類型的指針void*,所以要加上裝置類型轉(zhuǎn)換(*typename)free(p) 釋放空間 */int* p=(int*)malloc(sizeof(int));free(p);/*如果失敗,返回空指針NULL并賦值給p如,int* p=(node*)malloc(100000000*sizeof(node*)); 可能會(huì)申請(qǐng)空間失敗*/

    ?

  • (C++)new與delete: /*new是C++中用來(lái)申請(qǐng)動(dòng)態(tài)空間的運(yùn)算符typename* p=new typename;delete(p);是與new一同使用的,方式內(nèi)存泄露*/node* p=new node; delete(p);

    ?

  • 三、創(chuàng)建鏈表

    node* create(int arr[]){node *p,*pre,*head; //pre保存當(dāng)前結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),head為頭結(jié)點(diǎn)node* head = new node;head->next=null;pre = head;for(int i=0;i<arr.length();i++){ //創(chuàng)建鏈表五步走node* p = new node; //第一步:申請(qǐng)一個(gè)內(nèi)存空間p->data = arr[i]; //第二步:將數(shù)據(jù)賦值給結(jié)點(diǎn)的數(shù)值域p->next = null; //第三步:操作新結(jié)點(diǎn)的左邊,將新結(jié)點(diǎn)p->next賦值為nullpre->next = p; //第四步:操作新結(jié)點(diǎn)的右邊,將前驅(qū)結(jié)點(diǎn)的next指針指向ppre=p; //第五步:把新結(jié)點(diǎn)設(shè)置為前驅(qū)結(jié)點(diǎn)}return head; }/*引用方式*/node* L = create(arr); //arr是數(shù)組 L = L->next; //L因?yàn)榈谝粋€(gè)結(jié)點(diǎn)是空結(jié)點(diǎn)head,所以需要有數(shù)值域需要將指針后移 while(L!=NULL){printf("%d",L->data);L = L->next; //移動(dòng)指針 }

    四、查找元素

    /*比如查找所要的數(shù)的個(gè)數(shù)*/int search(node* head,int x){ //需要一個(gè)鏈表和查找的數(shù)int count = 0; //計(jì)數(shù)器為0node* p = head->next;while(p!=null){if(p->data==x){ //值相等,計(jì)數(shù)器+1count++;}p->next; //指針向后挪一位}return count; }

    五、插入元素?

    /*比如插入一個(gè)數(shù)x*/void search(node* head,int pos,int x){ //需要一個(gè)鏈表、插入的位置和插入的數(shù)node* p = head;for(int i=0;i<pos-1;i++){ //移動(dòng)指針到需要插入位置的前一個(gè)位置p->next;}node* q = new node; //申請(qǐng)一個(gè)新的結(jié)點(diǎn)q->data = x;q->next = p->next;p->next = q; }

    ?六、刪除元素

    void delete(node* head,int x){ //需要一個(gè)鏈表和刪除的數(shù)node* p = head->next; //p從第一個(gè)點(diǎn)開始枚舉node* pre = head; //pre始終指向前一個(gè)結(jié)點(diǎn),因?yàn)樾枰耙粋€(gè)結(jié)點(diǎn)的->next指向刪除結(jié)點(diǎn)的后一個(gè)結(jié)點(diǎn),p是pre的后一個(gè)結(jié)點(diǎn),pre是p的前一個(gè)結(jié)點(diǎn)while(p!=null){if(p->data==x){ //找到要?jiǎng)h除的元素了pre->next = p->next; //刪除結(jié)點(diǎn)的next指向的結(jié)點(diǎn)賦值給刪除結(jié)點(diǎn)前一個(gè)結(jié)點(diǎn)的nextdelete(p);p=pre->next; //p指針后移一位}else{ //若不是,兩個(gè)指針后移pre = p;p = p->next;}} }

    七、靜態(tài)鏈表

    若結(jié)點(diǎn)數(shù)是較小的整數(shù),可以采用靜態(tài)鏈表。其實(shí)現(xiàn)的原理是hash,即通過(guò)建立一個(gè)結(jié)構(gòu)體,并領(lǐng)數(shù)組的下標(biāo)直接表示結(jié)點(diǎn)的地址,以達(dá)到直接訪問(wèn)數(shù)組中元素就能訪問(wèn)結(jié)點(diǎn)的效果,銀外由于結(jié)點(diǎn)的訪問(wèn)非常方便,因此靜態(tài)結(jié)點(diǎn)不需要頭結(jié)點(diǎn)的。

    struct Node{int data; //數(shù)據(jù)類型隨意int next; }node[size];/* 如果初始結(jié)點(diǎn)的地址是11111,第二個(gè)結(jié)點(diǎn)的地址是22222,第三個(gè)節(jié)點(diǎn)是33333,且第三個(gè)結(jié)點(diǎn)為鏈表的末尾,那么,整個(gè)靜態(tài)鏈表的結(jié)點(diǎn)就可以通過(guò)下面的寫法實(shí)現(xiàn)node[111111].next = 222222; node[222222].next = 333333; node[333333].next = -1; */

    ?

    總結(jié)

    以上是生活随笔為你收集整理的【2019暑假刷题笔记-链表】总结自《算法笔记》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。