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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理论基础 —— 线性表 —— 顺序表

發布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 线性表 —— 顺序表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【實現類】

const int maxSize=100;//存儲空間初始分配量 template <class T> class SeqList{ private:T data[maxSize];//存放數據元素的數組int length;//順序表的長度 public:SeqList();//無參構造函數SeqList(T a[],int n);//有參構造函數~SeqList(){};//析構函數空int getLength();//獲取順序表的長度T getElement(int i);//獲取順序表的第i個元素int getPosition(T x);//獲取順序表中值為x的元素序號void insertElement(int i,T x);//在順序表中第i個位置插入值為x的元素T deleteElement(int i);//刪除順序表的第i的元素void print();//按序號依次輸出順序表各元素 };

【構造函數與析構函數】

1.無參構造函數與析構函數

無參構造函數創建一個空的順序表,將表長置為 0,析構函數使用默認析構函數即可。

template<class T> SeqList<T>::SeqList(){length=0;//長度為0 }

2.有參構造函數

有參構造函數將給定數組元素作為順序表的數據元素,傳入元素個數 n 作為順序表長度。

template<class T> SeqList<T>::SeqList(T a[], int n){if(n>maxSize) throw "參數非法";for(int i=0;i<n;i++)//給定元素作為順序表數據元素data[i]=a[i];length=n;//傳入元素個數作為順序表長度 }

【獲取順序表長度】

求順序表的長度只需返回成員變量 length 的值

template<class T> SeqList<T>::getLength(){return length; }

【查找元素】

1.按位查找

按位查找時,順序表中第 i 個元素存儲在數組中下標為 i-1 的位置,時間復雜度為 O(1)

template<class T> T SeqList<T>::getElement(int i){if(i<1&&i>length)throw "查找位置非法";elsereturn data[i-1]; }

2.按值查找

按值查找時,需要對順序表中元素依次進行比較,查找成功則返回元素的序號,查找失敗則返回 0,時間復雜度為 O(n)

template<class T> int SeqList<T>::getPosition(T x){for(int i=0;i<length;i++)if(data[i]==x)return i+1;//返回元素序號return 0;//查找失敗 }

【插入操作】

在順序表中的第 i 個位置插入值元素,需要先將第 n 個元素到第 i 個元素后移 1 位,再將元素插入位置 i,使長度為 n 的順序表變為 n+1,其時間復雜度為 O(n)

需要注意的是,在插入之前需要進行異常判斷,如果表滿,則引發上溢異常;如果插入位置不合理,則引發位置異常。

template<class T> void SeqList<T>::insertElement(int i,T x){if(length>=maxSize)throw "上溢";if(i<1||i>length+1)throw "位置異常";for(int j=length;j>=i;j--)//第n個到第i個元素依次后移data[j]=data[j-1];data[i-1]=x;//位置i插入元素length++;//長度+1 }

【刪除操作】

在順序表中的第 i 個元素刪除,需要先取出被刪除的元素,然后將第 i+1 個元素到第 n 個元素前移 1 位,最后將順序表的長度變為 n-1,其時間復雜度為 O(n)

需要注意的是,在刪除之前需要進行異常判斷,如果表空,則引發下溢異常;如果刪除位置不合理,則引發位置異常。

T SeqList<T>::deleteElement(int i){if(length==maxSize)throw "下溢";if(i<1||i>length)throw "位置異常";T x=data[i-1];//取出刪除元素for(int j=i;j<=length-1;j++)//第i個到第n個元素依次前移data[j]=data[j+1];length--;//長度-1return x; }

7.遍歷輸出

遍歷輸出即按照下標依次輸出各元素

template<class T> void SeqList<T>::print(){for(int i=0;i<length;i++)cout<<data[i]<<endl; } 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的理论基础 —— 线性表 —— 顺序表的全部內容,希望文章能夠幫你解決所遇到的問題。

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