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

C++實現(xiàn)動態(tài)數(shù)組實踐

 更新時間:2026年05月28日 09:03:00   作者:byg_qlh  
這段C++代碼實現(xiàn)了動態(tài)數(shù)組的多種操作,包括初始化、賦值、打印、增刪改查等,通過這些操作可以靈活地管理數(shù)組數(shù)據(jù),適用于需要動態(tài)調(diào)整數(shù)組大小的場景

C++實現(xiàn)動態(tài)數(shù)組

  • 1. 數(shù)組初始化
  • 2. 給數(shù)組賦值
  • 3. 打印數(shù)組
  • 4. 增加數(shù)組長度
  • 5. 數(shù)組最后一個值替代最小值
  • 6. 逆置數(shù)組元素
  • 7. 逆置數(shù)組中指定位置范圍的元素
  • 8. 刪除數(shù)組中值為x的所有元素
  • 9. 刪除所有介于s和t之間(包含s與t)的元素
  • 10. 有序表中刪除相同元素
  • 11. 合并兩個有序數(shù)組,合并結(jié)果存入第三個數(shù)組
  • 12. 將數(shù)組中的前m位與后n為的位置互換

整體代碼

如下:

#include<iostream>

using namespace std;

struct SeList{//struct結(jié)構(gòu)體與class唯一的區(qū)別就是默認訪問權(quán)限不一樣 
	int *data;//struct默認是public的訪問權(quán)限,所以方便用于作為節(jié)點結(jié)構(gòu)體 
	int Max;//動態(tài)數(shù)組的整體思想是在結(jié)構(gòu)體內(nèi)聲明指針,最大長度,實際長度,在外部函數(shù)中生成實際的數(shù)組,數(shù)組的這三個主要指標放在了結(jié)構(gòu)體中 
	int length;
};

void initList(SeList &list,int x){//數(shù)組初始化 
	list.data=new int[x];
	list.Max=x;
	list.length=0; 
}

void setList(SeList &list){//給數(shù)組賦值 
	for(int i=0;i<list.Max;++i){
		list.data[i]=i+1;
		if(list.length<list.Max){
			list.length++;
		}
	}
}

void set_List(SeList &list){//給數(shù)組賦值 
	for(int i=0;i<list.Max/2;++i){
		list.data[i]=i+1;
		if(list.length<list.Max/2){
			list.length++;
		}
	}
}

void printList(SeList &list){//打印數(shù)組 
	for(int i=0;i<list.length;++i){
		cout<<list.data[i]<<" ";
	}
	cout<<endl;
}

void increaseList(SeList &list,int len){//增加數(shù)組長度 
	int *p=list.data;
	list.data=new int[list.Max+len];
	for(int i=0;i<list.length;++i){
		list.data[i]=p[i];
	}
	list.Max=list.Max+len;
	delete[] p;
}

bool deleteMin(SeList &list,int &value){//數(shù)組最后一個值替代最小值 
	if(list.length==0){
		return false;
	}
	value=list.data[0];
	int a=0;//輔助變量,記錄最小元素的位置 
	for(int i=0;i<list.length;++i){
		if(value>list.data[i]){
			value=list.data[i];
			a=i;
		}
	}
	list.data[a]=list.data[list.length-1];
	return true;
}

bool reverseList(SeList &list){//逆置數(shù)組元素 
	if(list.length==0){
		return false;
	}
	int temp=0;//輔助變量 
	for(int i=0;i<list.length/2;++i){//無需考慮數(shù)組元素個數(shù)的奇偶性,因為length/2取整 
		temp=list.data[i];
		list.data[i]=list.data[list.length-i-1];
		list.data[list.length-i-1]=temp;
	}
	return true; 
}

bool reverse_List(SeList &list,int m,int n){//逆置數(shù)組中指定位置范圍的元素
	if(list.length==0||m>=n){
		return false;
	}
	int temp=0,k=0;
	for(int i=m-1;i<=(n+m-2)/2;++i){
		temp=list.data[i];
		list.data[i]=list.data[n-1-k];
		list.data[n-1-k]=temp;
		++k;
	}
}

