數據結構線性表的順序存儲結構

線性表是由零個或多個數據元素組成的有序序列。

特點:

  • 數據元素間是有順序的;

  • 數據元素的個數是有限的;

  • 一般來說,數據元素的類型是相同的(強類型語言)。c/c++是強類型語言,必須指定數據類型。jsphppython等語言是弱類型就不需要指定數據類型。

線性表的順序存儲結構指的是用一段連續的存儲空間來存儲線性表中的數據元素,數組就是一個典型的順序存儲結構。

下面實現一個動態數組。

頭文件

#pragma once
class DynamicArray
{
private://成員變量int* data;//data指向存放數據元素的內存空間,堆區空間,數據元素類型默認是整數int size;//動態數組的大小,多少個數據元素,也就是線性表的長度int capacity;//動態數組容量
public://特殊成員函數DynamicArray();//無參構造DynamicArray(int capacity);//有參構造~DynamicArray();//析構//普通成員函數//尾部添加元素void pushBack(int value);//打印動態數組void printDynamicArray();//在指定位置前插入元素void insertByIndex(int index,int value);//查詢相關操作int getCapacity();//返回動態數組容量int getSize();//返回動態數組的大小int getValueByIndex(int index);//返回指定位置的元素int front();//返回動態數組第一個元素int back();//返回動態數組最后一個元素//刪除元素void popBack();//刪除最后一個元素void delByIndex(int index);//刪除元素
};

源文件

