当前位置:   article > 正文

数据结构线性表——顺序表代码_数据结构顺序线性表代码

数据结构顺序线性表代码

1.1 静态分配

  1. #include<stdio.h>
  2. #define MaxSize 10 //定义最大长度
  3. typeof struct{
  4. int data[MaxSize]; //用静态的“数组”存放数据元素
  5. int length; //顺序表的当前长度
  6. } SqList; //顺序表的类型定义(静态分配方式)
  7. //基本操作——初始化一个顺序表
  8. void InitList(SqList &L){
  9. L.length=0; //顺序表初始长度为0
  10. }
  11. int main(){
  12. SqList L; //声明一个顺序表
  13. InitList(L); //初始化顺序表
  14. ...
  15. return 0;
  16. }

1.2 动态分配

  1. #include<stdlib.h> //malloc、free函数的头文件
  2. #define InitSize 10 //顺序表的初始长度
  3. typedef struct{
  4. int *data; //指示动态分配数组的指针
  5. int MaxSize; //顺序表的最大容量
  6. int length; //顺序表的当前长度
  7. } SeqList; //顺序表的类型定义(动态分配方式)
  8. void InitList(SeqList &L){
  9. //用malloc函数申请一片连续的存储空间
  10. L.data=(int *)malloc(sizeof(int)*InitSize);
  11. L.length=0;
  12. L.MaxSize=InitSize;
  13. }
  14. //增加动态数组的长度
  15. void IncreaseSize(SeqList &L,int len){
  16. int *p=L.data;
  17. L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
  18. for(int i=0;i<L.length;i++){
  19. L.data[i]=p[i]; //将数据复制到新区域
  20. }
  21. L.MaxSize=L.MaxSize+len; //顺序表最大长度增加len
  22. free(p); //释放原来的内存空间
  23. }
  24. int main(){
  25. SeqList L; //声明一个顺序表
  26. InitList(L); //初始化顺序表
  27. //...此处省略部分代码,往顺序表里插入几个元素
  28. IncreaseSize(L,5);
  29. return 0;
  30. }

1.3 插入——O(n)

ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。

  1. #define MaxSize 10 //定义最大长度
  2. typedef struct{
  3. int data[MaxSize]; //用静态的“数组”存放数据元素
  4. int length; //顺序表的当前长度
  5. } SqList; //顺序表的类型定义
  6. bool ListInsert(SqList &L,int i,int e){
  7. if(i<1||i>L.length+1) //判断i的范围是否有效
  8. return false;
  9. if(L.length>=MaxSize) //当前存储空间已满,不能插入
  10. return false;
  11. for(int j=L.length;j>=i;j--) //将第i个元素及之后的元素后移
  12. L.data[j]=L.data[j-1];
  13. L.data[i-1]=e; //在位置i处放入e
  14. L.length++; //长度加1
  15. return true;
  16. }
  17. int main(){
  18. SqList L; //声明一个顺序表
  19. InitList(L); //初始化顺序表
  20. //...此处省略部分代码,插入几个元素
  21. ListInsert(L,3,3); //此处的3是指位序,实际上是指数组中下标为2的位置
  22. return 0;
  23. }

1.4 删除——O(n)

  1. bool ListDelete(SqList &L,int i,int &e){ //i表示位序,e是引用型变量,如果&L不加&,则是复制一个顺序表
  2. if(i<1||i>L.length) //判断i的范围是否有效
  3. return false;
  4. e=L.data[i-1]; //将被删除的元素赋值给e
  5. for(int j=i;j<L.length;j++) //将第i个位置后的元素前移
  6. L.data[j-1]=L.data[j];
  7. L.length--; //线性表长度减1
  8. return true;
  9. }
  10. int main(){
  11. SqList L; //声明一个顺序表
  12. InitList(L); //初始化顺序表
  13. //...此处省略一些代码,插入几个元素
  14. int e=-1; //用变量e把删除的元素“带回来”
  15. if(ListDelete(L,3,e))
  16. printf("已删除第3个元素,删除元素值为=%d\n",e);
  17. else
  18. printf("位序i不合法,删除失败\n");
  19. return 0;
  20. }

1.5 查找

1.5.1 按位查找——O(1)

GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

1.5.1.1 静态分配

  1. #define MaxSize 10 //定义最大长度
  2. typedef struct{
  3. int data[MaxSize]; //用静态的“数组”存放数据元素
  4. int length; //顺序表的当前长度
  5. } SqList; //顺序表的类型定义(静态分配方式)
  6. int GetElem(SqList L,int i){
  7. return L.data[i-1];
  8. }

1.5.1.2 动态分配

  1. #define InitSize 10 //顺序表的初始长度
  2. typedef struct{
  3. int *data; //指示动态分配数组的指针
  4. int MaxSize; //顺序表的最大容量
  5. int length; //顺序表的当前长度
  6. } SeqList; //顺序表的类型定义(动态分配方式)
  7. int GetElem(SeqList L,int i){
  8. return L.data[i-1]; //指针每次所取的字节大小,与指针的类型有关
  9. }

1.5.2 按值查找——O(n)

LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。

  1. #define InitSize 10 //顺序表的初始长度
  2. typedef struct{
  3. int *data; //指示动态分配数组的指针
  4. int MaxSize; //顺序表的最大容量
  5. int length; //顺序表的当前长度
  6. } SeqList; //顺序表的类型定义(动态分配方式)
  7. //在顺序表L中查找第一个元素值等于e的元素,并返回其位序
  8. int LocateElem(SeqList L,int e){
  9. for(int i=0;i<L.length;i++)
  10. if(L.data[i]==e)
  11. return i+1; //数组下标为i的元素值等于e,返回其位序i+1
  12. return 0; //退出循环,说明查找失败
  13. }

1.6 结构类型的比较

  1. typedef struct{
  2. int num;
  3. int people;
  4. } Customer;
  5. void test(){
  6. Customer a;
  7. a.num=1;
  8. a.people=1;
  9. Customer b;
  10. b.num=1;
  11. b.people=1;
  12. if(a.num==b.num&&a.people==b.people){//直接写a==b,会报错
  13. printf("相等");
  14. }else{
  15. printf("不相等")
  16. }
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/922204
推荐阅读
相关标签
  

闽ICP备14008679号