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)文章
c++只保留float型的小數(shù)點(diǎn)后兩位問(wèn)題
這篇文章主要介紹了c++只保留float型的小數(shù)點(diǎn)后兩位問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn)
在使用?Visual?Studio?開(kāi)發(fā)項(xiàng)目的時(shí)候,學(xué)會(huì)進(jìn)行“類文件的分離”十分重要,本文主要介紹了VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn),感興趣的可以了解一下2024-03-03
C語(yǔ)言求解最長(zhǎng)公共子字符串問(wèn)題及相關(guān)的算法分析
最長(zhǎng)公共子字符串問(wèn)題即是求一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的連續(xù)最多字符,這里我們來(lái)看一下面試中經(jīng)常出現(xiàn)的C語(yǔ)言求解最長(zhǎng)公共子字符串問(wèn)題及相關(guān)的算法分析2016-06-06
C語(yǔ)言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解
順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。本文將通過(guò)示例為大家講解一下順序表的基本操作,需要的可以參考一下2023-02-02
C++訪問(wèn)std::variant類型數(shù)據(jù)的幾種方式小結(jié)
std::variant是?C++17中引入的一個(gè)新的類模板,提供了一種存儲(chǔ)不同類型的值的方式,本文主要介紹了C++訪問(wèn)std::variant類型數(shù)據(jù)的幾種方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02

