最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)線性表順序存儲(chǔ)的示例代碼

 更新時(shí)間:2023年03月02日 09:03:03   作者:NDX  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)線性表順序存儲(chǔ)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下

我學(xué)習(xí)順序表時(shí)找不到相關(guān)的代碼,以及我不清楚寫一個(gè)線性表需要的知識(shí),當(dāng)我寫出來可以使用的線性表我就把這些內(nè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;//防止越界訪問
};


//初始化
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)文章

  • VSCode之CMake使用小結(jié)

    VSCode之CMake使用小結(jié)

    本文主要介紹了VSCode之CMake使用小結(jié),文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • c++只保留float型的小數(shù)點(diǎn)后兩位問題

    c++只保留float型的小數(shù)點(diǎn)后兩位問題

    這篇文章主要介紹了c++只保留float型的小數(shù)點(diǎn)后兩位問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • OJ中G++和C++的區(qū)別

    OJ中G++和C++的區(qū)別

    今天小編就為大家分享一篇關(guān)于OJ中G++和C++的區(qū)別,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C++中浮點(diǎn)類型的具體使用

    C++中浮點(diǎn)類型的具體使用

    C++提供了不同精度的浮點(diǎn)類型,主要有?float、double?和?long?double,這些浮點(diǎn)類型具有不同的字節(jié)大小和范圍,用于滿足不同應(yīng)用場(chǎng)景的精度要求,本文主要介紹了C++中浮點(diǎn)類型的具體使用,感興趣的可以了解一下
    2023-08-08
  • VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn)

    VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn)

    在使用?Visual?Studio?開發(fā)項(xiàng)目的時(shí)候,學(xué)會(huì)進(jìn)行“類文件的分離”十分重要,本文主要介紹了VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn),感興趣的可以了解一下
    2024-03-03
  • c++ typeid關(guān)鍵字的使用

    c++ typeid關(guān)鍵字的使用

    這篇文章主要介紹了c++ typeid關(guān)鍵字的使用,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-11-11
  • C語言求解最長(zhǎng)公共子字符串問題及相關(guān)的算法分析

    C語言求解最長(zhǎng)公共子字符串問題及相關(guān)的算法分析

    最長(zhǎng)公共子字符串問題即是求一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的連續(xù)最多字符,這里我們來看一下面試中經(jīng)常出現(xiàn)的C語言求解最長(zhǎng)公共子字符串問題及相關(guān)的算法分析
    2016-06-06
  • C語言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解

    C語言順序表的基本結(jié)構(gòu)與實(shí)現(xiàn)思路詳解

    順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。本文將通過示例為大家講解一下順序表的基本操作,需要的可以參考一下
    2023-02-02
  • c語言中assert斷言用法實(shí)例詳解

    c語言中assert斷言用法實(shí)例詳解

    斷言是C語言中一種用于檢查程序中假設(shè)語句正確性的方法,通過使用斷言,開發(fā)人員可以在程序中插入一些條件,以確保程序的執(zhí)行滿足特定的預(yù)期,這篇文章主要給大家介紹了關(guān)于c語言中assert斷言用法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié)

    C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié)

    std::variant是?C++17中引入的一個(gè)新的類模板,提供了一種存儲(chǔ)不同類型的值的方式,本文主要介紹了C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02

最新評(píng)論

钟山县| 山东| 敖汉旗| 成武县| 古浪县| 福贡县| 南昌县| 林芝县| 神池县| 新泰市| 麻城市| 滁州市| 哈巴河县| 宁武县| 彩票| 临漳县| 六盘水市| 台江县| 嵊泗县| 连南| 梅州市| 陇南市| 老河口市| 博野县| 衡阳县| 六枝特区| 民丰县| 巨野县| 惠东县| 阿城市| 丘北县| 牙克石市| 长兴县| 通州市| 曲水县| 云浮市| 裕民县| 西青区| 简阳市| 二连浩特市| 舟曲县|