数据结构之顺序表的插入+删除+查找+修改操作【主函数一步一输出,代码更加清晰直观】

插入:

核心代码:

cpp 复制代码
void push_back(int x){//尾插法【时间复杂度:O(1)】 
	a[++n]=x;

}
void push_front(int x){//头插法【时间复杂度:O(N)】 
for(int i=n;i>=1;i--){
	a[i+1]=a[i];
} 
a[1]=x;
n++;
} 
void insert(int ret,int x){//在数组的任意位置插入元素【ret是索引,x是准备插入的元素值】 
	for(int i=n;i>=ret;i--){
		a[i+1]=a[i];
	} 
	a[ret]=x;
	n++;
} 

完整可执行代码:【只有插入】

cpp 复制代码
//时间复杂度计算的都是最坏情况下的次数 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n=0; 
int a[N];
void push_back(int x){//尾插法【时间复杂度:O(1)】 
	a[++n]=x;

}
void push_front(int x){//头插法【时间复杂度:O(N)】 
for(int i=n;i>=1;i--){
	a[i+1]=a[i];
} 
a[1]=x;
n++;
} 
void insert(int ret,int x){//在数组的任意位置插入元素【ret是索引,x是准备插入的元素值】 
	for(int i=n;i>=ret;i--){
		a[i+1]=a[i];
	} 
	a[ret]=x;
	n++;
} 
void print(){//输出 
	for(int i=0;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}
int main(){
print();
push_back(1);
print();
push_back(3);
print();
push_front(0);
print();
push_front(2);
print();
push_front(5);
print();
insert(4,9);
print();
insert(5,9);
print(); 
return 0;
}

运行结果:【主函数一步一输出,代码更加清晰直观】

删除:

核心代码:

cpp 复制代码
void pop_back(){//尾删法【时间复杂度:O(1)】 
	n--;
}
void pop_front(){//头删法【时间复杂度:O(N)】  
	
	for(int i=2;i<=n;i++){
		a[i-1]=a[i];
	};
	n--;
} 
void erase(int ret){//在数组的任意位置删除元素【ret是索引,x是准备插入的元素值】 
	for(int i=ret+1;i<=n;i++){
		a[i-1]=a[i];
	}
	n--; 
} 

完整可执行代码:【插入+删除】

cpp 复制代码
//时间复杂度计算的都是最坏情况下的次数 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n=0; 
int a[N];
void push_back(int x){//尾插法【时间复杂度:O(1)】 
	a[++n]=x;

}
void push_front(int x){//头插法【时间复杂度:O(N)】 
for(int i=n;i>=1;i--){
	a[i+1]=a[i];
} 
a[1]=x;
n++;
} 
void insert(int ret,int x){//在数组的任意位置插入元素【ret是索引,x是准备插入的元素值】 
	for(int i=n;i>=ret;i--){
		a[i+1]=a[i];
	} 
	a[ret]=x;
	n++;
}
void pop_back(){//尾删法【时间复杂度:O(1)】 
	n--;
}
void pop_front(){//头删法【时间复杂度:O(N)】  
	
	for(int i=2;i<=n;i++){
		a[i-1]=a[i];
	};
	n--;
} 
void erase(int ret){//在数组的任意位置删除元素【ret是索引,x是准备插入的元素值】 
	for(int i=ret+1;i<=n;i++){
		a[i-1]=a[i];
	}
	n--; 
} 
void print(){//输出 
	for(int i=0;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}
int main(){
print();
push_back(1);
print();
push_back(3);
print();
push_front(0);
print();
push_front(2);
print();
push_front(5);
print();
insert(4,9);
print();
insert(5,9);
print(); 
cout<<"----------------"<<endl;
pop_back();
print();
pop_front();
print();
erase(3);
print();
return 0;
}

运行结果:【主函数一步一输出,代码更加清晰直观】

查找:

核心代码:

cpp 复制代码
int find(int x){//查找数组中是否有元素x,若有输出x的下标,若没有输出-1。 
	for(int i=1;i<=n;i++){
		if(a[i]==x) return i;
	} 
	return -1;
} 

完整可执行代码:【插入+删除+查找】

cpp 复制代码
//时间复杂度计算的都是最坏情况下的次数 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n=0; 
int a[N];
void push_back(int x){//尾插法【时间复杂度:O(1)】 
	a[++n]=x;

}
void push_front(int x){//头插法【时间复杂度:O(N)】 
for(int i=n;i>=1;i--){
	a[i+1]=a[i];
} 
a[1]=x;
n++;
} 
void insert(int ret,int x){//在数组的任意位置插入元素【ret是索引,x是准备插入的元素值】 
	for(int i=n;i>=ret;i--){
		a[i+1]=a[i];
	} 
	a[ret]=x;
	n++;
}
void pop_back(){//尾删法【时间复杂度:O(1)】 
	n--;
}
void pop_front(){//头删法【时间复杂度:O(N)】  
	
	for(int i=2;i<=n;i++){
		a[i-1]=a[i];
	};
	n--;
} 
void erase(int ret){//在数组的任意位置删除元素【ret是索引,x是准备插入的元素值】 
	for(int i=ret+1;i<=n;i++){
		a[i-1]=a[i];
	}
	n--; 
}
int find(int x){//查找数组中是否有元素x,若有输出x的下标,若没有输出-1。 
	for(int i=1;i<=n;i++){
		if(a[i]==x) return i;
	} 
	return -1;
} 
void print(){//输出 
	for(int i=0;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}
int main(){
print();
push_back(1);print();
push_back(3);print();
push_front(0);print();
push_front(2);print();
push_front(5);print();
insert(4,9);print();
insert(5,9);print(); 
cout<<"----------------"<<endl;
pop_back();print();
pop_front();print(); 
erase(3);print();
cout<<"----------------"<<endl;
cout<<"查找5的下标是:"<<find(5)<<endl;
print();
cout<<"查找9的下标是:"<<find(9)<<endl;
print();
return 0;
}

运行结果:【主函数一步一输出,代码更加清晰直观】

修改:

核心代码:

cpp 复制代码
void change(int ret,int x){//将下标为ret的元素值改为x 
	a[ret]=x;
}

完整可执行代码:【插入+删除+查找+修改】

cpp 复制代码
//时间复杂度计算的都是最坏情况下的次数 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n=0; 
int a[N];
void push_back(int x){//尾插法【时间复杂度:O(1)】 
	a[++n]=x;

}
void push_front(int x){//头插法【时间复杂度:O(N)】 
for(int i=n;i>=1;i--){
	a[i+1]=a[i];
} 
a[1]=x;
n++;
} 
void insert(int ret,int x){//在数组的任意位置插入元素【ret是索引,x是准备插入的元素值】 
	for(int i=n;i>=ret;i--){
		a[i+1]=a[i];
	} 
	a[ret]=x;
	n++;
}
void pop_back(){//尾删法【时间复杂度:O(1)】 
	n--;
}
void pop_front(){//头删法【时间复杂度:O(N)】  
	
	for(int i=2;i<=n;i++){
		a[i-1]=a[i];
	};
	n--;
} 
void erase(int ret){//在数组的任意位置删除元素【ret是索引,x是准备插入的元素值】 
	for(int i=ret+1;i<=n;i++){
		a[i-1]=a[i];
	}
	n--; 
}
int find(int x){//查找数组中是否有元素x,若有输出x的下标,若没有输出-1。 
	for(int i=1;i<=n;i++){
		if(a[i]==x) return i;
	} 
	return -1;
} 
void change(int ret,int x){//将下标为ret的元素值改为x 
	a[ret]=x;
}
void print(){//输出 
	for(int i=0;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}
int main(){
print();
push_back(1);print();
push_back(3);print();
push_front(0);print();
push_front(2);print();
push_front(5);print();
insert(4,9);print();
insert(5,9);print(); 
cout<<"----------------"<<endl;
pop_back();print();
pop_front();print(); 
erase(3);print();
cout<<"----------------"<<endl;
cout<<"查找5的下标是:"<<find(5)<<endl;
print();
cout<<"查找9的下标是:"<<find(9)<<endl;
print();  
cout<<"----------------"<<endl;
change(3,6);
cout<<"下标为3的元素值修改为6"<<endl;
print();
change(4,8); 
cout<<"下标为4的元素值修改为8"<<endl;
print();
return 0;
}

运行结果:【主函数一步一输出,代码更加清晰直观】

相关推荐
写代码写到手抽筋2 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.2 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
苏宸啊2 小时前
IPC管道
linux·c++
BestOrNothing_20153 小时前
ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程
c++·ros2·subscriber·publisher·话题通信
wayz113 小时前
Momentum:PSL(心理线指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
8Qi83 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
三品吉他手会点灯3 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
乐迪信息4 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
J-Tony114 小时前
【JVM】根可达算法
jvm·算法
艾iYYY4 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法