<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
線性表的順序儲存又稱順序表。它是用一組地址連續的儲存單元依次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。第1個元素儲存線上性表的起始位置,第i個元素的儲存位置後面緊鄰這儲存的是第i+1個元素,稱 i 為元素ai線上性表中的位序。因此,順序表的特點是表中元素的邏輯順序和物理順序相同。
假定線性表中的元素型別為ElemType,則線性表的順序儲存為
#define ElemType int #define MaxSize 50 //定義線性表的最大長度 typedef struct{ ElemType data[MaxSize] //順序表的元素 int length; //順序表的當前長度 }SqList; //順序表的型別定義
此時,一維陣列是靜態分配,由於陣列的大小和空間事先已經固定,一單空間佔滿,再加入新的資料就會產生溢位,進而導致程式崩潰。
(1)初始化操作
初始化順序表。構造一個空的線性表。
void IniteList(SqList &L){ memset(L.data,0,sizeof(L)); //將順序表L中的資料初始化為0 L.length = 0; }
注意: “&”表示C++中的應用呼叫,後面就不一一贅述了!
(2)建立順序表
bool CreateList(SqList &L,int n){ if(n<0||n>MaxSize){ //建立順序表的個數不合理 return false; } L.length = n; cout << "請依次輸出" << n <<"個數並用空格隔開:"; for(int i=0;i<L.length;i++){ cin >> L.data[i]; } return true; }
(3)插入操作
在順序表L的第i(1 <= i <= L.length+1)個位置插入新元素e。若 i 的輸入不合法,則返回false,表示插入失敗;否則,將第 i 個元素及其後的所有元素依次往後移動一個位置,騰出一個空位置插入新元素e,順序表的長度加1,插入成功,返回true.
bool InserteList(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1){ return false; cout << "插入位置不合法!"; } if(L.length == MaxSize){ return false; cout << "當前順序表空間已滿!"; } for(int j=L.length;j>=i;j--){ //先移動最後一個元素,在移動其他的 L.data[j]=L.data[j-1];//將i以及i之後的所有元素都往後移 } L.data[i-1]=e; //注意:先後移完之後在插入 L.length++; return true; }
注意: 區別順序表的位序和陣列下標。前者是從1開始,後者是從0開始。
(4)刪除操作
刪除順序表L中的第 i (1 <= i <= L.length) 個位置的元素,用應用變數e返回。若 i 的輸入不合法,則返回 false;否則,將被刪除元素賦給參照變數e,並將第 i + 1 個元素及其後的所有元素依次往前移動一個位置,返回true。
bool DeleteList(SqList &L,int i,ElemType e){ if(i<1||i>L.length){ return false; } e=L.data[i-1]; //將所刪除的元素賦值給 e for(int j=i;j<L.length;j++){ //j = i,在陣列中下標表示就是所刪除元素後面第一個元素 L.data[j-1]=L.data[j]; //將i之後的元素都往前移 } L.length--; return true; }
(5)查詢(按值查詢)
在順序表L中查詢第一個元素值等於 e 的元素,並將其返回。
int Search1_List(SqList &L,ElemType e){ int j=0; for(int i=0;i<L.length;i++){ if(L.data[i] == e){ j=i+1; //下標為 i 的元素值等於 e ,將其返回其位序 i+1 } } return j; }
(6)查詢(按序查詢)
在順序表中返回指定位置的元素。
int Search2_List(SqList &L,int i){ if(i<1||i>L.length){ cout << "查詢位置不合理!"; } return L.data[i-1]; }
(7)列印操作
按前後順序列印線性表L中的所有值。
void PrintList(SqList L){ cout << "順序表中所有元素為:"; for(int j=0;j<L.length;j++){ cout << L.data[j] << " "; } cout <<endl; }
/* 建立順序表 實現插入,刪除,按值查詢,按序查詢,列印順序表 */ #include<iostream> #include<stdlib.h> #include<cstring> #include<string.h> #define ElemType int #define MaxSize 100 using namespace std; typedef struct{ ElemType data[MaxSize]; int length; //數序標的長度 }SqList; //初始化順序表 void IniteList(SqList &L){ memset(L.data,0,sizeof(L)); //將順序表L中的資料初始化為0 L.length = 0; } //建立順序表函數 bool CreateList(SqList &L,int n){ if(n<0||n>MaxSize){ return false; } L.length = n; cout << "請依次輸出" << n <<"個數並用空格隔開:"; for(int i=0;i<L.length;i++){ cin >> L.data[i]; } return true; } //順序表L中在第i個位插入元素 bool InserteList(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1){ return false; cout << "插入位置不合法!"; } if(L.length == MaxSize){ return false; cout << "當前順序表空間已滿!"; } for(int j=L.length;j>=i;j--){ L.data[j]=L.data[j-1];//將i以及i之後的所有元素都往後移 } L.data[i-1]=e; //注意:先後移完之後在插入 L.length++; return true; } //刪除順序表L中第i個元素的位置上 bool DeleteList(SqList &L,int i,ElemType e){ if(i<1||i>L.length){ return false; } e=L.data[i-1]; //將所刪除的元素賦值給 e for(int j=i;j<L.length;j++){ L.data[j-1]=L.data[j]; //將i之後的元素都往前移 } L.length--; return true; } //查詢(按值查詢)函數 int Search1_List(SqList &L,ElemType e){ int j=0; for(int i=0;i<L.length;i++){ if(L.data[i] == e){ j=i+1; } } return j; } //查詢(按序查詢)函數 int Search2_List(SqList &L,int i){ if(i<1||i>L.length){ cout << "查詢位置不合理!"; } return L.data[i-1]; } //列印輸出順序表函數 void PrintList(SqList L){ cout << "順序表中所有元素為:"; for(int j=0;j<L.length;j++){ cout << L.data[j] << " "; } cout <<endl; } //建立 void Create(SqList &L){ int n;bool flag; cout << "請輸入所建立順序表中元素的個數:"; cin >> n; flag = CreateList(L,n); if(flag){ cout << "建立成功!"; PrintList(L); } else cout << "建立失敗!"; } //插入 void Insert(SqList &L){ int i; int e; bool flag; cout << "請輸入插入位置和所插元素:"; cin >> i >> e; flag = InserteList(L,i,e); if(flag){ cout << "插入成功!n" << "插入後" ; PrintList(L); } else cout << "插入失敗!"; } //刪除 void Delete(SqList &L){ int i; int e; bool flag; cout << "請輸入刪除位置:"; cin >> i; flag = DeleteList(L,i,e); if(flag){ cout << "刪除成功!" << "刪除後"; PrintList(L); } else cout << "刪除位置不合法!"; } //按值查詢 void Search_1(SqList &L){ int e,a; cout << "請輸入要查詢的值:"; cin >> e; a = Search1_List(L,e); cout << e << "在順序表L中的位置為:"<< a << endl; } //按序查詢 void Search_2(SqList &L){ int i; cout << "請輸入要查詢的位置:n"; cin >> i; int j = Search2_List(L,i); cout << "順序表L第" << i << "個位置上的元素為" << j; } int main(){ SqList L; IniteList(L); Create(L); Insert(L); Delete(L); Search_1(L); Search_2(L); return 0; }
編譯器DEVC++:
編譯結果:
到此這篇關於C++順序表的基本操作實現的文章就介紹到這了,更多相關C++順序表內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45