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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多数组实现链表

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多数组实现链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指針和對象的實現

對象的多數組表示

#include <iostream>using namespace std; typedef int T; class multiple_array_list { private:int capacity;int **key_array;int *next_array;int *pre_array;int count;int head;int tail; public:multiple_array_list(int capacity = 10):capacity(capacity){key_array = new T* [capacity]{nullptr};next_array = new int [capacity]{-1};pre_array = new int [capacity]{-1};head = -1;tail = -1;count = 0;}~multiple_array_list(){delete[] key_array;delete[] next_array;delete[] pre_array;}int size(){return count;}void insert(int* x){if(is_full()){int **key_arr_temp = new T *[capacity*2]{nullptr};int *next_arr_temp = new int [capacity*2]{-1};int * pre_arr_temp = new int [capacity*2]{-1};for (int i = 0; i < capacity; ++i) {key_arr_temp[i] = key_array[i];next_arr_temp[i] = next_array[i];pre_arr_temp[i] = next_array[i];}delete[] key_array;delete[] next_array;delete[] pre_array;key_array = key_arr_temp;next_array = next_arr_temp;pre_array = pre_arr_temp;capacity *= 2;}if(head == -1){head = 0;tail = 0;key_array[head] = x;pre_array[head] = -1;next_array[head] = -1;count = 1;}else{int start = -1;while (key_array[++start]!= nullptr);key_array[start] = x;pre_array[start] = tail;next_array[tail] = start;next_array[start] = -1;tail = start;count++;}}int find(T *x){int start = head;while (start!=-1 && key_array[start]!=x){start = next_array[start];}return start;}bool delete_key(T* x){int result = find(x);if(result == -1) return false;if(result == head){key_array[head] = nullptr;pre_array[head] = -1;int next = next_array[head];next_array[head] = -1;head = next;pre_array[head] = -1;}else if(result == tail){key_array[tail] = nullptr;int pre = pre_array[tail];pre_array[tail] = -1;next_array[pre] = -1;tail = pre;}else{int pre = pre_array[result];int next = next_array[result];next_array[pre] = next;pre_array[next] = pre;key_array[result] = nullptr;pre_array[result] = -1;next_array[result] = -1;}count -- ;return true;}void show(void (*pFunction)(T*)){int start = head;while (start!=-1){pFunction(key_array[start]);start = next_array[start];}}bool is_full(){return count == capacity;}bool is_empty(){return 0 == count;} }; void Show(T * t) {cout<<*t<<" "; } int main() {multiple_array_list arrayList;int arr[] ={1,2,3,4,5,6,7,8,9,10,11};for (int i = 0; i < 11; ++i) {arrayList.insert(&arr[i]);}arrayList.show(Show);cout<<endl;for (int i = 0; i < 5; ++i) {arrayList.delete_key(&arr[i]);}arrayList.show(Show);cout<<endl;for (int i = 0; i < 5; ++i) {arrayList.insert(&arr[i]);}arrayList.show(Show);return 0; }

總結

以上是生活随笔為你收集整理的多数组实现链表的全部內容,希望文章能夠幫你解決所遇到的問題。

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