顺序表---->一维数组
查找: 找元素,找位置,最大最小值
插入:插入 第K个元素
删除:删除 第K个元素
其实这些内容在以后的王道考研里面还是经常用的。
以下我具体用代码去写。
无论是顺序表,链表,栈,队列,等等都是为了增删改查等操作。市面上很多的算法题核心的思想也是这个。废话不多说,直直接上代码。
操作都是为了用函数去封装起来,安全性更高。取别名操作可以缩小代码的长度
其实很多地方都要去注意边界条件。比如删除插入。
#include <stdio.h>
#define MAX 100010
//要用取别名,不然用不了。取别名能够减少代码的长度
typedef struct SList{
//SList==Squence List
int data[MAX];
int length;
}SL;
//初始化操作
void init(SL* p){
p->length=0;
}
//打印操作
void printList(const SL* p){
for(int i=0;i<p->length;i++){
printf("%d ",p->data[i]);
}
putchar('\n');
}
int insert(SL* p,int position,int number){
//检查合法的插入位置[0,length-1]
if(position<0||position>p->length||p->length==MAX-1) return 0;
else{
// 1 2 3 4 5 6 7 8 9
// ^
// |
//先退后再插入
for(int i=p->length-1;i>=position;i--){
p->data[i+1]=p->data[i];
}
p->data[position]=number;
//告诉表,长度多了一个
p->length++;
return 1;
}
}
int erase(SL* p,int position,int* pnumber){
//判断删除界限 ,删除失败的情况
if(position<0||position>=p->length) return 0;
else{
//又要考虑一个问题,删除的元素放在哪里呢?
*pnumber=p->data[position];
//position [postion+1,length-1]往前移动一个
for(int i=position+1;i<p->length;i++){
p->data[i-1]=p->data[i];
}
p->length--;
return 1;
}
}
int main(){
SL a;
//先要做初始化操作,定义长度为0;但是操作尽量写成函数
//a.length=0;
init(&a);
//插入操作,传入结构体,指定位置.具体到插入元素。
insert(&a,0,11);
insert(&a,0,22);
insert(&a,1,33);
//删除 参数:传入表,删除的位置,返回出来删除的值
int x;//删除的元素放到x里
erase(&a,1,&x);
//打印表的内容
printList(&a);
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------
以下是C++的写法!
其实就是用了vector代替数组,但是话说模板的功能真的十分强大
#include <iostream>
using namespace std;
#include <vector>
int main(){
//vector顺序实现
vector<int> v;
//往向量里面去压入元素
v.push_back(11);
v.push_back(22);
v.push_back(33);
v.push_back(44);
//emplace_back()
//传入对象的时候。可以去减少拷贝构造,
//这次int没有设计大规模的参数传递
//cout<<v;
//如果仅仅去输出v的话,需要重载运算符 。一堆操作很麻烦
//但是我会开一个小专题专门去重载运算符
//vector怎么去进行插入操作,这个就涉及了迭代器,
//这里的iterator类于指针,但是不是指针
vector<int>::iterator it;
//注意end返回的不是最后一个位置,而是最后一个元素之后的元素
v.insert(v.begin(),666);
v.erase(v.begin()+1);
// for(it=v.begin();it!=v.end();it++){
// //v.begin();其实就是第一个元素
// v.insert(v.begin(),666);
// }
for(int i:v){
cout<<i<<",";
}
return 0;
}