最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

線性表的順序存儲C++代碼

2023-03-02 15:31 作者:吳小敏63  | 我要投稿

?我學習順序表時找不到相關的代碼,以及我不清楚寫一個線性表需要的知識,當我寫出來可以使用的線性表我就把這些內(nèi)容貼了出來。

前置知識點:結構體,常量指針,new和delete

順序表的特點:

  1. 需要一片連續(xù)的存儲空間

  2. ?邏輯上相連的數(shù)據(jù)的存儲位置也是相鄰的。

所以如果我們想要創(chuàng)建一個順序表我們需要做兩件事:

  1. 向系統(tǒng)申請一片空間供數(shù)組使用。

  2. 創(chuàng)建一個指針記錄空間地址。

而刪除順序表就是把空間釋放,并讓指針指向空。

順序表的創(chuàng)建和銷毀:

#include<iostream>#include<cstdlib>#define EleType int//方便日后使用#define Maxsize 1000using namespace std;//定義結構體struct sql{ ? ?int* elem; ? ?int len;//防止越界訪問};//初始化void InitList(sql &l){ ? ?l.elem=new int [Maxsize]; ? ?if(!l.elem) cout<<"申請空間失敗"<<endl; ? ?l.len=0; }//銷毀線性表void DestroyList(sql &l){ ? ?delete [] l.elem; ? ?l.elem=nullptr; }int main(){ ? ?sql l; ? ?InitList(l); ? ?return 0; }

數(shù)據(jù)的插入和刪除:

因為在順序存儲所有的數(shù)據(jù)的存儲地址是連續(xù)的,所以在插入和刪除數(shù)據(jù)時你需要改變后續(xù)的所有數(shù)據(jù)的位置。在插入時把后面的數(shù)據(jù)往后挪,刪除時把數(shù)據(jù)向前挪。

void adds(sql &l,EleType target,int sit){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl;//插入位置錯誤 ? ? ? ?exit(0); ? ?} ? ?if(l.len+1>Maxsize) ? ?{ ? ? ? ?cout<<"Too many"<<endl;//存儲空間已滿 ? ? ? ?exit(0); ? ?} ? ?//把后面的數(shù)據(jù)往后挪 ? ?for(int i=l.len-1;i>=sit-1;i--) ? ?{ ? ? ? ?l.elem[i+1]=l.elem[i]; ? ?} ? ?l.elem[sit-1]=target; ? ?l.len++;//更新表長}//刪除元素void DeletElem(sql &l,int sit){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl; ? ? ? ?exit(0); ? ?} ? ?for(int i=sit-1;i<l.len;i++) ? ?{ ? ? ? ?l.elem[i]=l.elem[i+1]; ? ?} ? ?l.len--;//更新表長}

其他操作:

查找和更改:

//查找int finding(sql l,EleType target){ ? ?for(int i=0;i<l.len;i++) ? ?{ ? ? ? ?if(l.elem[i]==target) return i+1; ? ?} ? ?return 0; }//更改void Changing(sql& l,int sit,EleType target){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl; ? ? ? ?exit(0); ? ?} ? ?l.elem[sit-1]=target; }

清空、獲取長度、判斷是否為空:

//清空線性表void ClearLine(sql &l){ ? ?l.len=0; }//獲取線性表的長度int Getlen(sql l){ ? ?return l.len; }//判斷線性表是否為空bool IsEmpty(sql l){ ? ?if(l.len==0) return true; ? ?return false; }

?

完整代碼

#include<iostream>#include<cstdlib>#define Maxsize 1000#define EleType int//方便日后使用using namespace std;//創(chuàng)建結構體struct sql{ ? ?EleType* elem;//創(chuàng)建一個指針 ? ?int len; };//初始化void InitList(sql &l){ ? ? ?l.elem=new EleType [Maxsize]; ? ?if(!l.elem) cout<<"申請空間失敗"<<endl; ? ?l.len=0; }//輸出void print(sql l){ ? ?for(int i=0;i<l.len;i++) ? ?{ ? ? ? ?cout<<l.elem[i]<<" "; ? ?} ? ?cout<<endl; }//插入void adds(sql &l,EleType target,int sit){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl; ? ? ? ?exit(0); ? ?} ? ?if(l.len+1>Maxsize) ? ?{ ? ? ? ?cout<<"Too many"<<endl; ? ? ? ?exit(0); ? ?} ? ?for(int i=l.len-1;i>=sit-1;i--) ? ?{ ? ? ? ?l.elem[i+1]=l.elem[i]; ? ?} ? ?l.elem[sit-1]=target; ? ?l.len++; }//刪除元素void DeletElem(sql &l,int sit){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl; ? ? ? ?exit(0); ? ?} ? ?for(int i=sit-1;i<l.len;i++) ? ?{ ? ? ? ?l.elem[i]=l.elem[i+1]; ? ?} ? ?l.len--; }//銷毀線性表void DestroyList(sql &l){ ? ?delete [] l.elem; }//清空線性表void ClearLine(sql &l){ ? ?l.len=0; }//獲取線性表的長度int Getlen(sql l){ ? ?return l.len; }//判斷線性表是否為空bool IsEmpty(sql l){ ? ?if(l.len==0) return true; ? ?return false; }//查找int finding(sql l,EleType target){ ? ?for(int i=0;i<l.len;i++) ? ?{ ? ? ? ?if(l.elem[i]==target) return i+1; ? ?} ? ?return 0; }//更改void Changing(sql& l,int sit,EleType target){ ? ?if(sit>l.len+1 || sit <1) ? ?{ ? ? ? ?cout<<"sit is wrong"<<endl; ? ? ? ?exit(0); ? ?} ? ?l.elem[sit-1]=target; }int main(){ ? ?sql l; ? ?InitList(l); ? ?EleType j=0; ? ?for(int i=1;i<10;i++,j++) ? ? ? ?adds(l,j,i); ? ?DeletElem(l,2); ? ?print(l); ? ?return 0; }


線性表的順序存儲C++代碼的評論 (共 條)

分享到微博請遵守國家法律
民勤县| 宜黄县| 长白| 平果县| 景谷| 洪泽县| 东宁县| 黄陵县| 西昌市| 天长市| 彰化县| 富平县| 民权县| 奈曼旗| 寻乌县| 南澳县| 高青县| 安庆市| 甘德县| 兴仁县| 崇礼县| 华容县| 南投市| 清水河县| 西吉县| 霍邱县| 蓝山县| 肃北| 清镇市| 宝山区| 罗源县| 铁岭县| 莎车县| 兴城市| 方山县| 白河县| 洪江市| 莱芜市| 泗洪县| 石楼县| 高平市|