数据结构中,顺序表是如何实现的?

2026-05-17 02:191阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1199个文字,预计阅读时间需要5分钟。

数据结构中,顺序表是如何实现的?

1. 原创性内容创作,注重独特视角和创意表达。

2.突破传统思维,勇于尝试新颖的题材和形式。

3.结合时代背景,反映社会热点和大众关切。

4.严谨的逻辑结构,确保内容的合理性和说服力。

5.精炼的语言风格,追求简洁明了的表达效果。

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; }

自此完成

Love for Ever Day

本文共计1199个文字,预计阅读时间需要5分钟。

数据结构中,顺序表是如何实现的?

1. 原创性内容创作,注重独特视角和创意表达。

2.突破传统思维,勇于尝试新颖的题材和形式。

3.结合时代背景,反映社会热点和大众关切。

4.严谨的逻辑结构,确保内容的合理性和说服力。

5.精炼的语言风格,追求简洁明了的表达效果。

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; }

自此完成

Love for Ever Day