顺序表(C语言和C++语言去实现)

顺序表---->一维数组
查找: 找元素,找位置,最大最小值
插入:插入 第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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44110100/article/details/105769629