指针和对象的实现
对象的多数组表示
#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;
}