顺序表完整版:初始化,扩容,增/删/查找/遍历 ... ...
#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;
}