数据结构--顺序表(C language)

顺序表完整版:初始化,扩容,增/删/查找/遍历 ... ...

#include <stdio.h>
#include <stdlib.h>
#define __LEN__ 100
#include <iostream>
using namespace std;
typedef struct vec {
	int* data; //数据区
	int len, size;  //元素个数,总长度
}vec;// 顺序表的一个节点

//构造
bool init_vector(vec& v,int new_size) {
	v.data = (int*)malloc(sizeof(int) * new_size);
	if (v.data == nullptr) { return false; }
	v.len = 0;
	v.size = new_size;
	return true;
}
//打印 
void print_vector(vec& v) {
	cout << "总长度" << v.size << "    元素个数" << v.len << "    数据空间地址" << v.data << endl;

	cout << "元素分别是:";
	if (!v.len) { cout << " 无 " << endl; }
	else{
		for (int i = 0; i < v.len; i++) {
			cout << v.data[i] << " ";
		}
		cout << endl;
	}
}
//扩容
void expand(vec& v) {
	int* old_data = v.data;
	int a = v.size;
	v.size *= 2;
	v.data = (int*)malloc(sizeof(int) * v.size);
	for (int i = 0; i < a; i++) {
		v.data[i] = old_data[i];
	}
	free(old_data);
}
//插入
void insert_vector(vec& v, int value,int dex) {
	if (v.len >= v.size) { expand(v); }
	if (dex < 0 || dex > v.len) { return; }
	for (int i = v.len-1; i >= dex; i--){
		v.data[i + 1] = v.data[i];
	}
	v.data[dex] = value;
	v.len++;
}
//根据位置删除
void delete_vector(vec& v, int dex) {
	if ( !v.len) { return; }
	if (dex <0 || dex > v.len - 1) { return; }
	for (int i = dex; i < v.len-1; i++) {
		v.data[i] = v.data[i + 1];
	}
	v.len--;
}
//查找
int find_vector(vec& v, int value) {
	if (!v.len) { return -1; }
	for (int i = 0; i < v.len; i++){
		if (v.data[i] == value) {
			return i;  //返回的是该value在顺序表中的下标(从零开始)
		}
	}
	return -1; //如果没有该元素则返回-1
}

bool clear(vec& v) {
	free(v.data);
	return true;
}

int main() {
	vec v1;

	if (init_vector(v1, 4)) {
		cout << "初始化成功" << endl;
	}//初始化一个长度为4的 顺序表
	insert_vector(v1, 4, 0);
	insert_vector(v1, 3, 1);
	insert_vector(v1, 1, 2);
	insert_vector(v1, 2, 1);
	//insert_vector(v1, 2, 1);
	delete_vector(v1, 1);
	insert_vector(v1, 2, 1);
	insert_vector(v1, 2, 1);
	print_vector(v1);//打印顺序表的信息
	if (clear(v1)) { cout << "销毁成功" << endl; }
	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值