【2019暑假刷题笔记-链表】总结自《算法笔记》
生活随笔
收集整理的這篇文章主要介紹了
【2019暑假刷题笔记-链表】总结自《算法笔记》
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目? 錄
一、創建鏈表節點
二、創建鏈表
三、創建鏈表
四、查找元素
五、插入元素?
?六、刪除元素
七、靜態鏈表
一、創建鏈表節點
/* struct node{typename data; //數據域node* next; //指針域 };選擇帶頭結點的鏈表*/struct node{int x;node* next; }二、創建鏈表
?
?
三、創建鏈表
node* create(int arr[]){node *p,*pre,*head; //pre保存當前結點的前驅結點,head為頭結點node* head = new node;head->next=null;pre = head;for(int i=0;i<arr.length();i++){ //創建鏈表五步走node* p = new node; //第一步:申請一個內存空間p->data = arr[i]; //第二步:將數據賦值給結點的數值域p->next = null; //第三步:操作新結點的左邊,將新結點p->next賦值為nullpre->next = p; //第四步:操作新結點的右邊,將前驅結點的next指針指向ppre=p; //第五步:把新結點設置為前驅結點}return head; }/*引用方式*/node* L = create(arr); //arr是數組 L = L->next; //L因為第一個結點是空結點head,所以需要有數值域需要將指針后移 while(L!=NULL){printf("%d",L->data);L = L->next; //移動指針 }四、查找元素
/*比如查找所要的數的個數*/int search(node* head,int x){ //需要一個鏈表和查找的數int count = 0; //計數器為0node* p = head->next;while(p!=null){if(p->data==x){ //值相等,計數器+1count++;}p->next; //指針向后挪一位}return count; }五、插入元素?
/*比如插入一個數x*/void search(node* head,int pos,int x){ //需要一個鏈表、插入的位置和插入的數node* p = head;for(int i=0;i<pos-1;i++){ //移動指針到需要插入位置的前一個位置p->next;}node* q = new node; //申請一個新的結點q->data = x;q->next = p->next;p->next = q; }?六、刪除元素
void delete(node* head,int x){ //需要一個鏈表和刪除的數node* p = head->next; //p從第一個點開始枚舉node* pre = head; //pre始終指向前一個結點,因為需要前一個結點的->next指向刪除結點的后一個結點,p是pre的后一個結點,pre是p的前一個結點while(p!=null){if(p->data==x){ //找到要刪除的元素了pre->next = p->next; //刪除結點的next指向的結點賦值給刪除結點前一個結點的nextdelete(p);p=pre->next; //p指針后移一位}else{ //若不是,兩個指針后移pre = p;p = p->next;}} }七、靜態鏈表
若結點數是較小的整數,可以采用靜態鏈表。其實現的原理是hash,即通過建立一個結構體,并領數組的下標直接表示結點的地址,以達到直接訪問數組中元素就能訪問結點的效果,銀外由于結點的訪問非常方便,因此靜態結點不需要頭結點的。
struct Node{int data; //數據類型隨意int next; }node[size];/* 如果初始結點的地址是11111,第二個結點的地址是22222,第三個節點是33333,且第三個結點為鏈表的末尾,那么,整個靜態鏈表的結點就可以通過下面的寫法實現node[111111].next = 222222; node[222222].next = 333333; node[333333].next = -1; */?
總結
以上是生活随笔為你收集整理的【2019暑假刷题笔记-链表】总结自《算法笔记》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【队列】队列的基本操作总结
- 下一篇: 【PAT】A1053 Path of E