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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

线性表的顺序存储——顺序存储结构的抽象实现

發布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的顺序存储——顺序存储结构的抽象实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,本文完成順序存儲結構線性表的抽象實現:

  1,SeqList 還是一個抽象類,這里僅實現線性表的關鍵操作,但是還是不能生成具體對象;

?????? 2,關鍵操作雖然指定,但是順序存儲的指定沒有在 SeqList 中完成,所以還是抽象類,不能生成具體對象;

?

??????

2,SeqList 設計要點:

?????? 1,抽象類模板,存儲空間的位置和大小由子類完成;

?????? 2,實現順序存儲結構線性表的關鍵操作(增刪查等);

?????? 3,提供數組操作符,方便快速獲取元素(因為是順序存儲結構,可以重載數組操作符);

?

3,SeqList 具體函數接口(增刪設獲長清操容):

? ? ?

?

4,順序存儲線性表實現:

1 #ifndef SEQLIST_H 2 #define SEQLIST_H 3 4 #include "Object.h" 5 #include "List.h" 6 #include "Exception.h" 7 8 namespace DTLib 9 { 10 11 template <typename T> 12 class SeqList : public List<T> 13 { 14 protected: 15 T* m_array; //順序存儲空間,子類實現,這里不賦值指針 16    int m_length; //當前線性表長度 17 18 public: 19 bool insert(int i, const T& e) // n + 5 => O(n) 20 { 21 bool ret = ((0 <= i) && (i <= m_length)); 22 ret = ret && (m_length <= capacity()); // 要插入元素,當插入后長度要加 1,此時小于號正好合適 23 24 if( ret ) 25 { 26 for(int p=m_length-1; p>=i; p--) // 基于順序表的插入要涉及數據向后挪動空出目標位置,向后移動則從后開始 27 { 28 m_array[p + 1] = m_array[p]; // 這里數組操作符實質是指針運算 29 } 30 31 m_array[i] = e; 32 m_length++; 33 } 34 35 return ret; 36    } 37 38 bool insert(const T& e) // 在線性表的尾部插入一個元素; 39 { 40 return insert(m_length, e); 41    } 42 43 bool remove(int i) // O(n) 44 { 45 bool ret = ((0 <= i) && (i < m_length)); 46 47 if( ret ) 48 { 49 for(int p = i; p<m_length-1; p++) // 基于順序表的刪除要涉及數據向前挪動,向前移動則從前開始 50 { 51 m_array[p] = m_array[p + 1]; 52 } 53 54 m_length--; 55 } 56 57 return ret; 58    } 59 60 bool set(int i, const T& e) 61 { 62 bool ret = ((0 <= i) && (i < m_length)); 63 64 if( ret ) 65 { 66 m_array[i] = e; 67 } 68 69 return ret; 70    } 71 72 /* 通過參數 e 來返回目標位置,而沒有通過返回值返回,是由于目標位置可能不合法,不合法就返回 false,也就是 get() 操作用來說明當前操作是否合法*/ 73 bool get(int i, T& e) const 74 { 75 bool ret = ((0 <= i) && (i < m_length)); 76 77 if( ret ) 78 { 79 e = m_array[i]; 80 } 81 82 return ret; 83    } 84 85 /* 86 int get(int i) const 87 { 88 int ret = -1; 89 90 if(get(i, ret)) 91 { 92 return ret; 93 } 94 95 return ret; 96 } 97 */ 98 99 int find(const T& e) const //O(n) 100 { 101 int ret = -1; 102 103 for(int i=0; i<m_length; i++) 104 { 105 if(m_array[i] == e) 106 { 107 ret = i; 108 109 break; 110 } 111 } 112 113 return ret; 114    } 115 116 int length() const 117 { 118 return m_length; 119    } 120 121 void clear() 122 { 123 m_length = 0; 124    } 125 126 // 順序存儲線性表的數組訪問方式,也是一般的訪問方式; 127 T& operator[] (int i) 128 { 129 bool ret = ((0 <= i) && (i < m_length)); // 必須先插入數據元素,然后才能訪問 130 131 if( ret ) 132 { 133 return m_array[i]; 134 } 135 else 136 { 137 THROW_EXCEPTION(IndexOutOfBoundsException, "Parameter i is invalid ..." ); 138 } 139    } 140 141 // 這里考慮了 const 和非 const 對象 142 T operator[] (int i) const 143 { 144 return (const_cast<SeqList<T>&>(*this))[i]; 145    } 146 147 //順序存儲空間的最大容量,順序存儲空間的指定沒有在這個類中指定,在//其子類中完成的,所以具體實現要放在子類中完成; 148 virtual int capacity() const = 0; 149 }; 150 151 } 152 #endif // SEQLIST_H

?

5,順序鏈表測試代碼:

1 #include <iostream> 2 #include "SeqList.h" 3 4 using namespace std; 5 using namespace DTLib; 6 7 int main() 8 { 9    SeqList<int>* l; 10 return 0; 11 }

轉載于:https://www.cnblogs.com/dishengAndziyu/p/10921473.html

總結

以上是生活随笔為你收集整理的线性表的顺序存储——顺序存储结构的抽象实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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