关于茶网站模板,地域文化创意产网站建设规则,云南网站开发费用,谷歌怎么做公司网站数据结构是什么 数据机构是计算机存储、组织数据的一种方式#xff0c;他是将逻辑关系和物理关系它们的相互关系结合在一起#xff0c;并利用这种关系实现在计算机上来对数据的存储和组织#xff0c;并对他们做出适当的计算和做出一些优秀的算法#xff0c;但最终不会改变数… 数据结构是什么 数据机构是计算机存储、组织数据的一种方式他是将逻辑关系和物理关系它们的相互关系结合在一起并利用这种关系实现在计算机上来对数据的存储和组织并对他们做出适当的计算和做出一些优秀的算法但最终不会改变数据的结构类型 数据结构 结构定义 结构操作 结构定义 结构定义分为两个物理结构和逻辑结构 物理结构定义在数据结构的静态部分它定义了数据元素之间的关系和布局以及每个元素的属性。例如这个文章中的顺序表他的物理结构定义就是 typedef struct Vector {int size;//顺序表的长度int len;//顺序表现有的元素个数void *data;//数据存储区
} Vector; 而它的逻辑结构定义就是每个元素物理结构和逻辑结构都是连续的也就是每个元素之间的地址也是连续的 结构操作 结构操作就是在不破坏结构定义的前提下去对定义结构里的数据进行操作比如增删改查例如对于顺序表的插入元素 int add_element(Vector *v, int ind, int val) {//插入元素//在顺序表的ind位置插入元素valif (!v) return 0;if (ind 0 || ind v-len) return 0;//因为元素之间必须连续所以插入元素位置必须在[0, v-len)区间内if (v-len v-size) return 0;//超过了结构定义的长度无法再插入元素这里可以去扩容这里你们自己实现以下也是对自己对能力的提升for (int i v-len; i ind; i--) {//将ind位置和以后的位置向后移将ind的位置空出来放valv-data[i] v-data[i - 1];}v-data[ind] val;(v-len);return 1;
} 顺序表 大概讲述了以下数据结构是什么现在来说顺序表 顺序表就是把它里面的元素的物理结构逻辑结构都是连续起来的也就是他们的地址是连续的在我们的思想里也是连续的 它其实和数组是差不太多的但是它里面存了元素每个元素是必须连续的而数组你可以想存在那个数组的位置就可以存在那个位置没有结构定义的逻辑限制所以我上面说了在对结构操作时不能去违背结构定义不然就像你女朋友给你买了一包搽脸巾而你拿来擦py你破坏了结构定义就是你违背了你女朋友的想法 不要想着去违背女人的想法所以不要去违背结构定义这样你就会很轻松的拿捏女朋友呸数据结构 顺序表的物理结构定义很简单 1.他的总长度 2.他现在的长度 3.存储元素的空间(也就是数组) 而它的逻辑结构定义就是元素的物理结构逻辑结构都是连续起来的 有了这几个条件就可以去实现顺序表了然后我用的是C语言因为C语言没有封装好的这些数据结构只能通过自己去实现定义啊操作啊这些当你能用C语言自己来实现这些东西了你用封装好的那不是手手到擒来 代码实现 #include stdio.h
#include time.h
#include stdlib.htypedef struct Vector {int size;//顺序表的长度int len;//顺序表现有的元素个数int *data;//数据存储区
} Vector;Vector *init(int n) {//向计算机借空间,记得还回去Vector *v (Vector *)calloc(sizeof(Vector), 1); v-data (int *)calloc(sizeof(int), n);v-size n;v-len 0;return v;
}int add_element(Vector *v, int ind, int val) {if (!v) return 0;if (ind 0 || ind v-len) return 0;//因为元素之间必须连续所以插入元素位置必须在[0, v-len)区间内 if (v-len v-size) return 0;//超过了结构定义的长度无法再插入元素这里可以去扩容这里你们自己实现以下也是对自己对能力的提升 for (int i v-len; i ind; i--) {//讲ind位置和以后的位置向后移讲ind的位置空出来放valv-data[i] v-data[i - 1];}v-data[ind] val;(v-len);return 1;
} int erase(Vector *v, int ind) {//删除ind位置的元素if (!v) return 0;if (ind 0 || ind v-len) return 0;//删除肯定要删除区间里的元素区间外是没有元素的for (int i ind 1; i v-len; i) {//直接从ind 1往前覆盖,最终覆盖掉ind位置的元素v-data[i - 1] v-data[i];}(v-len)--;return 1;
}void output(Vector *v) {if (!v) return ;printf(Vector(%d) [, v-len);for (int i 0; i v-len; i) {i printf(,);printf(%d, v-data[i]);}printf(]\n);return ;
}void clear(Vector *v) {//你用了就要还回去你是借的计算机的不是你的if (!v) return ;free(v-data);free(v);return ;
}int main() {//测试srand(time(0));Vector *v init(10);int op, ind, val;for (int i 0; i 20; i) {op rand() % 4;//1/4概率删除3/4概率添加ind rand() % (v-len 2) - 1;val rand() % 100;switch (op) {case 0:case 1:case 2: {printf(%d insert in Vector %d is %d\n, val, ind, add_element(v, ind, val)); } break;case 3: {printf(erase in Vector %d is %d\n, ind, erase(v, ind));} break;}output(v);}clear(v);//最后记得释放动态开辟的空间数据结构基本都会动态开辟空间return 0;
} 顺序表比较简单没有什么可以说的了如果还是没有懂可以评论我会对应的回复 如果觉得对你有帮助可以点个赞谢谢