数据结构之顺序表(c语言实现)

本文主要介绍数据结构中顺序表的创建、声明,现正在学习阶段,如有错误请多多指正。
以下为伪代码,不能直接运行。
顺序表的定义以及创建

#define  MaxSize  N  //宏定义,有利于数据的更改
Typedef  int  ElemType;   //给已有的数据类型起别名,int 数据类型的别名ElemType
ElemType Struct 
{
   ElemType data[MaxSize];     //线性表的存放的数据
   int length;   //线性表的长度
}Sqlist     //类型

//顺序表的创建
/*将数组a中的元素依次存放在表L中,需要用molloc动态的分配内存(Sqlist *)强制类型转换
Sizeof 计算长度*/
void  CreatSql(Sqlist *&L,ElemType a[],int   n)
{
     int i=0 , j=0 ;
     L = (Sqlist *) molloc(Sizeof(Sqlist));
     while(i<n)//利用while循环对表进行赋值
     {
        L->data[i] = a[j];
        i++;j++;
     }
     //数据增加结束后,记得更改表的长度
     L->length  = k; 
}

顺序表的存储是将制定的数据按照逻辑关系 存储在一片连续的存储空间中。

顺序表的插入:
利用参数传递进行数据的插入,在数据插入之前需要判断插入的位置以及顺序表申请空间的大小是否满,由于length等于表的大小,所以i是小于length+1的

//判断语句
Insert(Sqlist *&L,int i,int e)
{
    if(i>0&&i<L->length+1)  //正确的插入范围
}

顺序表中数据的插入是将插入位置及以后的所有数据都后移一位,从最后一位向前开始移动,
然后利用赋值操作插入数据,最后顺序表的长度要+1,数据插入的时间复杂度按照取平均值中间位置为O(n/2) 最差为O(n) 最好为O(1)

Insert(Sqlist *&L,int i,int e)//表名,插入位置,插入数据
{
  //首先进行位置的判断
  if(i<1||i>L->length+1)//  || 或者的意思
  {
      return false;//返回一个false
  }
  //数据的后移
  for(int i=L->length;i>i-1;i--)
  {
     L->date[i+1] = L->data[i];
  }
  L->data[i]  = e;
  L->length++;
  return ture;
}

数据的删除
数据的删除和数据的插入是差不多相同的思想:
1、首先判断删除的元素的位置是否在表中,
2、利用给出的已知删除位置i,使用循环语句将i以后的所有数据向前覆盖,
3、表的长度减一

DropList(Sqlist *&L,int i)//表名,删除的位置
{
     if(i<1||i>L->length+1)
      return false;
      i--;
      //如果需要输出删除的数据的值,加一行e=L->data[i]; 
      for( i ; i<L->length;i++)
      L->data[i] = L->data[i+1];
      L->length--;
      return ture;
      
       
}

&在函数中是引用的作用
用于函数数据的返回

数据的查找
循环查找L中的数据与e做对比,相同就返回e中的位置值

SelectList(Sqlist *L,ElemType e)//
{
    for(int i=0;i<L->length;i++)
    {
          if(L->data[i] ==e)
            return i;
            else 
            return 0;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值