C++實(shí)現(xiàn)線性表順序存儲(chǔ)的示例代碼
我學(xué)習(xí)順序表時(shí)找不到相關(guān)的代碼,以及我不清楚寫一個(gè)線性表需要的知識(shí),當(dāng)我寫出來(lái)可以使用的線性表我就把這些內(nèi)容貼了出來(lái)。
前置知識(shí)點(diǎn):結(jié)構(gòu)體,常量指針
順序表的特點(diǎn):
- 需要一片連續(xù)的存儲(chǔ)空間
- 邏輯上相連的數(shù)據(jù)的存儲(chǔ)位置也是相鄰的。
所以如果我們想要?jiǎng)?chuàng)建一個(gè)順序表我們需要做兩件事:
- 向系統(tǒng)申請(qǐng)一片空間供數(shù)組使用。
- 創(chuàng)建一個(gè)指針記錄空間地址。
而刪除順序表就是把空間釋放,并讓指針指向空。
順序表的創(chuàng)建和銷毀:
#include<iostream> #include<cstdlib> #define EleType int//方便日后使用 #define Maxsize 1000 using namespace std; //定義結(jié)構(gòu)體 struct sql{ int* elem; int len;//防止越界訪問(wèn) }; //初始化 void InitList(sql &l) { l.elem=new int [Maxsize]; if(!l.elem) cout<<"申請(qǐng)空間失敗"<<endl; l.len=0; } //銷毀線性表 void DestroyList(sql &l) { delete [] l.elem; l.elem=nullptr; } int main() { sql l; InitList(l); return 0; }
數(shù)據(jù)的插入和刪除:
因?yàn)樵陧樞虼鎯?chǔ)所有的數(shù)據(jù)的存儲(chǔ)地址是連續(xù)的,所以在插入和刪除數(shù)據(jù)時(shí)你需要改變后續(xù)的所有數(shù)據(jù)的位置。在插入時(shí)把后面的數(shù)據(jù)往后挪,刪除時(shí)把數(shù)據(jù)向前挪。
void adds(sql &l,EleType target,int sit) { if(sit>l.len+1 || sit <1) { cout<<"sit is wrong"<<endl;//插入位置錯(cuò)誤 exit(0); } if(l.len+1>Maxsize) { cout<<"Too many"<<endl;//存儲(chǔ)空間已滿 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++;//更新表長(zhǎng) } //刪除元素 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--;//更新表長(zhǎng) }
其他操作:
查找和更改:
//查找 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; }
清空、獲取長(zhǎng)度、判斷是否為空:
//清空線性表 void ClearLine(sql &l) { l.len=0; } //獲取線性表的長(zhǎng)度 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)建結(jié)構(gòu)體 struct sql{ EleType* elem;//創(chuàng)建一個(gè)指針 int len; }; //初始化 void InitList(sql &l) { l.elem=new EleType [Maxsize]; if(!l.elem) cout<<"申請(qǐng)空間失敗"<<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; } //獲取線性表的長(zhǎng)度 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; }
到此這篇關(guān)于C++實(shí)現(xiàn)線性表順序存儲(chǔ)的示例代碼的文章就介紹到這了,更多相關(guān)C++線性表順序存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于linux下C開(kāi)發(fā)中的幾點(diǎn)技術(shù)經(jīng)驗(yàn)總結(jié)
本篇文章是對(duì)linux下C開(kāi)發(fā)中的幾點(diǎn)技術(shù)經(jīng)驗(yàn)總結(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05VScode配置C++運(yùn)行環(huán)境的完整步驟
這篇文章主要給大家介紹了關(guān)于VScode配置C++運(yùn)行環(huán)境的完整步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C語(yǔ)言詳細(xì)講解循環(huán)語(yǔ)句的妙用
C語(yǔ)言循環(huán)控制語(yǔ)句是一個(gè)基于C語(yǔ)言的編程語(yǔ)句,該語(yǔ)句主要有while循環(huán)語(yǔ)句、do-while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu),在循環(huán)過(guò)程中還有關(guān)鍵字break、continue、do、break控制中斷繼續(xù)與結(jié)束等操作2022-04-04