void deleteX(SeList &list,int x){//刪除數(shù)組中值為x的所有元素 
	int k=0;//記錄非x的元素個數(shù),也就是保留下來的元素個數(shù) 
	for(int i=0;i<list.length;++i){//順序掃描數(shù)組,每判斷一個非x值就加入結(jié)果數(shù)組 
		if(list.data[i]!=x){//非x元素保留下來,這里利用了i的值一定大于等于k的值,所以在一個循環(huán)中就可以解決問題 
			list.data[k]=list.data[i];
			++k;
		}
	}
	list.length=k;//修改數(shù)組長度 
}

bool deleteST(SeList &list,int s,int t){//刪除所有介于s和t之間(包含s與t)的元素 
	if(s>=t){
		cout<<"輸入范圍錯誤"<<endl; 
		return false;
	}
	if(list.length==0){
		cout<<"順序表為空"<<endl;
		return false;
	}
	int k=0;// 記錄不在范圍s與t之間的元素的個數(shù) 
	for(int i=0;i<list.length;++i){//順序掃描數(shù)組,每判斷到一個不屬于s與t之間的元素就加入結(jié)果數(shù)組 
		if(list.data[i]<s||list.data[i]>t){
			list.data[k]=list.data[i];
			++k;
		}
	}
	list.length=k;//修改數(shù)組長度 
	return true;
} 

void deleteSame(SeList &list){//有序表中刪除相同元素
	int k=1;//非相同元素的個數(shù) 
	for(int i=1;i<list.length;++i){// 因為第一個肯定不重復(fù),從第二個元素開始順序掃描數(shù)組,每判斷到一個不是相同的元素就將其加入結(jié)果數(shù)組 
		if(list.data[i]!=list.data[i-1]){
			list.data[k]=list.data[i];
			++k;
		}
	}
	list.length=k;//修改數(shù)組長度 
}

bool addList(SeList list1,SeList list2,SeList &list){//合并兩個有序數(shù)組,合并結(jié)果存入第三個數(shù)組 
	if(list1.length+list2.length>list.Max){//如果前兩個數(shù)組的長度之和大于第三個數(shù)組長度最大值,無法合并,返回錯誤 
		return false;
	}
	int i=0;//輔助變量,記錄第一個數(shù)組的下標 
	int j=0;//輔助變量,記錄第二個數(shù)組的下標 
	int k=0;//輔助變量,記錄第三個數(shù)組的下標 
	while(i<list1.length&&i<list2.length){//這里使用while循環(huán),對判斷條件的設(shè)置比較關(guān)鍵;當兩個數(shù)組都沒有遍歷完時,比較兩個數(shù)組最前面的值,較小者加入結(jié)果數(shù)組 
		if(list1.data[i]<=list2.data[j]){
			list.data[k]=list1.data[i];
			k++;
			i++; 
		}else{
			list.data[k]=list2.data[j];
			k++;
			j++;
		}
	}
	while(i<list1.length){//若只有第一個數(shù)組還沒有遍歷完,第一個數(shù)組剩余數(shù)據(jù)是表中較大的了,按順序加入結(jié)果數(shù)組即可 
		list.data[k]=list1.data[i];
		k++;
		i++;
	}
	while(j<list2.length){
		list.data[k]=list2.data[j];
		k++;
		j++;
	}
	list.length=k;
	return true;
}

bool invertList(SeList &list,int m,int n){//將數(shù)組中的前m位與后n為的位置互換,可以看做先將數(shù)組整個逆置,之后對目前的兩個數(shù)組分別再逆置,調(diào)用指定范圍的逆置函數(shù)實現(xiàn) 
	 reverseList(list);
	 reverse_List(list,1,n);
	 reverse_List(list,n+1,n+m);
	 return true;
} 

bool insert_List(SeList &list,int x){//若查到值為x的元素,將其與其后的元素交換位置,若查不到,則將其插入順序表中使得,順序表仍然遞增 
	 int low=0;
	 int n=list.length-1;
	 int high=n;
	 int mid;
	 while(low<=high){
	 	mid=(low+high)/2;
	 	if(list.data[mid]==x){
	 		break;
		 }else if(list.data[mid]<x){
		 	low=mid+1;
		 }else{
		 	high=mid-1;
		 }
	 }
	 if(list.data[mid]==x&&mid!=n){
	 	list.data[mid]=list.data[mid+1];
	 	list.data[mid+1]=x;
	 	cout<<x<<endl;
	 }
	 if(low>high){
	 	for(int i=n;i>high;--i){
	 		list.data[i+1]=list.data[i];
	 		list.data[i+1]=x;
	 		cout<<x<<endl;
		 }
		 list.length++;
	 }
}

