数据结构

Posted HanaKoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。

1、

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//类型重命名
typedef struct Vector 

	int *data;
	int size, length;
Vector;

//初始化1个存储n个元素的顺序表
Vector* init(int n) 

	//申请一个顺序表的空间
	Vector* vec = (Vector*)malloc(sizeof(Vector));
	//申请顺序表中连续存储区的存储空间
	vec->data = (int*)malloc(sizeof(int) * n);
	vec->size = n;
	vec->length = 0;
	return vec;


//顺序表的插入操作(顺序表,插入位置,插入值)
int insert(Vector* vec,int ind,int val)

	//排除异常
	if (vec == NULL)return 0;
	if (vec->length == vec->size)return 0;
	if (ind < 0 || ind > vec->length)return 0;

	//将插入位置后方数据后移一位
	for (int i = vec->length; i > ind; i--)
	
		vec->data[i] = vec->data[i - 1];
	
	vec->data[ind] = val;
	vec->length += 1;
	return 1;


//顺序表的删除操作(顺序表,位置)
int erase(Vector* vec, int ind)

	//排除异常
	if (vec == NULL)return 0;
	if (vec->length == vec->size)return 0;
	if (ind < 0 || ind >= vec->length)return 0;

	//将后方位置元素向前移动一位
	for (int i = ind + 1; i < vec->length; i++)
	
		vec->data[i - 1] = vec->data[i];
	
	vec->length -= 1;
	return 1;


//输出顺序表
void output(Vector* vec)

	printf("Vector(%d) = [", vec->length);

	for (int i = 0; i < vec->length; i++)
	
		if (i != 0)printf(", ");
		printf("%d", vec->data[i]);
	
	printf("]\\n");
	return;


//顺序表的销毁操作
void clear(Vector* vec)

	if (vec == NULL)return;
	//先顺序表销毁数据区
	free(vec->data);
	//再顺序表销毁本身空间
	free(vec);
	return;


//主函数
int main()

	//传入当前时间作为随机数种子
	srand(time(0));
	//随机操作20组数
	#define MAX_OP 20
	Vector* vec = init(MAX_OP);
	int op, ind, val;

	for (int i = 0; i < MAX_OP; i++)
	
		op = rand() % 2;//得到的 op 为0或1
		ind = rand() % (vec->length + 1);//随机数索引
		val = rand() % 100;//0-100之内随机生成一个值
		//判断操作功能 0:插入、1:删除
		switch (op) 
		
		case 0: 
		
			printf("insert %d at %d to vector = %d\\n",
				val, ind, insert(vec, ind, val));
		 break;
		case 1: 
		
			printf("erase item at %d from vector = %d\\n",
				ind, erase(vec, ind));
		 break;
		
		output(vec);
	
	return 0;

2、上述代码只能存储最大为20个空间的数据,故一下代码进行升级可以扩容操作

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//类型重命名
typedef struct Vector 

	int *data;
	int size, length;
Vector;


//初始化1个存储n个元素的顺序表
Vector* init(int n) 

	//申请一个顺序表的空间
	Vector* vec = (Vector*)malloc(sizeof(Vector));
	//申请顺序表中连续存储区的存储空间
	vec->data = (int*)malloc(sizeof(int) * n);
	vec->size = n;
	vec->length = 0;
	return vec;



//对顺序表扩容操作
int expand(Vector* vec)

	int new_size = vec->size * 2;
	int* p = (int*)realloc(vec->data, sizeof(int) * new_size);//重新分配
	if (p == NULL) return 0;
	vec->size = new_size;
	vec->data = p;
	return 1;



//顺序表的插入操作(顺序表,插入位置,插入值)
int insert(Vector* vec,int ind,int val)

	//排除异常
	if (vec == NULL)return 0;
	if (vec->size == vec->length)
	
		if (!expand(vec))return;//分配空间失败则return
		printf("expand vector size to %d success\\n", vec->size);
	
	if (ind < 0 || ind > vec->length)return 0;


	//将插入位置后方数据后移一位
	for (int i = vec->length; i > ind; i--)
	
		vec->data[i] = vec->data[i - 1];
	
	vec->data[ind] = val;
	vec->length += 1;
	return 1;



//顺序表的删除操作(顺序表,位置)
int erase(Vector* vec, int ind)

	//排除异常
	if (vec == NULL)return 0;
	if (vec->length == vec->size)return 0;
	if (ind < 0 || ind >= vec->length)return 0;

	//将后方位置元素向前移动一位
	for (int i = ind + 1; i < vec->length; i++)
	
		vec->data[i - 1] = vec->data[i];
	
	vec->length -= 1;
	return 1;



//输出顺序表
void output(Vector* vec)

	printf("Vector(%d) = [", vec->length);

	for (int i = 0; i < vec->length; i++)
	
		if (i != 0)printf(", ");
		printf("%d", vec->data[i]);
	
	printf("]\\n");
	return;



//顺序表的销毁操作
void clear(Vector* vec)

	if (vec == NULL)return;
	//先顺序表销毁数据区
	free(vec->data);
	//再顺序表销毁本身空间
	free(vec);
	return;




//主函数
int main()

	//传入当前时间作为随机数种子
	srand(time(0));
	//随机操作20组数
	#define MAX_OP 20
	Vector* vec = init(1);
	int op, ind, val;

	for (int i = 0; i < MAX_OP; i++)
	
		op = rand() % 2;//得到的 op 为0或1
		ind = rand() % (vec->length + 1);//随机数索引
		val = rand() % 100;//0-100之内随机生成一个值
		//判断操作功能 0:插入、1:删除
		switch (op) 
		
		case 0: 
		
			printf("insert %d at %d to vector = %d\\n",
				val, ind, insert(vec, ind, val));
		 break;
		case 1: 
		
			printf("erase item at %d from vector = %d\\n",
				ind, erase(vec, ind));
		 break;
		
		output(vec);
		printf("\\n");
	
	return 0;

自此完成

以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章

在数据结构中数据、数据元素、数据对象、数据结构、存储结构、数据类型以及抽象数据类型的定义分别是啥

数据结构与数据类型有啥区别?

数据结构都有哪些

数据结构和数据类型的区别

数据结构哪些是四种常见的逻辑结构

数据结构基本概念