#include<iostream>
#include"dynamicArray.h"
using namespace std;
#include<time.h>
DynamicArray::DynamicArray()//無參構造,初始化成員變量
{capacity = 5;//動態數組默認長度為5data = new int[capacity];//data指向五個大小的內存空間size = 0;
}
DynamicArray::DynamicArray(int capacity)//有參構造,傳入容量
{this->capacity = capacity;data = new int[capacity];size = 0;
}
DynamicArray::~DynamicArray()//析構,釋放內存空間
{if(data!=nullptr){delete[]data;data = nullptr;}
}
void DynamicArray::pushBack(int value)
{//考慮容量夠不夠if (capacity == size)//容量已滿,需要擴容,擴充一倍{int* temp_data = new int[capacity * 2];//復制原始空間數據到新空間for (int i = 0; i < size; i++){temp_data[i] = data[i];}delete[]data;//釋放原始空間data = temp_data;capacity = capacity * 2;}data[size] = value;size++;
}
void DynamicArray::insertByIndex(int index, int value)
{if (index<0 || index>size - 1){return;}if (capacity == size){int* temp_data = new int[capacity * 2];for (int i = 0; i < size; i++){temp_data[i] = data[i];}delete[]data;//釋放原始空間data = temp_data;//更新成員變量capacity = capacity * 2;//更新容量//新元素插在index前,index開始的元素都往后移for (int i = size - 1; i >= index; i--){data[i + 1] = data[i];}data[index] = value;size++;}
}
void DynamicArray::printDynamicArray()
{for (int i = 0; i < size; i++){cout << data[i]<<" ";}cout << endl;
}
int DynamicArray::getCapacity()
{return capacity;
}
int DynamicArray::getSize()
{return size;
}
int DynamicArray::getValueByIndex(int index)
{if (index<0 || index>size - 1){return NULL;}return data[index];
}
int DynamicArray::front()
{if (size>0){return data[0];}return NULL;
}
int DynamicArray::back()
{if (size > 0){return data[size - 1];}return NULL;
}
void DynamicArray::popBack()
{if (size > 0){size--;}
}
void DynamicArray::delByIndex(int index)
{if (index<0 || index>size - 1){return;}for (int i = index; i < size - 1; i++){data[i] = data[i + 1];}size--;
}
void test_dynamicarray()
{//DynamicArray dy;DynamicArray* dy = new DynamicArray();//堆對象dy->pushBack(11);dy->pushBack(12);dy->pushBack(13);dy->pushBack(14);dy->pushBack(15);dy->printDynamicArray();dy->insertByIndex(2, 88);dy->printDynamicArray();cout<<"動態數組容量為"<<dy->getCapacity()<<endl;/*for (int i = 0; i < 5; i++){dy->pushBack(i + 20);}dy->printDynamicArray();cout << "動態數組容量為" << dy->getCapacity() << endl;*/cout << "動態數組的大小" << dy->getSize()<<endl;cout << "下標為三的元素" << dy->getValueByIndex(3) << endl;cout << "動態數組第一個元素是" << dy->front()<<endl;cout << "動態數組最后一個元素是" << dy->back() << endl;;dy->popBack();dy->printDynamicArray();dy->delByIndex(2);dy->printDynamicArray();delete dy;
}
void test_homework()
{srand((unsigned int)time(0));//srand(time(0));DynamicArray d;//DynamicArray* dy = new DynamicArray(8);for (int i = 0; i < 8; i++){d.pushBack(rand() % 41+60);//生成0-19之間的整數}//d.pushBack(5);//d.pushBack(7);//d.pushBack(8);//d.pushBack(6);//d.pushBack(2);//d.pushBack(1);//d.pushBack(9);d.printDynamicArray();for (int i = 0; i < d.getSize();){if (d.getValueByIndex(i)%2!=0){d.delByIndex(i);}else{i++;}}d.printDynamicArray();}
int main()
{//test_dynamicarray();test_homework();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76878.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76878.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76878.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

扣子空間試用:生成五一騎行規劃+notion文章編寫

今天試用了一下扣子空間&#xff0c;正好五一快到了&#xff0c;讓它幫忙做了五一騎行規劃&#xff0c;效果不賴&#xff01; 生成五一騎行規劃 點擊前往網站查看效果 prompt 如下&#xff1a; 幫我做一個五一上海騎行規劃 要求&#xff1a; - 風景優美 - 人少 - 100km總路程…

最新得物小程序sign簽名加密,請求參數解密,響應數據解密逆向分析

點擊精選&#xff0c;出現https://app.dewu.com/api/v1/h5/index/fire/index 這個請求 直接搜索sign的話不容易定位 直接搜newAdvForH5就一個&#xff0c;進去再搜sign&#xff0c;打上斷點 可以看到t.params就是沒有sign的請求參數&#xff0c; 經過Object(a.default)該函數…

在C#串口通信中,一發一收的場景,如何處理不同功能碼的幀數據比較合理,代碼結構好

在 C# 串口通信的一發一收場景里&#xff0c;處理不同功能碼的幀數據可采用以下合理的代碼結構&#xff0c;它能讓代碼更具可讀性、可維護性和可擴展性。 實現思路 定義幀結構&#xff1a;創建一個類來表示通信幀&#xff0c;其中包含功能碼、數據等信息。功能碼處理邏輯&…

【C++】vector擴容縮容

vector擴容縮容 1 擴容 一般來說&#xff0c;主要是重新分配內存 2 縮容 resize 縮小后&#xff0c;vector 的容量&#xff08;capacity()&#xff09;可能保持不變&#xff0c;需要顯式調用 shrink_to_fit() 來釋放內存。 驗證代碼&#xff1a; #include <vector>…

java中,線程的執行狀態有哪些

在 Java 里&#xff0c;線程有 6 種執行狀態&#xff0c;這些狀態都在 java.lang.Thread.State 枚舉類中被定義。下面為你詳細介紹這些狀態&#xff1a; 1. NEW&#xff08;新建狀態&#xff09; 當你創建了一個 Thread 對象&#xff0c;卻還未調用其 start() 方法時&#xf…

MATLAB 控制系統設計與仿真 - 41

魯棒控制的其他函數 - 回路成型函數 loopsyn 靈敏度問題由魯棒控制工具箱中的loopsyn就可以直接求解,該函數采用H無窮回路成型算法設計控制器,函數的調用格式為: [K,CL,gamma,info] = loopsyn(G,Gd) % G為受控對象模型% Gd為期望的回路傳遞函數% K為回路成型控制器模型% C…

查詢Hologres或postgresql中的數據

因Hologres使用postgresql的語法.所以兩者查詢一樣. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一個使用簡單連接池管理PostgreSQL連接的工具類。*/ publi…

OpenBayes 一周速覽|EasyControl 高效控制 DiT 架構,助力吉卜力風圖像一鍵生成;TripoSG 單圖秒變高保真 3D 模型

公共資源速遞 10 個教程&#xff1a; * 一鍵部署 R1-OneVision * UNO&#xff1a;通用定制化圖像生成 * TripoSG&#xff1a;單圖秒變高保真 3D * 使用 VASP 進行機器學習力場訓練 * InfiniteYou 高保真圖像生成 Demo * VenusFactory 蛋白質工程設計平臺 * Qwen2.5-0mni…

中興云電腦W102D_晶晨S905X2_2+16G_mt7661無線_安卓9.0_線刷固件包

中興云電腦W102D_晶晨S905X2_216G_mt7661無線_安卓9.0_線刷固件包 準備工作&#xff1a; 工具和設備在開始刷機之前&#xff0c;確保你已經準備好以下物品&#xff1a;雙公頭USB線&#xff1a;選擇一根30-50厘米長的USB線&#xff0c;長度適中&#xff0c;方便操作&#xff0c;…

Rust 學習筆記:安裝 Rust

Rust 學習筆記&#xff1a;安裝 Rust Rust 學習筆記&#xff1a;安裝 Rust在 Windows 上安裝 Rust命令行創建 Rust 項目在 Mac/Linux 上安裝 Rust一些命令升級卸載cargo -hrustc -h 安裝 RustRoverrust-analyzer Rust 學習筆記&#xff1a;安裝 Rust 在 Windows 上安裝 Rust …

Opencv圖像處理:輪廓檢測、輪廓近似、繪制外接圓外接矩形

文章目錄 一、圖像輪廓檢測1、比較2、常見的輪廓檢測方法1&#xff09;基于梯度的方法2&#xff09;基于邊緣檢測器的方法3&#xff09;基于閾值的方法 3、查找輪廓與繪制輪廓4、參數解釋4、代碼解釋1&#xff09;讀取原圖像灰度圖并用二值化顯示2&#xff09;輪廓繪制3&#x…

精益數據分析(17/126):精益畫布與創業方向抉擇

精益數據分析&#xff08;17/126&#xff09;&#xff1a;精益畫布與創業方向抉擇 大家好&#xff01;一直以來&#xff0c;我都希望能和大家一起在創業和數據分析的領域中不斷探索、共同進步。今天&#xff0c;我們接著深入學習《精益數據分析》&#xff0c;這次聚焦于精益畫…

每天五分鐘深度學習PyTorch:圖像的處理的上采樣和下采樣

本文重點 在pytorch中封裝了上采樣和下采樣的方法,我們可以使用封裝好的方法可以很方便的完成采樣任務,采樣分為上采樣和下采樣。 上采樣和下采樣 下采樣(縮小圖像)的主要目的有兩個:1、使得圖像符合顯示區域的大小;2、生成對應圖像的縮略圖。 下采樣( 放大圖像)的…

代碼隨想錄訓練營第39天 || 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III

198. 打家劫舍 思路&#xff1a; 動規五部曲&#xff1a; 1.dp數組及其下標的意義&#xff1a;dp數組表示當前房屋下偷與不偷的最大盜取金額 2.確定遞推公式&#xff1a;因為盜取房屋只能間隔盜取&#xff0c;并且還要取最大值。所以每個房屋都有盜取和不盜取兩個選擇&…

【AI 加持下的 Python 編程實戰 2_09】DIY 拓展:從掃雷小游戲開發再探問題分解與 AI 代碼調試能力(上)

DIY 拓展&#xff1a;從掃雷小游戲開發再探問題分解與 AI 代碼調試能力&#xff08;上&#xff09; 1 起因 最近在看去年剛出了第 2 版《Learn AI-assisted Python Programming》&#xff0c;梳理完 第七章 的知識點后&#xff0c;總感覺這一章的話題很好——問題分解能力的培…

使用DeepSeek-Prover-V1.5解決數學問題

DeepSeek-Prover-V1.5-RLRMaxTS是一個結合強化學習和搜索策略的自動定理證明系統。 1. 初等代數&#xff1a;二次方程求解 問題&#xff1a;解方程 x - 5x 6 0 操作步驟&#xff1a; 將問題轉換為Coq形式&#xff1a; Theorem quadratic : exists x : Z, x^2 - 5*x 6 0…

3.3 技術框架:LangChain、ReAct、Memory與Tool Integration

隨著人工智能技術的飛速發展&#xff0c;智能代理&#xff08;Agent&#xff09;已成為企業實現自動化、智能化和個性化服務的核心工具。在2025年&#xff0c;技術框架如LangChain、ReAct、Memory和Tool Integration在構建高效、靈活的AI代理系統中占據了重要地位。這些框架通過…

STM32F103 單片機(基于 ARM Cortex-M3 內核)的啟動過程涉及硬件初始化、固件配置和程序執行流程。

1. 啟動模式與地址映射 STM32F103 的啟動模式由 BOOT0 和 BOOT1 引腳配置決定&#xff0c;不同的啟動模式對應不同的存儲器映射&#xff1a; 啟動模式 映射地址范圍 說明 主 Flash 0x08000000~0x0807FFFF 用戶程序存儲在 Flash 中&#xff0c;復位后從 Flash 啟動&#xff08…

【C語言-選擇排序算法】實現對十個數進行排序

目錄 前言 一、選擇排序算法原理 二、選擇排序算法實現對十個數進行排序 三、代碼運行示例 四、選擇排序算法的時間復雜度和空間復雜度分析 五、選擇排序算法的優缺點 六、總結 前言 在計算機科學領域&#xff0c;排序算法是基石般的存在&#xff0c;它們就像是整理雜亂…

配置Intel Realsense D405驅動與ROS包

配置sdk使用 Ubuntu20.04LTS下安裝Intel Realsense D435i驅動與ROS包_realsense的驅動包-CSDN博客 中的方法一 之后不通過apt安裝包&#xff0c;使用官方的安裝步驟直接clone https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy 從這一步開始 執行完 這一步…