int main(){
	SeList list1;
	initList(list1,15);
	setList(list1);//初始化并設(shè)置第一個數(shù)組 
	printList(list1);
	
	SeList list2;
	initList(list2,15);
	set_List(list2);
	printList(list2);//初始化并設(shè)置第二個數(shù)組 
	
	SeList list3;
	initList(list3,30);
	addList(list1,list2,list3);
	printList(list3);
	
	invertList(list1,6,9);
	printList(list1);

	
	insert_List(list2,5);
	printList(list2);
	
	
	return 0;
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++自定義封裝socket操作業(yè)務(wù)類完整實例

    C++自定義封裝socket操作業(yè)務(wù)類完整實例

    這篇文章主要介紹了C++自定義封裝socket操作業(yè)務(wù)類,結(jié)合完整實例形式分析了Linux環(huán)境下C++操作socket的封裝業(yè)務(wù)類,可實現(xiàn)基本的socket連接、參數(shù)設(shè)置、發(fā)送請求等基本功能,需要的朋友可以參考下
    2017-08-08
  • 詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用

    詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用,用來操作socket相關(guān)的網(wǎng)絡(luò)通信,需要的朋友可以參考下
    2015-09-09
  • 利用C++實現(xiàn)最長公共子序列與最長公共子串

    利用C++實現(xiàn)最長公共子序列與最長公共子串

    這篇文章主要給大家介紹了如何利用C++實現(xiàn)最長公共子序列與最長公共子串,文章一開始就給大家簡單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過算法及示例代碼詳細介紹了C++實現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C++ 取地址符相關(guān)的默認函數(shù)

    C++ 取地址符相關(guān)的默認函數(shù)

    本文主要介紹了C++ 取地址符相關(guān)的默認函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • C++利用ImGUI繪制D3D外部菜單

    C++利用ImGUI繪制D3D外部菜單

    ImGUI 它是與平臺無關(guān)的C++輕量級跨平臺圖形界面庫,沒有任何第三方依賴,可以將ImGUI的源碼直接加到項目中使用。本文將利用ImGUI繪制D3D外部菜單,需要的可以參考一下
    2022-09-09
  • OpenCV基于背景減除實現(xiàn)行人計數(shù)

    OpenCV基于背景減除實現(xiàn)行人計數(shù)

    本文主要介紹了如何使用OpenCV C++對視頻中的人流量進行統(tǒng)計。文中的示例代碼講解詳細,對我們學習OpenCV有一定的幫助,需要的可以了解一下
    2022-01-01
  • C++?OpenCV紅綠燈檢測Demo實現(xiàn)詳解

    C++?OpenCV紅綠燈檢測Demo實現(xiàn)詳解

    OpenCV(Open Source Computer Vision Library)是開源的計算機視覺和機器學習庫,提供了C++、 C、 Python、 Java接口,并支持Windows、 Linux、 Android、 Mac OS平臺,下面這篇文章主要給大家介紹了關(guān)于C++?OpenCV紅綠燈檢測Demo實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 使用C語言實現(xiàn)CRC校驗的方法

    使用C語言實現(xiàn)CRC校驗的方法

    本篇文章是對使用C語言實現(xiàn)CRC校驗的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++和OpenCV實現(xiàn)調(diào)用攝像頭

    C/C++和OpenCV實現(xiàn)調(diào)用攝像頭

    本文主要介紹了C/C++和OpenCV實現(xiàn)調(diào)用攝像頭,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • C++ Primer 第一部分基本語言

    C++ Primer 第一部分基本語言

    這篇文章主要介紹了C++ Primer 第一部分基本語言的相關(guān)資料,需要的朋友可以參考下
    2014-02-02

最新評論

五家渠市| 无为县| 隆子县| 故城县| 黄山市| 化隆| 乐安县| 镇雄县| 咸阳市| 织金县| 奉节县| 五寨县| 定西市| 三原县| 茶陵县| 循化| 柘荣县| 漾濞| 瑞昌市| 瑞丽市| 通化市| 清涧县| 灵丘县| 神农架林区| 长岭县| 温州市| 道孚县| 迭部县| 山阳县| 库车县| 永登县| 台东县| 徐水县| 武邑县| 遵化市| 金塔县| 永寿县| 定西市| 广水市| 闽清县| 双辽市|