您好,登錄后才能下訂單哦!
本篇內容介紹了“C++如何實現線性表順序存儲”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
順序表的特點:
需要一片連續的存儲空間
邏輯上相連的數據的存儲位置也是相鄰的。
所以如果我們想要創建一個順序表我們需要做兩件事:
向系統申請一片空間供數組使用。
創建一個指針記錄空間地址。
而刪除順序表就是把空間釋放,并讓指針指向空。
順序表的創建和銷毀:
#include<iostream> #include<cstdlib> #define EleType int//方便日后使用 #define Maxsize 1000 using 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; }
數據的插入和刪除:
因為在順序存儲所有的數據的存儲地址是連續的,所以在插入和刪除數據時你需要改變后續的所有數據的位置。在插入時把后面的數據往后挪,刪除時把數據向前挪。
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--;//更新表長 }
其他操作:
查找和更改:
//查找 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; //創建結構體 struct sql{ EleType* elem;//創建一個指針 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++如何實現線性表順序存儲”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。