欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)我寫出來(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é)

    基于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-05
  • 帶你粗略了解c++的最大乘積

    帶你粗略了解c++的最大乘積

    這篇文章主要為大家詳細(xì)介紹了C++的最大乘積,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助
    2021-08-08
  • C++中的常對(duì)象與常對(duì)象成員詳解

    C++中的常對(duì)象與常對(duì)象成員詳解

    常成員函數(shù)可以訪問(wèn)常對(duì)象中的數(shù)據(jù)成員,但仍然不允許修改常對(duì)象中數(shù)據(jù)成員的值。有時(shí)在編程時(shí)有要求,一定要修改常對(duì)象成員中的某個(gè)數(shù)據(jù)成員的值(例如類中有一個(gè)用于計(jì)數(shù)的變量count,其值應(yīng)當(dāng)不能變化)
    2013-10-10
  • 使用C++繪制GDI位圖的基本編寫實(shí)例

    使用C++繪制GDI位圖的基本編寫實(shí)例

    這篇文章主要介紹了使用C++繪制GDI位圖的基本編寫實(shí)例,一般來(lái)說(shuō)適用于Windwos下的C++的GUI編程,需要的朋友可以參考下
    2015-12-12
  • VScode配置C++運(yùn)行環(huán)境的完整步驟

    VScode配置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-01
  • 推箱子游戲C語(yǔ)言實(shí)現(xiàn)代碼

    推箱子游戲C語(yǔ)言實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了推箱子游戲C語(yǔ)言實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C/C++ 常用排序算法整理匯總分享

    C/C++ 常用排序算法整理匯總分享

    排序算法,就是如何使得記錄按照要求排列的方法。排序算法在很多領(lǐng)域得到相當(dāng)?shù)刂匾暎绕涫窃诖罅繑?shù)據(jù)的處理方面。一個(gè)優(yōu)秀的算法可以節(jié)省大量的資源。本篇整理了c語(yǔ)言和c++的常用的排序算法,感興趣的朋友可以參考下
    2021-06-06
  • c++多線程為何要使用條件變量詳解

    c++多線程為何要使用條件變量詳解

    多線程是多任務(wù)處理的一種特殊形式,下面這篇文章主要給大家介紹了關(guān)于c++多線程為何要使用條件變量的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Qt利用QGraphicsView繪制跳舞的機(jī)器人

    Qt利用QGraphicsView繪制跳舞的機(jī)器人

    最近新學(xué)了一招秘密武器,打算分享給大家!那就是如何在QGraphicsView中制作一個(gè)跳舞的機(jī)器人,快跟隨小編一起動(dòng)手嘗試一下吧
    2022-06-06
  • C語(yǔ)言詳細(xì)講解循環(huán)語(yǔ)句的妙用

    C語(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

最新評(píng)論